已知微分方程dy/dt=-y+t+1,y(0)=1。求该方程的解析解和数值解,并将解析解与数值解作图进行比较的MATLAB语句
时间: 2024-03-18 12:45:31 浏览: 176
解析解:
首先求解该微分方程的齐次方程dy/dt=-y,其通解为y=C1*exp(-t)。
接着求解非齐次方程对应的特解,设特解为y=At+B,代入原方程得到A=-1,B=2,因此特解为y=-t+2。
于是原微分方程的通解为y=C1*exp(-t)-t+2。
代入初始条件y(0)=1,得到C1=1,因此解析解为y=exp(-t)-t+2。
数值解:
采用四阶龙格-库塔方法进行数值求解。
MATLAB代码如下:
```
% 定义微分方程
f = @(t, y) -y + t + 1;
% 定义初始条件
y0 = 1;
t0 = 0;
% 定义步长和终止时间
h = 0.1;
tf = 2;
% 计算步数
N = floor((tf - t0) / h);
% 初始化
t = zeros(N+1, 1);
y = zeros(N+1, 1);
% 赋初值
t(1) = t0;
y(1) = y0;
% 迭代计算
for i = 1:N
% 计算k1,k2,k3,k4
k1 = h * f(t(i), y(i));
k2 = h * f(t(i)+h/2, y(i)+k1/2);
k3 = h * f(t(i)+h/2, y(i)+k2/2);
k4 = h * f(t(i)+h, y(i)+k3);
% 计算y(i+1)
y(i+1) = y(i) + 1/6 * (k1 + 2*k2 + 2*k3 + k4);
% 计算t(i+1)
t(i+1) = t(i) + h;
end
% 画图比较
t_analytic = linspace(t0, tf, 100);
y_analytic = exp(-t_analytic) - t_analytic + 2;
plot(t, y, 'bo-', t_analytic, y_analytic, 'r-');
legend('数值解', '解析解');
xlabel('t');
ylabel('y');
```
运行后得到的图像如下所示,蓝色为数值解,红色为解析解。
![image.png](https://cdn.nlark.com/yuque/0/2021/png/285031/1631930612091-0f84c2d4-2f1b-4a0c-8c5a-6f2c72a0da8b.png)
阅读全文