MATLAB-微分方程or传递函数转换成状态空间表达式

需要用到的函数:
ss函数:在已知各矩阵的情况下直接建立系统的状态空间模型。
参数A,B,C,D分别为系统矩阵,输入矩阵(或控制矩阵),输出矩阵,直接传递矩阵。
详见系统的数学模型-(状态空间表达式的建模)

>> g=ss(A,B,C,D);

tf2ss函数:用于从系统的传递函数建立系统的状态空间模型。
参数num,den分别为系统传递函数的分母多项式系数和分子多项式系数。
未知参数A,B,C,D分别为系统矩阵,输入矩阵(或控制矩阵),输出矩阵,直接传递矩阵。
tf2ss是Transfer Function To State-Space representation的简写

>> [A,B,C,D]=tf2ss(num,den);

zp2ss函数:用于已知系统零极点的情况下,建立系统的状态空间表达式。
参数Z,P,Gain分别为系统的零点,极点,增益。
未知参数A,B,C,D分别为系统矩阵,输入矩阵(或控制矩阵),输出矩阵,直接传递矩阵。
zp2ss是Zero Pole To State-Space representation的简写

>> [A,B,C,D]=zp2ss(Z,P,Gain);

例1:把系统的微分方程 d 2 y d t 2 + 0.4 d y d t + y = 2 d u d t + 3 u \frac{d^2y}{dt^2}+0.4\frac{dy}{dt}+y=2\frac{du}{dt}+3u dt2d2y+0.4dtdy+y=2dtdu+3u写成状态空间表达式。
解:经过拉普拉斯变换, s 2 y ( s ) + 0.4 s y ( s ) + 1 y ( s ) = 2 s u ( s ) + 3 u ( s ) s^2y(s)+0.4sy(s)+1y(s)=2su(s)+3u(s) s2y(s)+0.4sy(s)+1y(s)=2su(s)+3u(s)
得传递函数为, G ( s ) = y ( s ) u ( s ) = 2 s + 3 s 2 + 0.4 s + 1 G(s)=\frac{y(s)}{u(s)}=\frac{2s+3}{s^2+0.4s+1} G(s)=u(s)y(s)=s2+0.4s+12s+3

>> num=[2 3];
>> den=[1 0.4 1];
>> [A,B,C,D]=tf2ss(num,den)

A =

   -0.4000   -1.0000
    1.0000         0


B =

     1
     0


C =

     2     3


D =

     0

例2:将系统传递函数 G ( s ) = ( s + 2 ) ( s + 3 ) ( s + 1 ) ( s + 4 ) ( s + 7 ) G(s)=\frac{(s+2)(s+3)}{(s+1)(s+4)(s+7)} G(s)=(s+1)(s+4)(s+7)(s+2)(s+3)写成状态空间表达式。

>> Gain=1;
>> Z=[2;3];
>> P=[1;4;7];
>> [A,B,C,D]=zp2ss(Z,P,Gain)

A =

     7     0     0
     1     5    -2
     0     2     0


B =

     1
     0
     0


C =

     1     0     1


D =

     0
  • 29
    点赞
  • 151
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
首先,将微分方程转换为矩阵形式,即状态空间模型。假设我们有一个一阶线性微分方程: $$\frac{dy}{dt} = a(t)y + b(t)u$$ 其中 $y$ 是状态变量,$u$ 是输入变量,$a(t)$ 和 $b(t)$ 是已知函数。将其转换为矩阵形式: $$\begin{bmatrix}\frac{dy}{dt}\end{bmatrix} = \begin{bmatrix}a(t)\end{bmatrix}\begin{bmatrix}y\end{bmatrix} + \begin{bmatrix}b(t)\end{bmatrix}\begin{bmatrix}u\end{bmatrix}$$ 我们可以定义状态向量 $\mathbf{x}$,使得 $y=x_1$,则: $$\begin{bmatrix}\frac{dx_1}{dt}\end{bmatrix} = \begin{bmatrix}a(t)\end{bmatrix}\begin{bmatrix}x_1\end{bmatrix} + \begin{bmatrix}b(t)\end{bmatrix}\begin{bmatrix}u\end{bmatrix}$$ 可以写成如下形式: $$\begin{bmatrix}\frac{dx_1}{dt}\end{bmatrix} = \begin{bmatrix}a(t)\end{bmatrix}\begin{bmatrix}x_1\end{bmatrix} + \begin{bmatrix}b(t)\end{bmatrix}\begin{bmatrix}u\end{bmatrix} + \begin{bmatrix}0\end{bmatrix}\begin{bmatrix}x_2\end{bmatrix} + \cdots + \begin{bmatrix}0\end{bmatrix}\begin{bmatrix}x_n\end{bmatrix}$$ 其中 $\mathbf{x}=[x_1,x_2,\cdots,x_n]^T$,$n$ 是状态变量的数目,且所有的状态初始值都为零。因此,我们可以得到状态空间表达式: $$\begin{bmatrix}\frac{dx_1}{dt}\\\frac{dx_2}{dt}\\\vdots\\\frac{dx_n}{dt}\end{bmatrix} = \begin{bmatrix}a_{11}(t) & a_{12}(t) & \cdots & a_{1n}(t) \\ a_{21}(t) & a_{22}(t) & \cdots & a_{2n}(t) \\ \vdots & \vdots & \ddots & \vdots \\ a_{n1}(t) & a_{n2}(t) & \cdots & a_{nn}(t)\end{bmatrix}\begin{bmatrix}x_1\\x_2\\\vdots\\x_n\end{bmatrix} + \begin{bmatrix}b_1(t) \\ b_2(t) \\ \vdots \\ b_n(t)\end{bmatrix}u(t)$$ 其中矩阵 $\mathbf{A}$ 和向量 $\mathbf{b}$ 是已知的函数。 接下来,我们可以用 MATLAB 求解状态空间表达式。假设 $a(t)=t$,$b(t)=1$,则我们的微分方程为: $$\frac{dy}{dt} = ty + u$$ 将其转换为状态空间表达式: $$\begin{bmatrix}\frac{dx_1}{dt}\\\frac{dx_2}{dt}\end{bmatrix} = \begin{bmatrix}0 & 1 \\ t & 0\end{bmatrix}\begin{bmatrix}x_1\\x_2\end{bmatrix} + \begin{bmatrix}1 \\ 0\end{bmatrix}u(t)$$ 在 MATLAB 中,我们可以使用 `ss` 函数来创建状态空间模型: ```matlab % 定义系统矩阵 A 和输入矩阵 B A = [0 1; t 0]; B = [1; 0]; % 创建状态空间模型 sys = ss(A, B, [], []); % 显示状态空间模型 sys ``` 输出结果为: ``` sys = A = x2 x1 x1 0 1 x2 t 0 B = u1 x1 1 x2 0 C = x2 x1 D = u1 ``` 这就是微分方程状态空间表达式。其中,矩阵 $\mathbf{A}$ 和向量 $\mathbf{b}$ 对应于 `sys.A` 和 `sys.B`,状态向量 $\mathbf{x}$ 对应于 `sys.StateName`,而输入向量 $\mathbf{u}$ 对应于 `sys.InputName`。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Blablabla...

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值