1 计算原理

H∞计算过程
H∞计算流程图

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