加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

线性系统理论中传递函数与能控能观状态方程的相互转换Matlab程序

(2013-09-25 19:14:55)
标签:

能控能观状态方程

来弗勒算法

matlab

传递函数

线性系统理论

it

输入为传递函数系数(a,b);输出为能控能观型状态方程(A B C D)

%**********************************
% 程序;线性系统理论第一章编程作业一
% 姓名:yuanyang
% 时间:2013.9.13
%**********************************

function [A,B,C,D]=ab2ABCD(a,b)
len_a=length(a);  %a=[bm,bm-1,...,b1,b0]
m=len_a-1;
len_b=length(b);  %b=[an-1,...,a1,a0]
n=len_b;

A1=zeros(n-1,1);
A2=eye(n-1);
A=[A1 A2];
fb=fliplr(b);   %对b向量做水平翻转
A(n,:)=-fb(:)   %输出A

if m
    k=zeros(1,n-1);
    B=[k,1];
    B=B'  %输出B
    fa=fliplr(a);
    mn=n-m-1;
    MN=zeros(1,mn);
    C=[fa MN]  %输出C
    D=[]   %输出D
end
if m==n    %依据算法一中m=n的情形得出状态空间描述
    k=zeros(1,n-1);
    B=[k,1];
    B=B'
    fa=fliplr(a);
    fb=fliplr(b);
    for i=1:n
        C(i)=fa(i)-fa(len_a)*fb(i);
    end
    C
    D=[fa(len_a)]
end
if  m==0   %依据算法二中m=0的情形得出状态空间描述
    k=zeros(1,n-1);
    B=[k,a(len_a)];
    B=B'
    p=zeros(1,n-1);
    C=[1,p]
    D=[]
end
end

采用莱弗勒算法,输入为状态方程(A B C D),输出为传递函数系数

%**********************************
% 程序;线性系统理论第一章编程作业二
% 姓名:yuanyang
% 时间:2013.9.17
%**********************************

function G=ABCD2ab(A,B,C,D)
[m,n]=size(A);  %确定矩阵A的大小

a=zeros(1,m);   %预先定义向量a用来存储特征多项式系数ai
 R=eye(m);
 K=eye(m);
 P=R*A;
 a(1)=-trace(P)/1;  %a(1)中存储的是an-1的值
for i=2:m
    R=R*A+a(i-1)*K;
    P=R*A;
    a(i)=-trace(P)/i;
end   %求取出n个特征多项式

cab=zeros(1,m-1);
cab(1)=C*A*B;
for i=2:m-1
    T=A^i;
    cab(i)=C*T*B;
end  %建立一个C*A^i*B的过渡向量,方便接下来的计算,共有n-1个

e=zeros(1,m);
e(1)=C*B;  %e(1)中存储en-1的值
for i=2:m
    pk=0;
    for j=1:i-2
        pk=a(j)*cab(i-1-j)+pk;
    end
    e(i)=cab(i-1)+pk+a(i-1)*C*B;
end

a %输出的序列依次为a(n-1),a(n-2)...a(1)
e %输出的序列依次为E(n-1),E(n-2),...E(1)
D

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有