-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 回答