基于matlab的状态反馈与极点配置

这篇具有很好参考价值的文章主要介绍了基于matlab的状态反馈与极点配置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

鸣谢:感谢江苏科技大学张永韡(wei)老师的指导!

原理部分有空加上去。

目录

一、测试代码

二、系统能控性判断函数

三、一般状态矩阵转能控标准型矩阵函数

四、状态反馈矩阵文章来源地址https://www.toymoban.com/news/detail-542207.html


一、测试代码

clear; close all; clc
%% 参数的定义
A=[0 1 0
    0 0 1
    0 -2 -3];
B=[0;0;1];
C=[10 0 0];
s=[-1+1i,-1-1i,-2];%期望极点
dt=0.01;
T=20;%仿真截止时间
x0=[1;1;1];%初始状态(单位阶跃响应)
%% 调用状态反馈函数
[K,AA,BB,CC]=stata_feedback(A,B,C,s);
%K为反馈矩阵
%% 输出原系统
sys_ss=ss(A,B,C,[]);
t=0:dt:T;
u=ones(1,length(t));
[y,t,~]=lsim(sys_ss,u,t,x0);
figure,plot(t,y)
title('原系统')
%% 输出原系统传递函数
D=[0];
[a,b]=ss2tf(A,B,C,D);
sys_tf=tf(a,b);
disp('the tf is :'),sys_tf
%% 输出经过状态反馈矩阵以后系统
sysc_ss=ss(AA,BB,CC,[]);
t=0:dt:T;
u=ones(1,length(t));
[y,t,~]=lsim(sysc_ss,u,t,x0);
figure,plot(t,y)
title('调节后系统')
%% 求出经过状态反馈矩阵变换后的传递函数
DD=[0];
[a,b]=ss2tf(AA,BB,CC,DD);
sysc_tf=tf(a,b);
disp('the tf is :'),sysc_tf

二、系统能控性判断函数

function[ks]=controllability_RankCriterion(A,B)
n=size(A,1);
Qc=ctrb(A,B);
rankQc=rank(Qc);
if rankQc==n
    ks=1;
else
    ks=0;
end
end

三、一般状态矩阵转能控标准型矩阵函数

function[A,B,C]=ss2con(a,b,c)
ks=controllability_RankCriterion(a,b);
if ks==0
     error('the sys is uncontrollable')
else
     disp('the sys is controllable')
%% 求P矩阵
n=size(a,1);
A=zeros(n,n);
p=poly(a);
W=zeros(n,n);
w=zeros(1,n);
for i=1:n
    w(n-i+1)=p(i);
end
for i=1:n
    for j=1:n-i+1
        W(i,j)=w(i+j-1);
    end
end
Qc=ctrb(a,b);
P=Qc*W;
%% 求A,B,C
C=c*P;
B=zeros(n,1);
B(n,1)=1;
den=zeros(1,n);
for i=1:n
    den(i)=p(i+1);
end
for i=1:n-1
     A(i,i+1)=1;
end
dxn=fliplr(den);
dxn=-1*dxn;
A(n,:)=dxn;
end

四、状态反馈矩阵

function[K,AA,BB,CC]=stata_feedback(a,b,c,s)
[A,B,C]=ss2con(a,b,c);
n=size(A,1);
p=poly(A);
Qc=ctrb(A,B);
%% W矩阵
W=zeros(n,n);
w=zeros(1,n);
for i=1:n
    w(n-i+1)=p(i);
end
for i=1:n
    for j=1:n-i+1
        W(i,j)=w(i+j-1);
    end
end
%% 求K矩阵
aa=zeros(1,n);
a=zeros(1,n);
for i=1:n
    a(i)=p(i+1);
end
pp=poly(s);
for i=1:n
    aa(i)=pp(i+1);
end
P=Qc*W;
iP=inv(P);
K=(aa-a)*iP;
K=fliplr(K);
%% 新的系统
AA=A-B*K;
BB=B;
CC=C;

到了这里,关于基于matlab的状态反馈与极点配置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包