如果有人能夠幫助解決以下問題,我將不勝感激。 我有以下ODE:與分析解決方案相比,ODE45和Runge-Kutta方法的絕對誤差
dr/dt = 4*exp(0.8*t) - 0.5*r ,r(0)=2, t[0,1] (1)
我在兩種不同的方式解決(1)。 通過Runge-Kutta方法(4階),並通過ode45
在Matlab中。我比較與分析解決方案,它由下式給出了兩個結果:
r(t) = 4/1.3 (exp(0.8*t) - exp(-0.5*t)) + 2*exp(-0.5*t)
當我對於繪製每種方法的絕對誤差的精確解,我得到如下:
對於RK - 方法,我的代碼是:
h=1/50;
x = 0:h:1;
y = zeros(1,length(x));
y(1) = 2;
F_xy = @(t,r) 4.*exp(0.8*t) - 0.5*r;
for i=1:(length(x)-1)
k_1 = F_xy(x(i),y(i));
k_2 = F_xy(x(i)+0.5*h,y(i)+0.5*h*k_1);
k_3 = F_xy((x(i)+0.5*h),(y(i)+0.5*h*k_2));
k_4 = F_xy((x(i)+h),(y(i)+k_3*h));
y(i+1) = y(i) + (1/6)*(k_1+2*k_2+2*k_3+k_4)*h; % main equation
end
而對於ode45
:
tspan = 0:1/50:1;
x0 = 2;
f = @(t,r) 4.*exp(0.8*t) - 0.5*r;
[tid, y_ode45] = ode45(f,tspan,x0);
我的問題是,爲什麼我有振盪,當我使用ode45
? (我指的是絕對錯誤)。兩種解決方案都是準確的(1e-9
),但在這種情況下ode45
會發生什麼?
當我計算RK方法的絕對誤差時,它爲什麼看起來更好?
嗨@horchler。遺憾的是,我不能給你答案一分。在這個時刻,我不確定我所處的環境是什麼:你的編程技巧或數學理解。 –
我不知道從** ode45 **實際步驟從哪裏點下面。如果是這種情況,我100%同意你的觀點,**代表**更準確。你可以採取'tic toc'這兩種方法嗎?我經歷過** RK-方法**使用0.018秒,而** ode45 **使用0.5秒。我能否得出結論:** ode45 **更精確但速度更慢?而且,我相信** ode45 **的自適應步長控制器**非常好(?) –
我還沒有試圖擴大積分間隔,但我對輸出非常好奇。與此同時,它讓我對你的評論感興趣,我可以期待如何取得良好的效果,而不僅僅是** ode45 **和** odeset **。我會盡我所能地嘗試這個兒子!感謝分享! –