Я использую Matlab для решения дифференциального уравнения. Я хочу вынудить ode45 сделать постоянные шаги, таким образом, он всегда увеличивает 0.01 на оси T при решении уравнения. Как я делаю это?
ode45 последовательно делает оптимизированные, случайные шаги, и я, может казаться, не разрабатываю, как заставить его сделать последовательные, небольшие шаги 0,01. Вот код:
options= odeset('Reltol',0.001,'Stats','on');
%figure(1);
%clf;
init=[xo yo zo]';
tspan=[to tf];
%tspan = t0:0.01:tf;
[T,Y]=ode45(name,tspan,init,options);
На основании документации не видно, что вы можете контролировать размер шагов, выполняемых внутри ode45
при решении уравнения, но вы можете контролировать моменты времени, в которые генерируются выходные данные. Вы можете сделать это, как указано в вашей закомментированной строке:
tspan = to:0.01:tf; % Obtain solution at specific times
[T, Y] = ode45(name, tspan, init, options);
Что касается точности решений при использовании фиксированных размеров шага, обратитесь к этому отрывку из приведенной выше ссылки:
If
tspan
имеет более двух элементов[t0, t1, t2, ..., tf]
, то решающая программа возвращает решение, оцененное в заданных точках. Однако решающая программа не переходит точно в каждую точку, указанную вtspan
.Вместо этого решающая программа использует свои собственные внутренние шаги для вычисления решения, а затем оценивает решение в запрошенных точках вtspan
. Решения, полученные в указанных точках, имеют тот же порядок точности, что и решения, вычисленные на каждом внутреннем шаге.Указание нескольких промежуточных точек мало влияет на эффективность вычислений, но для больших систем может повлиять на управление памятью.
Таким образом, даже если вы укажете, что вам нужно решение в определенные моменты времени в выходных данных, решатели все еще внутренне предпринимают ряд адаптивных шагов между указанными вами временными точками, приближаясь к значения в эти фиксированные моменты времени.
ode45
неизменно использует адаптивный размер шага, документация решает эту проблему и рекомендует другие решатели вместо фиксированного размера шага - см. ode4
(Рунге-Кутта четвертого порядка), который является довольно безопасным вариантом для решения большинства од - по крайней мере, согласно числовым рецептам