Я пытаюсь использовать ode15i для решения неявного уравнения, которое использует время, сгенерированное ode15i.Например, вот так:
options = odeset('RelTol',1e-4,'Stats','on','OutputFcn',@odeplot);
sol = ode15i(@ode15ifun,[0 t_end],wA0,wA0_dot,options);
И я хотел бы вызвать функцию с именем calc_length в ode15ifun, которая вычисляет переменную длину, используя время, сгенерированное ode15i.
function L = calc_length(t,w,type) % t is generated by ode15i
Проблема в том, что я использую термин t(n) - t(n-1)
, который должен быть положительным.t (n) - время для n-го цикла и t (n-1) для (n-1) -го, оба сгенерированные ode15i.Я сохранил t как глобальную переменную, поэтому теперь я понял, что t в ode15i не увеличивается непрерывно.Например, сначала это может быть 0, затем внезапно перейти к 20, а затем вернуться к 5. Я думаю, что решатель просто сначала попытается сделать больший шаг, чтобы сэкономить время вычисления.Когда допуск нарушается, он возвращается к меньшему шагу.
Первый вопрос: что я могу сделать, чтобы время, генерируемое ode15i, всегда увеличивалось, не возвращалось к меньшему значению.
Второе: есть также много одинаковых значений времени, генерируемых непрерывно с помощью ode15i.Например, t в рабочей области: 0 0 0 20 20 5 5 5 ... Как я могу избежать этой проблемы?Или это (время, сгенерированное ode) вообще не должно использоваться.
Спасибо за любой совет !!!