簡體   English   中英

普通微分方程Matlab並使用Heun方法求值

[英]Ordinary differential equations Matlab and finding a value using Heun's method

如何解決以下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);

像Heun的方法一樣,Runge-Kutta方法是為一階微分方程或系統定義的。 由於你的方程是二階的,第一個任務是將它轉換成一階系統: 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM