Почему численный результат отличается (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 будет давать разные результаты, поскольку он не использует стандартный оптимизированный алгоритм.