我正在 Matlab 中试验 ode45。我已经学会了如何将参数传递给 ode 函数,但我仍然有一个问题。假设我想计算汽车的轨迹(速度曲线)并且我有一个函数,例如getAcceleration
,这给了我汽车的加速度以及正确的档位:[acceleration, gear] = getAcceleration(speed,modelStructure)
where modelStructure
代表汽车的型号。
颂函数为:
function [dy] = car(t,y,modelStructure)
dy = zeros(2,1);
dy(1) = y(2);
[dy(2),gear] = getAcceleration(y(1),modelStructure);
然后我这样调用Ode45积分器:
tInit = 0;
tEnd = 5,
[t,y] = ode45(@car,[tInit tEnd], [speedInitial,accelerationInitial],options,modelStructure);
问题是:如何获得矢量存储齿轮?我应该有类似的东西吗[t,y,gear]=ode45(....)
或者应该gear
位于y
vector?
我一直在编写代码并使用事件函数,现在我可以获取汽车“齿轮”的变化(作为事件)。
现在我有一个与相同代码相关的新问题。
想象一下,当我评估 de 'dy' 向量时,我能够获得进一步的 Z 值,这让我能够大幅加快调用加速度计算 (getAcceleration) 的速度:
function [dy] = car(t,y,modelStructure)
dy = zeros(2,1);
dy(1) = y(2);
[dy(2),Z(t)] = getAcceleration(y(1),modelStructure,Z(t-1));
并假设我也能够计算初始条件下的 Z 。问题是我无法计算 Z 导数。
有没有办法在不积分的情况下传递Z值抛出步进?
多谢你们。