Как я вынуждаю ode45 предпринять шаги точно 0.01 на оси T?

Я использую 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);
5
задан Justin Johnson 30 March 2010 в 23:12
поделиться

2 ответа

На основании документации не видно, что вы можете контролировать размер шагов, выполняемых внутри 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 . Решения, полученные в указанных точках, имеют тот же порядок точности, что и решения, вычисленные на каждом внутреннем шаге.

Указание нескольких промежуточных точек мало влияет на эффективность вычислений, но для больших систем может повлиять на управление памятью.

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

12
ответ дан 18 December 2019 в 06:22
поделиться

ode45 неизменно использует адаптивный размер шага, документация решает эту проблему и рекомендует другие решатели вместо фиксированного размера шага - см. ode4 (Рунге-Кутта четвертого порядка), который является довольно безопасным вариантом для решения большинства од - по крайней мере, согласно числовым рецептам

5
ответ дан 18 December 2019 в 06:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: