编辑
2025-04-23
自动控制
00

目录

方法一:使用 ss 和 tf 函数
方法三:使用自己算
注意点:增大容忍度

在MATLAB中,将状态空间模型转换为传递函数可以通过以下步骤完成:

方法一:使用 sstf 函数

  1. 定义状态空间矩阵:
    matlab
    A = [...]; % 状态矩阵 B = [...]; % 输入矩阵 C = [...]; % 输出矩阵 D = [...]; % 直接传输矩阵
  2. 创建状态空间对象:
    matlab
    sys_ss = ss(A, B, C, D);
  3. 转换为传递函数:
    matlab
    sys_tf = tf(sys_ss);
  4. (可选)约简传递函数(消除共同零极点):
    matlab
    sys_tf = minreal(sys_tf);

方法二:使用 ss2tf 函数

  1. 定义状态空间矩阵(同上)。

  2. 对每个输入计算传递函数(例如,输入1):

    matlab
    [num, den] = ss2tf(A, B, C, D, 1);

    num 是分子系数矩阵,每行对应一个输出的传递函数。

    den 是分母系数向量。

  3. 创建传递函数对象:

    matlab
    sys_tf = tf(num, den);
  4. (可选)约简传递函数:

    matlab
    sys_tf = minreal(sys_tf);

输出说明 • 对于多输入系统,sys_tf 将显示为传递函数矩阵,每个元素对应一个输入到输出的传递函数。

• 使用 minreal 可以消除不可控或不可观模式导致的共同零极点。

方法三:使用自己算

matlab
syms s; G = C*inv(s*eye(4)-A)*B; % 理论传递函数 G = simplify(G); % 符号简化 G

注意点:增大容忍度

要对消就要这样,不然可能得到错误的数值精度的结果:

sys_tf_simplified = minreal(sys_tf, 1e-6); % 增大容忍度
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Dong

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!