我正在 Matlab 中试验 ode45。我已经学会了如何将参数传递给 ode 函数,但我仍然有一个问题。假设我想计算汽车的轨迹(速度曲线),并且我有一个函数,例如getAcceleration
,它可以为我提供汽车的加速度以及正确的档位:[acceleration, gear] = getAcceleration(speed,modelStructure)
其中modelStructure
代表汽车的型号。
ode 函数将是:
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
向量内?
我一直在处理我的代码并使用事件函数,我现在能够获得汽车“齿轮”的变化(作为事件)。现在我有一个与相同代码相关的新问题。想象一下,当我评估 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 值抛出步进而不集成它?
多谢你们。