-1

これは、runge-kutta45 を使用した方程式微分のテストです: f(x,y)= (-5*x - y/5)^1/8 + 10

ここに画像の説明を入力

数値結果が異なるのはなぜですか?私が使用した:

function Rk_JL()
 f(x,y)= (-5*x - y/5)^1/8 + 10
 tspan = 0:0.001:n
 y0 = [0.0, 1.0]
 return ODE.ode45(f, y0,tspan);
end

function [X1,Y1] = RK_M()
 f = @(x,y) (-5*x - y/5)^1/8 + 10;
 tspan = 0:0.001:n;
 y0 = 1
 [X1,Y1]= ode45(f,tspan,1);
end
4

1 に答える 1

1

プログラムには、デフォルトの許容範囲やステッピング/拒否動作など、わずかに異なるデフォルト設定があります。そのため、それらが「まったく」同じであると期待するべきではありません。

これに加えて、ODE.jl はステップサイズの安定化 ( DifferentialEquations.jlODEInterface.jl、または MATLAB のライブラリのような最適化されたライブラリが使用するもの) を使用しないため、非常に悪いステップサイズの選択があると予想されます (Hairer の本によると、ステッピング動作だけで効率が約 2 倍から 4 倍低下します)。したがって、同じ許容誤差を使用しても、標準の最適化アルゴリズムを使用していないため、ODE.jl は異なる結果を生成します。

于 2016-08-10T07:06:13.677 に答える