我正在尝试使用ode15i求解隐式方程,该方程使用ode15i生成的时间。例如这样的
options = odeset('RelTol',1e-4,'Stats','on','OutputFcn',@odeplot);
sol = ode15i(@ode15ifun,[0 t_end],wA0,wA0_dot,options);
我想在ode15ifun中调用一个名为calc_length的函数,该函数使用ode15i生成的时间来计算可变长度。
function L = calc_length(t,w,type) % t is generated by ode15i
问题是我使用的术语t(n) - t(n-1)
必须为正。 t(n)是ode15i生成的第n个循环的时间,第n-1个循环的t(n-1)。我将t保存为全局变量,因此我现在意识到ode15i中的t不会连续增加。例如,它可以先是0,然后突然跳到20,然后再返回5。我认为求解器首先只是尝试做一个更大的步骤,这样可以节省计算时间。当公差被打破时,它又回到了较小的一步。
第一个问题:我应该怎么做才能使ode15i生成的时间始终增加,而不会回到较小的值。
第二个:ode15i连续产生许多相同的时间值。例如,工作空间中的t:0 0 0 20 20 5 5 5 ...我如何避免这个问题? 或根本不使用它(由ode生成的时间)。
感谢您的任何建议!