在MATLAB仿真运行时,如何在特定的时间步存储变量值?

在MATLAB仿真运行时,如何在特定的时间步存储变量值?,matlab,vector,ode,Matlab,Vector,Ode,我正在使用ode15s(…)MATLAB解算器模拟动态系统: tspan = 0:0.01:8; [t,theta] = ode15s(@ode_simulation, tspan, theta) 在ode\u simulation(..)函数中,我正在计算一个信号u,它执行精确的工作。此函数的某些行如下所示: function d_theta = ode_simulation(t,theta) ... ... u = (K*g*s_q)/e; d_

我正在使用
ode15s(…)
MATLAB解算器模拟动态系统:

tspan = 0:0.01:8;
[t,theta] = ode15s(@ode_simulation, tspan, theta)
ode\u simulation(..)
函数中,我正在计算一个信号
u
,它执行精确的工作。此函数的某些行如下所示:

function d_theta = ode_simulation(t,theta)
    
    ...
    ...
    u = (K*g*s_q)/e;

    d_theta = [theta(2) ; ... ];

end
代码执行得很好,但我想获得变量
u
tspan
定义的特定时刻的值。因此,模拟返回
theta
解的
801x4
矩阵,我还需要一个
801x1
向量,其中包含相应的
u
值。我尝试在模拟运行时存储它们,但很明显,ODE解算器在其所有步骤中获得的所有值都被存储,从而导致更大的向量。如何存储和绘制
u
变量在
tspan
定义的特定时间步的值?以下是我的代码的链接:

函数h=均匀滞后量化器(u,last,D)
如果(u>=last+D)
h=最后一次+D;

埃尔塞夫(u从
ode15s
得到一个向量
t
theta
,这是
ode\u模拟的输入。难道你不能在解算器完成工作后,使用
ode15s
的输出作为
ode\u模拟的输入来进行计算吗?我尝试了,得到了错误:
无效表达式n、 检查是否有多余或缺少的字符。
。你能说明你做了什么以及如何做吗?错误意味着我编辑OP的某个地方有输入错误或无效的语法。在
ode15s(…)
完成后,我在
k=1:numel(t)
循环中执行
[~,u(k)]=ode模拟(t(k),theta(k,:)
function h = uniform_hysteretic_quantizer(u,last,D)    
    if (u >= last + D)
        h = last + D;
    elseif (u <= last - D)
        h = last - D;
    else
        h = last;
    end
end