我是靠谱客的博主 积极星月,最近开发中收集的这篇文章主要介绍matlab求取状态方程的传递函数并实现系统解耦matlab求取状态方程的传递函数并实现系统解耦,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

matlab求取状态方程的传递函数并实现系统解耦

matlab对于求取传递函数有现成的函数可调用,但是要注意单输入和多输入的差别。系统解耦没有响应的函数,需要我们根据系统解耦的原理自行编程。
要解耦,首先需要判断系统是否满足解耦的条件。对于状态方程形式,可以通过判断 c i A u i B ≠ 0 c_iA^{u_i}Bneq0 ciAuiB=0时, u i u_i ui的值。 E i = c i A u B E_i=c_iA^uB Ei=ciAuB
E = [ E 1 E 2 ⋮ ] E=begin{bmatrix} E_1 \ E_2 \ vdots \ end{bmatrix} E=E1E2
若E非奇异,则系统可解耦。
F = [ F 1 F 2 ⋮ ] = [ c 1 A u 1 + 1 c 2 A u 2 + 1 ⋮ ] F=begin{bmatrix} F_1 \ F_2 \ vdots \ end{bmatrix}=begin{bmatrix} c_1A^{u_1+1} \ c_2A^{u_2+1} \ vdots \ end{bmatrix} F=F1F2=c1Au1+1c2Au2+1
K = E − 1 F , L = E − 1 K=E^{-1}F, L=E^{-1} K=E1F,L=E1
得到控制率 U = L v − K x U=Lv-Kx U=LvKx代入原方程得到新的状态方程
x ˙ = ( A − B L F ) x + B L U y = C x dot{x}=(A-BLF)x+BLU\y=Cx x˙=(ABLF)x+BLUy=Cx
最后根据要求再进行相应的极点配置。

matlab程序

以三阶为例
A = [ 0 0 0 0 0 1 − 1 − 1 − 3 ] B = [ 1 0 0 0 0 1 ] A=begin{bmatrix} 0&0&0 \ 0&0&1 \ -1&-1&-3 \ end{bmatrix} B=begin{bmatrix} 1&0 \ 0&0 \ 0&1\ end{bmatrix} A=001001013B=100001
C = [ 1 1 0 0 0 1 ] C=begin{bmatrix} 1&1&0 \ 0&0&1 \ end{bmatrix} C=[101001]

// An highlighted block
A=[0 0 0;0 0 1;-1 -1 -3];
B=[1 0;0 0;0 1];
C=[1 1 0;0 0 1];
D=zeros(2,2);                   	%状态矩阵
[num1,den1]=ss2tf(A,B,C,D,1)   		%传递函数
[num2,den2]=ss2tf(A,B,C,D,2)
%系统解耦-------------------
[m,n]=size(C);
E=zeros(m,m);
F=zeros(m,n);
for i=1:m
 	 u=1;
 	 E(i,:)=C(i,:)*A*B; 
  		while(rank(E)==0)
    		u=u+1;
    		E(i,:)=C(i,:)*A^u*B;   
  		end
  	 F(i,:)=C(i,:)*A^(u+1);
end
L=inv(E);
K=L*F;
A0=A-B*L*F;                 		%解耦后的状态矩阵
B0=B*L;
C0=C;
%极点配置-----------
J=[-2 -3 0];						%期望极点
K1=place(A0,B0,J)

最后

以上就是积极星月为你收集整理的matlab求取状态方程的传递函数并实现系统解耦matlab求取状态方程的传递函数并实现系统解耦的全部内容,希望文章能够帮你解决matlab求取状态方程的传递函数并实现系统解耦matlab求取状态方程的传递函数并实现系统解耦所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部