matlab - MATLAB 嵌套语句和二分法的问题

标签 matlab bisection norm

该网站的新手,但我正在努力磨练工作和学校的一些 MATLAB 技能,并正在寻求以下方面的帮助:

我想编写自己的算法来使用二分法查找系统的 Hinf 范数,就像 MATLAB 函数“hinfsyn”所做的那样。

我已经包含了到目前为止的代码:

function [ hnorm ] = matmath(A,B,C,D,glow,ghigh,tol)

if 2*(ghigh-glow) < tol
    gam  = (ghigh+glow)/2;
    hnorm = gam;
else
    Dgam = ((gam^2)*eye(size(D)))-(D'*D);
    A_clp = [ A + (B/Dgam*D'*C) -B/Dgam*B'
        (C'*C) + C'*D/Dgam*D'*C -A'-(C'*D/Dgam*B')];
    eigcl = eig(A_clp);
    for i = 1:length(eigcl)
        if real(eig(i)) == 0
            glow = gam;
        else
            ghigh = gam;
        end
    end
end

我已将问题合理化为几个步骤:

  1. 将 Gamma 边界用作输入,计算第一次迭代:gam = (ghigh-glow)/2。如果 2*(ghigh-glow) < tol,则程序以 hinf = gam 停止。
  2. 计算闭环 A 矩阵的特征值。
  3. 检查纯虚特征值。如果存在纯虚特征值,new glow = gam。否则,设置 ghigh = gam。
  4. 继续迭代,直到满足 Gamma 容差。

我相信我的矩阵计算是正确的,但我很难处理 if/for 语句。当我在 MATLAB 中执行代码时,我的代码只完成了第一次迭代。任何提示将非常感谢!谢谢!

更新:这是我简化过的代码,它成功地完成了一次迭代,并且已经针对许多不同的值进行了测试。

function [ hnorm ] = matmath(A,B,C,D,glow,ghigh,tol)

gam  = (ghigh+glow)/2;

if 2*(ghigh-glow) < tol
    hnorm = gam
else    

Dgam = ((gam^2)*eye(size(D)))-(D'*D);
A_clp = [ A + (B/Dgam*D'*C) -B/Dgam*B'
        (C'*C) + C'*D/Dgam*D'*C -A'-(C'*D/Dgam*B')];
eig_clp = eig(A_clp)

for z = 1:length(eig_clp)
    if abs(real(eig_clp(z)))<1e-10
        glow = gam
        break
    end
end

ghigh = gam

end

最佳答案

如果你想让你的代码一直运行到你达到2*(gmax - gmin) < tol , 使用 while循环:

function [ hnorm ] = matmath(A,B,C,D,glow,ghigh,tol)

while 2*(ghigh-glow) >= tol
    Dgam = ((gam^2)*eye(size(D)))-(D'*D);
    A_clp = [ A + (B/Dgam*D'*C) -B/Dgam*B'
        (C'*C) + C'*D/Dgam*D'*C -A'-(C'*D/Dgam*B')];
    eigcl = eig(A_clp);
    for i = 1:length(eigcl)
        if real(eig(i)) == 0
            glow = gam;
        else
            ghigh = gam;
        end
    end
end

gam  = (ghigh+glow)/2;
hnorm = gam;

关于matlab - MATLAB 嵌套语句和二分法的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43724765/

相关文章:

c# - 从 C# 调用 MATLAB 函数

matlab - 在matlab矩阵中查找子矩阵的一般方法

python - 了解使用二分法找到解决方案的迭代次数

arrays - 具有递增整数数组的高效算法

mongodb - 如何将嵌套对象存储在不同的 mongodb 集合中?

numeric - 在 ODE 求解后,如何将数值解更改为 ODE?

image - 删除背景并将鹿作为前景?

matlab - 如何在矩阵的最后一列中移零

c++ - 用二分法求一个数的平方根的问题

c# - 如何使用 MongoDb C# 规范存储文件