matlab 连续系统状态空间表达式的离散化&状态转移矩阵求解

最近在学习卡尔曼滤波需要在matlab/simulink系统中将连续系统进行离散化

推荐一篇个人觉得不错的卡尔曼滤波原理详解https://blog.csdn.net/weixin_43942325/article/details/103416681

  • 数学过程推导

具'j体的数i学推导过程a就不做详绍了,在现代控制理论教材中都有,这儿贴两张图片

matlab 连续系统状态空间表达式的离散化&状态转移矩阵求解_第1张图片

matlab 连续系统状态空间表达式的离散化&状态转移矩阵求解_第2张图片

  •  matlab 程序编写

根据上面公式推导,假设存在系统\dot{x}=Ax+Bu,其中A = \begin{pmatrix} 0 & 1\\ 0&-2 \end{pmatrix},B=\begin{bmatrix} 0\\ -2 \end{bmatrix}

其离散系统表达式为x\left ( k+1 \right )=Gx\left ( k \right )+Hu\left ( k \right )

求系统的状态转移矩阵,式中L^-^1为拉氏反变换

matlab求解过程为

A = [0 1;0 -2];
B1 = [0 ;1];
syms s t Ls;   % 求状态转移矩阵 利用拉氏变换,syms为符号函数用来定义数学函数
    I = eye(size(A));
    Ls = inv(s*I - A);
    STM = ilaplace(Ls,s,t) %状态转移矩阵,ilaplace为拉氏反变换函数
    

 同理可以求H

syms s t Ls;   % 求状态转移矩阵 利用拉氏变换
    I = eye(size(A));
    Ls = inv(s*I - A);% collect 函数为合并同类项
    STM = ilaplace(Ls,s,t) %状态转移矩阵
    
syms T
    HLs = int(STM,t,0,T);
    H = HLs*B1

运行结果如下

matlab 连续系统状态空间表达式的离散化&状态转移矩阵求解_第3张图片

在simulink仿真过程中,我们需要G和H为已知的矩阵,当T固定时就可以求出G和H的具体数值了,这是需要用到符号函数求解函数subs,设步长T为0.001;matlab命令为

dt = 0.001;
A = [0 1;0 -2];
B1 = [0 ;1];
syms s t Ls;   % 求状态转移矩阵 利用拉氏变换
    I = eye(size(A));
    Ls = inv(s*I - A);% collect 函数为合并同类项
    STM = ilaplace(Ls,s,t); %状态转移矩阵
    G = double(subs(STM,t,dt)) % 符号函数求解
syms T
    HLs = int(STM,t,0,T);
    H = HLs*B1;
    H = real(double(subs(H,T,dt))) % 符号函数求解

结果如下:

matlab 连续系统状态空间表达式的离散化&状态转移矩阵求解_第4张图片

到这matlab部分就完成了剩下的就是在simulink中的具体仿真了,这个有需要再写吧,贴下自己做的一个简单仿真和连续系统同时进行的以便对数据对比,结果是连续系统和离散系统仿真数据是一样的。

matlab 连续系统状态空间表达式的离散化&状态转移矩阵求解_第5张图片

matlab 连续系统状态空间表达式的离散化&状态转移矩阵求解_第6张图片

你可能感兴趣的:(控制学习,matlab,算法,傅立叶分析,矩阵)