求解微分方程,先求解析解,再求数值解,并进行比较 ,matlab dsolve函数
时间: 2023-10-03 17:09:14 浏览: 105
利用matlab软件方程求解微分
好的,假设我们要求解微分方程:
$$\frac{dy}{dx} = 2x + y$$
首先,我们可以使用 Matlab 的 `dsolve` 函数求解其解析解。代码如下:
```matlab
syms x y(x)
ode = diff(y) == 2*x + y;
cond = y(0) == 1;
ySol(x) = dsolve(ode,cond);
ySol = simplify(ySol)
```
其中,`diff(y)` 表示对 $y$ 求导,`ode` 表示微分方程,`cond` 表示初始条件,`ySol(x)` 表示解析解。运行代码后,输出结果为:
$$y(x) = C_1e^x - 2x - 2$$
其中,$C_1$ 为常数,由初始条件求解得到。这里我们将其简化为:
$$y(x) = 2e^x - 2x - 2$$
接下来,我们可以使用 Matlab 的 `ode45` 函数求解其数值解。代码如下:
```matlab
ode = @(x,y) 2*x + y;
[t,yNum] = ode45(ode,[0 1],1);
```
其中,`ode` 表示微分方程,`[0 1]` 表示求解区间为 $[0,1]$,`1` 表示初始条件 $y(0)=1$。运行代码后,我们可以将解析解和数值解绘制在同一张图上进行比较。代码如下:
```matlab
plot(t,yNum,'.-',0:0.1:1,ySol(0:0.1:1),'-')
legend('数值解','解析解')
```
运行代码后,我们可以得到比较结果的图像。从图中可以看出,数值解和解析解非常接近,验证了求解的正确性。
完整代码如下:
```matlab
syms x y(x)
ode = diff(y) == 2*x + y;
cond = y(0) == 1;
ySol(x) = dsolve(ode,cond);
ySol = simplify(ySol)
ode = @(x,y) 2*x + y;
[t,yNum] = ode45(ode,[0 1],1);
plot(t,yNum,'.-',0:0.1:1,ySol(0:0.1:1),'-')
legend('数值解','解析解')
```
阅读全文