Matlab传函和状态空间使用--现代控制理论

整理一些关于传函和状态空间的Matlab函数用法

假定有一控制系统如下图:

Matlab传函和状态空间使用--现代控制理论_第1张图片
罗列一下,(命名不能与关键字相同,否则matlab首次运行不会报错,第二使用关键字函数时将会报错):
求传函、状态空间系统:tf() ss(),
进行转换:

  1. [A,B,C,D] = tf2ss(b,a)
  2. [b,a] = ss2tf(A,B,C,D)

得到传函系数、状态空间系数矩阵

  1. tfdata()
  2. ssdata()
    有时需要将不是能控标准型的系统转换成能控标准型
    可以写一个函数方便转换:
%转换函数
function Gc=ctrlss(A,B,C,D)  %将任意状态空间表达式变换为能控标准型
n=length(A);
Uc=ctrb(A,B);
U=inv(Uc);
p1=U(n,:);
for i=1:n
   T(i,:)=p1*A^(i-1);
end
Ac=T*A*inv(T);
Bc=T*B;
Cc=C*inv(T);
Gc=ss(Ac,Bc,Cc,D);

若需要对其初始状态进行分析,可以画出它的初始状态轨迹,若其初始状态是[1 0 1 -1]。

x0=[1 0 1 -1]';
t=0:0.001:5;
[y,x,t]=initial(A11,B1,C1,D1,x0,t);
figure(3)
plot(t,x(:,1),'r',t,x(:,2),'b',t,x(:,3),'k',t,x(:,4),'g');grid on;hold on
xlabel('时间/s');ylabel('x');legend('x1','x2','x3','x4');
figure(4)
plot(t,y,'r');grid on;
xlabel('时间/s');ylabel('y');legend('y');

多项式相乘:conv([],[])。各个多项式由最高项到常数的系数矩阵相乘。

求状态转移矩阵函数:sysm t;expm(A*t);

在采用状态反馈控制系统时,需要配置极点改善系统性能,使其恰好在所期望的位置上。
Matlab配置极点函数:假定配置极点P=[-3+0.1j -3-0.1j -3 -3]
K=acker(A,B,P); %A,B时系统状态空间的A,B阵
A12=A1-B1*K; %反馈后新的系统阵
再求取状态反馈后,可能还需要设置一个观测器进行测试系统的性能。Matlab也可以用配置极点的方法找到全维观测器的G阵。

G=(acker(A',C',P))';
AG = A-G*C1;

最优控制里的无限时间状态调节器求取等价的状态反馈矩阵,常用的Matlab命令有:

R=0.5;
Q=[800000 0 0 0;0 1 0 0;0 0 5000 0;0 0 0 1];
[K,S,E]=lqr(A1,B1,Q,R) %得到反馈控制矩阵K
A11=A1-B1*K;

这里可以调节Q、R来达到和状态反馈一样的控制效果,其中Q为正定常数矩阵,R是半正定常数矩阵。

你可能感兴趣的:(MATLAB)