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

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

推荐一篇个人觉得不错的卡尔曼滤波原理详解卡尔曼滤波原理详解及系统模型建立(simulink)_卡尔曼滤波 simulink-CSDN博客

  • 数学过程推导

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

  •  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 )

求系统的状态转移矩阵\Phi \left ( t \right ) =e^A^T=L^-^1\begin{bmatrix} S & -1\\ 0& s+1 \end{bmatrix}=\begin{bmatrix} 1 & 1/2\ \left ( 1-e^-^2^t \right )\\ 0& e^-^2^t \end{bmatrix},式中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

运行结果如下

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

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值