1 计算原理
2 范数计算相关程序
function [gamma]=H2()
%{
程序功能:
1、使用迭代法计算传递函数G为矩阵时的H2范数。
2、求解ALc+LcA'+BB'=0,代入sqrt(trace(CLcC'))
3、求解A'Lo+LoA+C'C=0,代入sqrt(trace(B'LoB))
4、Matlab求解Lyapunov方程
AX+XA^T+C=0
X=lyap(A,C)
%}
clear,clc
A=[2,3 ;5,3];
B=[3;5];
C=[1, 0];
D=0; %给出系统矩阵
n=max(size(A));
I=eye(2,2);
Lc=lyap(A,B*B');
gamma=sqrt(trace(C*Lc*C')) %方法1
Lo=lyap(A',C'*C) ;
gamma=sqrt(trace(B'*Lo*B)) %方法2
end
3 范数计算相关程序
function [gamma]=Hinfty()
%{
程序功能:
1、使用迭代法计算传递函数G为矩阵时的H_infty。
2、构造哈密顿矩阵。
3、判断矩阵特征值是否在虚轴上。
%}
clear,clc
syms s
eps=1e-2; %给出精度
A=[2,3 ;5,1];
B=[3;2];
C=[1, 0];
D=0; %给出系统矩阵
sys=ss(A,B,C,D) ; %系统描述
bode(sys)
% n=max(size(A));
I=eye(2,2);
G=C*inv(s*I-A)*B+D ; %给出传递函数
Ginf=limit(G,s,inf) ;
[s, v, d]=svd(Ginf) ; %奇异值分解
a=double(max(v) ); %最大奇异值
b=1e4; %b取充分大正数
% num=0; %迭代次数
while( abs(a-b)>eps )
gamma=(a+b)/2;
H=[A ,(1/gamma^2)*(B*B') ;
-C'*C , -A'] ;%给出哈密顿矩阵
H=vpa(H,4);
flag=judge(H);
if(flag) %虚轴上有特征值,增加gamma
a=gamma;
else
b=gamma;%虚轴上没有特征值,减少gamma
end
% num=num+1;
end
gamma=vpa(gamma,6);
end
%{
函数功能:判断哈密顿矩阵是否在虚轴上没有特征值
1、若H满足在虚轴上有特征值,返回1
2、否则返回0
%}
function flag=judge(H)
flag=0;
[v,d]=eig(H); %计算哈密顿矩阵特征值,v是特征向量,d是特征值
d=vpa(d,4);
n=max( size(H) ); %矩阵维数
for i=1:n
if( real(d(i,i))==0) %H在虚轴上有特征值
flag=1;
break;
end
end
end
评论(0)
您还未登录,请登录后发表或查看评论