Почему численный результат отличается (RK45)?

Это тест для дифференциального уравнения с использованием 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

1 ответ

Программы имеют слегка отличающиеся настройки по умолчанию, такие как допуски по умолчанию и поведение шагания / отклонения. Таким образом, вы не должны ожидать, что они будут "точно" одинаковыми.

Чтобы добавить к этому, ODE.jl не использует стабилизацию размера шага (которую использует любая оптимизированная библиотека, такая как DifrentialEquations.jl, ODEInterface.jl или библиотека MATLAB), поэтому я ожидаю, что у нее будет гораздо худший выбор размера шага (согласно книге Хайрера). примерно в 2-4 раза менее эффективно только из-за степпинга). Таким образом, даже если вы используете одинаковые допуски, ODE.jl будет давать разные результаты, поскольку он не использует стандартный оптимизированный алгоритм.

Другие вопросы по тегам