0

我正在尝试遵循本教程,已实现

function transfer_function = tf(numerator, denominator)
    transfer_function = syslin('c', poly(numerator, "s", "coeff") / poly(denominator, "s", "coeff"));
endfunction

// physical constants:

R = 2.0;                // Ohms
L = 0.5;                // Henrys
Km = 0.1;               // torque constant
Kb = 0.1;               // back emf constant
Kf = 0.2;               // Nms
J = 0.02;               // kg.m^2/s^2

// state-space model:

h1 = tf(Km, [L R]);            // armature
h2 = tf(1, [J Kf]);            // eqn of motion

dcm = tf2ss(h2) * [h1, 1];       // w = h2 * (h1 * Va + Td)

返回

--> dcm
 厘米 =


 dcm(1)(状态空间系统:)

  “lss” “A” “B” “C” “D” “X0” “dt”

 dcm(2)= 一个矩阵 =

  -0.1 0.5
   0. -0.25

 dcm(3)= B 矩阵 =

   0. 2.236068
   0.2236068 0。      

 dcm(4)= C 矩阵 =

   2.236068 0。

 dcm(5)= D 矩阵 =

   0. 0.

 dcm(6)= X0(初始状态)=

   0。
   0。

 dcm(7)= 时域 =

  “C”

这与 MATLAB 产生的不同:

>> 直流

厘米 =
 
  一个=
        x1 x2
   x1 -10 3.2
   x2 0 -4
 
  乙 =
        u1 u2
   x1 0 8
   x2 0.5 0
 
  C =
         x1 x2
   y1 6.25 0
 
  D =
       u1 u2
   y1 0 0
 
连续时间状态空间模型。

现在我的问题是:

  • 我是否tf()正确实现了最小功能,或者有更完整/规范的版本可用/可能?
  • tf2ss()MATLAB 的等价物ss()还是有另一个可用的内置函数?
  • 如果没有ss()可用的等效项,那么提供与上述 MATLAB 教程相同的结果的最小实现是什么?
4

1 回答 1

0

我对该tf()功能的实现存在缺陷。使用

function transfer_function = tf(numerator, denominator)
    transfer_function = syslin('c', poly(numerator($:-1:1), "s", "coeff") / poly(denominator($:-1:1), "s", "coeff"));
endfunction

现在我明白了

--> dcm
 厘米 =


 dcm(1)(状态空间系统:)

  “lss” “A” “B” “C” “D” “X0” “dt”

 dcm(2)= 一个矩阵 =

  -10。3.1622777
   0。-4。       

 dcm(3)= B 矩阵 =

   0. 7.0710678
   0.4472136 0。       

 dcm(4)= C 矩阵 =

   7.0710678 0。

 dcm(5)= D 矩阵 =

   0. 0.

 dcm(6)= X0(初始状态)=

   0。
   0。

 dcm(7)= 时域 =

  “C”

这非常接近,但并不完全正确!

于 2022-02-14T21:41:23.860 回答