используя опцию Refine в ode45 Matlab

Я пытаюсь использовать ode45 в MAtlab и хочу исправить количество точек, которые использует MAtlab (количество временных шагов). Использование опции 'refine' в ode45 похоже не помогает. Например, если я установил 'refine' равным 10, Matlab вернет массив из 101. Изменение 'RelTol' и 'AbsTol' также не помогает. Я знаю, что можно написать tspan как [0,t1,t2,t3,...,tn], и это решает проблему, но я хотел бы исправить количество точек с помощью опции 'refine'.


person Amin R.    schedule 03.01.2014    source источник
comment
Предоставьте код, показывающий, как вы устанавливаете параметры и вызываете ode45.   -  person horchler    schedule 03.01.2014
comment
Код @horchler: options = odeset('RelTol',1e-3,'AbsTol',1e-3,'Refine',1); [T,Y] = ode45(@prop,[0,delT/2,delT],присутствует,опции);   -  person Amin R.    schedule 03.01.2014


Ответы (1)


Возможно, вы неправильно понимаете, что на самом деле делает опция 'Refine'. Из документации для odeset:

Refine — Если Refine равно 1, решатель возвращает решения только в конце каждого временного шага. Если Refine равно n > 1, решатель подразделяет каждый временной шаг на n меньших интервалов и возвращает решения в каждый момент времени. Уточнение не применяется, когда длина(tspan)>2 или решатель ODE возвращает решение в виде структуры.

Другими словами, установка 'Refine' на 10 не гарантирует, что вы получите 10 выходных точек, а скорее получите 10 выходных точек за каждый временной шаг интегрирования. В случае метода адаптивного размера шага, такого как ode45, решатель выбирает размер шагов на основе многих критериев. Если вам нужно определенное количество точек вывода, вы должны указать фиксированные временные шаги, как вы уже сделали с помощью tspan. Вам может быть полезна функция linspace.

Другая возможность заключается в том, что вы на самом деле не применяете свои варианты. Простого вызова odeset недостаточно. Вы также должны не забыть передать вывод в ode45.

person horchler    schedule 03.01.2014
comment
@AminR.: Я ответил на твой вопрос? Ясно ли вам использование 'Refine'? Если этот ответ был полезен для вас, пожалуйста, примите его. Спасибо. - person horchler; 07.02.2014