You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于Matlab中lsim函数连续与离散传递函数计算不一致的咨询

关于Matlab lsim函数连续模型仿真逻辑的疑问

我对Matlab的lsim函数处理逻辑有疑问。已知向Matlab输入连续时间传递函数、采样输入信号和时间向量时,通常会采用零阶保持(ZOH)或一阶保持(FOH)对传递函数离散化。但直接用lsim计算连续模型输出y_cont,和将模型通过ZOH、FOH离散后再用lsim得到的y_zoh、y_foh对比,结果均不匹配。测试代码如下:

Ts=0.1; %sampling time
t=0:Ts:10; %time vector
u=cos(t); %input signal

G=tf(1,[1 1]); %Continuous-time model
y_cont=lsim(G,u,t); %Output of the continuous-time model

Gzoh=c2d(G,Ts,'zoh');%ZOH discretization
y_zoh=lsim(Gzoh,u);

Gfoh=c2d(G,Ts,'foh');%FOH discretization
y_foh=lsim(Gfoh,u,t);

问题:输入为余弦信号时,按理说Matlab应采用FOH,为何y_cont与y_foh的计算逻辑存在差异?


核心原因解析

  • 连续模型lsim的本质是数值积分
    直接对连续模型调用lsim(G,u,t)时,Matlab不会先离散化系统,而是直接调用ODE数值求解器对连续时间微分方程进行求解。它会基于输入的采样点,在整个时间区间内更精细地计算系统响应,完全贴合连续输入信号的真实变化,而非依赖ZOH/FOH的离散化假设。

  • FOH离散化是近似假设
    c2d(G,Ts,'foh')的一阶保持逻辑是:假设两个采样点之间的输入信号是线性插值的。但你的输入u=cos(t)是连续的非线性余弦曲线,FOH的线性近似只是对真实输入的简化模拟,和连续仿真中使用的、更接近真实曲线的输入重构方式存在本质差异,因此仿真结果必然不匹配。

  • 调用参数的细节影响
    注意y_zoh=lsim(Gzoh,u);未传入时间向量t,而y_cont和y_foh传入了t。虽然此处影响有限,但离散模型的lsim若不指定t,会默认使用与输入u长度一致的采样序列,但本质上仍是离散点的迭代计算,和连续模型的积分求解逻辑完全不同。

总结:连续模型的lsim是直接求解连续系统微分方程,离散化后的仿真是基于保持器假设的离散系统迭代,两者底层逻辑完全不同——FOH只是离散化的一种近似方法,并非连续仿真的等价实现,因此结果会有差异。


内容的提问来源于stack exchange,提问作者Jean-Fr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 22:12:43