2015-10-09 84 views
1

如何求解下面的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)的值。常微分方程Matlab並用Heun方法找到一個值

這是我曾嘗試下面

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

我會改變成的形式$克一階微分方程的系統」 = F(T ,然後用Huen的方法解決這個問題。 用MATLAB解二階常微分方程有幾個答案。 – Steve

+0

這是Heun的方法,像Hoin一樣講話。中點方法的顯式變體。 – LutzL

+0

@LutzL維基百科把它作爲改進的歐拉方法,而不是明確的中點。 – Steve

回答

3

龍格 - 庫塔法,像HEUN方法是其中之一,用於一階微分方程或系統中定義。由於您的方程是二階的,首要的任務是把它改造成一階系統: 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 

然後,可以在固定步長的迭代執行威享方法

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