2016-06-11 2 views
-1

это испытание для дифференциального уравнения с помощью Рунге-kutta45: Р (х, у) = (-5 * х - у/5)^1/8 + 10Почему числовой результат отличается (RK45)?

enter image description here

почему численное результат другой? Я использовал:

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 
+2

Знаете ли вы, насколько допускается толерантность в обоих случаях? – Jagte

+2

перекрестная ссылка на https://groups.google.com/forum/#!topic/julia-users/tNbuR8xOGXo. –

+0

Фактически, существует связь с допуском между методами. –

ответ

1

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

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

Смежные вопросы