Я пытаюсь использовать ode45
в MAtlab и хочу исправить количество точек, которые использует MAtlab (количество временных шагов). Использование опции 'refine'
в ode45
похоже не помогает. Например, если я установил 'refine'
равным 10, Matlab вернет массив из 101. Изменение 'RelTol'
и 'AbsTol'
также не помогает. Я знаю, что можно написать tspan
как [0,t1,t2,t3,...,tn]
, и это решает проблему, но я хотел бы исправить количество точек с помощью опции 'refine'
.
используя опцию Refine в ode45 Matlab
Ответы (1)
Возможно, вы неправильно понимаете, что на самом деле делает опция 'Refine'
. Из документации для odeset
:
Refine — Если Refine равно 1, решатель возвращает решения только в конце каждого временного шага. Если Refine равно n > 1, решатель подразделяет каждый временной шаг на n меньших интервалов и возвращает решения в каждый момент времени. Уточнение не применяется, когда длина(tspan)>2 или решатель ODE возвращает решение в виде структуры.
Другими словами, установка 'Refine'
на 10 не гарантирует, что вы получите 10 выходных точек, а скорее получите 10 выходных точек за каждый временной шаг интегрирования. В случае метода адаптивного размера шага, такого как ode45
, решатель выбирает размер шагов на основе многих критериев. Если вам нужно определенное количество точек вывода, вы должны указать фиксированные временные шаги, как вы уже сделали с помощью tspan
. Вам может быть полезна функция linspace
.
Другая возможность заключается в том, что вы на самом деле не применяете свои варианты. Простого вызова odeset
недостаточно. Вы также должны не забыть передать вывод в ode45
.
'Refine'
? Если этот ответ был полезен для вас, пожалуйста, примите его. Спасибо.
- person horchler; 07.02.2014
ode45
. - person horchler   schedule 03.01.2014