MATLAB ODE45: сохранение только последнего решения

Я бы хотел, чтобы ODE45 сохранил последнее решение. Скорее возвращая все решения из tspan = [t0 tf]; Я только хочу, чтобы возвращаемый вектор был решением в tf.

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

Ошибка при использовании запрошенного horzcat массива 442368x1828 (6,0 ГБ) превышает максимальный размер массива. Создание массивов, превышающих этот предел, может занять много времени и привести к тому, что MATLAB перестанет отвечать на запросы. Дополнительную информацию см. в разделе «Ограничение размера массива» или «Панель предпочтений».

Ошибка в ode45 (строка 428) yout = [yout, zeros(neq,chunk,dataType)];


person kirikoumath    schedule 10.05.2017    source источник


Ответы (1)


Из документации:

tspan — Интервал вектора интегрирования Интервал интегрирования в виде вектора. Как минимум, tspan должен быть двухэлементным вектором [t0 tf], определяющим начальное и конечное время. Чтобы получить решения в определенные моменты времени между t0 и tf, используйте более длинный вектор формы [t0,t1,t2,...,tf]. Все элементы в tspan должны быть возрастающими или все убывающими.

Решатель накладывает начальные условия y0 на tspan(1), затем интегрирует от tspan(1) до tspan(end):

Если tspan имеет два элемента, [t0 tf], то решатель возвращает решение, оцененное на каждом шаге внутреннего интегрирования в пределах интервала. Если tspan содержит более двух элементов [t0,t1,t2,...,tf], то решатель возвращает решение, оцененное в заданных точках. Это не влияет на внутренние шаги, которые решатель использует для перехода от tspan(1) к tspan(end). Таким образом, решатель не обязательно делает шаг точно к каждой точке, указанной в tspan. Однако решения, полученные в указанных точках, имеют тот же порядок точности, что и решения, вычисляемые на каждом внутреннем шаге. Указание нескольких промежуточных точек мало влияет на эффективность вычислений, но для больших систем может повлиять на управление памятью. Решение, полученное решателем, может отличаться в зависимости от того, задаете ли вы tspan как двухэлементный вектор или как вектор с промежуточными точками. Если tspan содержит несколько промежуточных точек, то они дают представление о масштабе проблемы, что может повлиять на размер начального шага, предпринимаемого решателем.

Так что просто укажите три пункта. [t0 (t0+tf)/2 tf]

person macduff    schedule 10.05.2017