Scilab中普通传递函数与syslin命令生成的传递函数的区别
Scilab 中直接构造的传递函数 G1 与
syslin 输出 sys 的核心差异 你观测到二者表现一致是因为Scilab对有理多项式类型做了方法重载,大部分基础线性系统分析函数同时兼容两种输入,但二者存在本质区别:
- 底层数据类型和携带信息不同
直接通过s域多项式相除得到的G1属于rational(有理多项式)类型,本质仅存储分子、分母两个多项式的系数,不携带任何动态系统专属的元信息。而通过syslin('c', G1)输出的sys是Scilab专门定义的线性系统tlist类型,除传递函数的分子分母外,还额外存储:- 系统域标记:明确标注是连续系统(
'c')还是离散系统('d') - 离散系统专属的采样时间参数
- 系统输入、输出的维度标识
你可以用typeof(G1)和typeof(sys)命令直接查看二者的类型差异。
- 系统域标记:明确标注是连续系统(
- 专用系统函数的兼容性不同
基础操作比如绘制幅频特性、计算阶跃响应时,Scilab会默认把无属性的有理多项式当做连续系统处理,所以看不出差异。但在需要明确区分连续/离散属性的场景下,差异会直接显现:比如做连续系统离散化操作时,直接给
c2d()函数传入G1,函数需要额外做类型判断甚至可能报错;传入已经标记好域属性的sys,函数可以直接读取内置属性,运算逻辑更稳定,结果一致性更高。
处理多输入多输出(MIMO)系统时,syslin输出的系统类型会自动维护输入输出通道的对应关系,直接用有理多项式拼接的MIMO结构很容易出现维度匹配错误。 - 系统互联运算的逻辑不同
对sys类型做串联、并联、反馈这类系统互联操作时,Scilab会自动执行最小实现、零极点对消的优化,同时校验互联的输入输出维度合法性。直接用有理多项式做运算只会执行普通的分式加减乘除,不会做系统层面的合法性校验和优化,高阶系统场景下很容易出现数值冗余、运算精度下降的问题。
内容的提问来源于stack exchange,提问作者Mathpdegeek497
相关产品推荐
相关产品推荐

