如何解决以下ODE:f''+ t * f'+ 3 * f = sin(3 * t) 在t = 0,f = 2和df / dt = 1的初始条件下,使用(Dt)= 0.1间距绘制从t = 0到5的解。还使用Heun方法求解值f(5)。
以下是我在下面尝试的内容
time=(0:0.01:5);
Sol=[0];
f=[2];
df=[1];
for(mm=1:length(time)-1);
f(mm+1)=df(mm)*.01+f(mm);
df(mm+1)=(f(mm+1)-f(mm))/0.01;
end
ww=(1);
for(kk=0:0.01:5-0.02);
V=(f(ww+2)-2*f(ww+1)+f(ww))/(0.01)^2+kk*((f(ww+2)-f(ww+1))/0.01)+f(ww+1);
Sol=[Sol V];
ww=ww+1;
end
Sol=[Sol 0];
figure(5)
plot(time,Sol);
答案 0 :(得分:3)
f'' + t*f' + 3*f = sin(3*t)
被转换为
y1(t) = f(t)
,y2(t) = f'(t)
与衍生品
y1'(t) = y2(t)
,y2'(t) = f''(t) = sin(3*t) - t*y2(t) - 3*y1(t)
。
function dy = odefunc(t,y)
dy = [ y(2); sin(3*t) - t*y(2) - 3*y(1) ]
end function
然后,您可以在固定步长为
的迭代中执行Heun方法t0 = 0
tf = 5
y0 = [1; 2]
N=50
Dt = (tf - t0)/N
y = y0
t=t0
Sol = [y0]
time = [t0]
for i = 1:N
k1 = odefunc(t,y)
k2 = odefunc(t+Dt, y+k1*Dt)
y = y + 0.5*Dt*(k1+k2)
t = t + Dt
Sol = [Sol y]
time = [time t]
end