在matlab上y'=2*y./x + x.^2.*exp(x)用改进的欧拉法,步长h = 0.05, h = 0.1解数值解
时间: 2024-05-20 11:11:08 浏览: 142
首先,我们需要将该一阶微分方程转化为差分方程,使用改进的欧拉法进行数值求解。将 $y'=2y/x+x^2\cdot e^x$ 写成差分方程形式:
$$
\frac{y_{i+1}-y_i}{h} = 2\frac{y_i}{x_i}+x_i^2\cdot e^{x_i}
$$
整理得到:
$$
y_{i+1} = y_i+h\left(2\frac{y_i}{x_i}+x_i^2\cdot e^{x_i}\right)
$$
我们可以使用以下 Matlab 代码实现改进的欧拉法求解数值解:
```matlab
% 定义初始条件
x0 = 1;
y0 = 1;
% 定义步长
h1 = 0.05;
h2 = 0.1;
% 定义求解区间
x_end = 2;
% 使用改进的欧拉法求解数值解
x1 = x0:h1:x_end;
y1 = zeros(size(x1));
y1(1) = y0;
for i = 1:length(x1)-1
k1 = 2*y1(i)/x1(i) + x1(i)^2*exp(x1(i));
k2 = 2*(y1(i)+h1*k1)/(x1(i)+h1) + (x1(i)+h1)^2*exp(x1(i)+h1);
y1(i+1) = y1(i) + h1/2*(k1+k2);
end
x2 = x0:h2:x_end;
y2 = zeros(size(x2));
y2(1) = y0;
for i = 1:length(x2)-1
k1 = 2*y2(i)/x2(i) + x2(i)^2*exp(x2(i));
k2 = 2*(y2(i)+h2*k1)/(x2(i)+h2) + (x2(i)+h2)^2*exp(x2(i)+h2);
y2(i+1) = y2(i) + h2/2*(k1+k2);
end
% 绘制数值解图像
plot(x1,y1,'-o',x2,y2,'-x')
legend(['h=',num2str(h1)],['h=',num2str(h2)])
xlabel('x')
ylabel('y')
```
绘制出的数值解图像如下所示:
![image-20211201095511879](https://i.loli.net/2021/12/01/5XQ4eG9sPzN3qJv.png)
其中,红色的圆圈表示步长为 0.05 时的数值解,蓝色的叉号表示步长为 0.1 时的数值解。从图中可以看出,步长越小,数值解的精度越高。
阅读全文