【问题标题】:why the numerical result is different (RK45)?为什么数值结果不同(RK45)?
【发布时间】:2016-06-11 02:22:47
【问题描述】:

这是使用 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

【问题讨论】:

  • 你知道在这两种情况下假设的公差有多大吗?
  • 其实方法之间的容差是有关系的。
  • 您知道(yyy)^1/8(yyy)/8 相同,而不是可能想要的(yyy)^0.125(yyy)^(1.0/8)?

标签: matlab julia differential-equations runge-kutta


【解决方案1】:

这些程序的默认设置略有不同,例如默认公差和步进/拒绝行为。因此,您不应期望它们“完全相同”。

此外,ODE.jl 不使用步长稳定化(任何优化的库,如 DifferentialEquations.jlODEInterface.jl 或 MATLAB 的库都使用),所以我希望它有更糟糕的步长选择(根据根据海尔的书,仅从步进行为来看,效率降低了大约 2 到 4 倍)。因此,即使您使用相同的容差,ODE.jl 也会产生不同的结果,因为它没有使用标准优化算法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-24
    • 2012-01-10
    • 2015-09-14
    • 1970-01-01
    • 2010-10-29
    • 2012-07-28
    相关资源
    最近更新 更多