声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3433|回复: 4

[编程技巧] 求教:在Matlab里面,如何判断一个矩阵是否正定?

[复制链接]
发表于 2007-5-21 17:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
  求教:在Matlab里面,如何判断一个矩阵是否正定?直接求他的特征值么?还有其他的方法么?
谢谢!
回复
分享到:

使用道具 举报

发表于 2007-5-21 18:44 | 显示全部楼层
特征值都大于零就可以了。  这个好像是充分必要条件。

评分

1

查看全部评分

 楼主| 发表于 2007-5-21 20:29 | 显示全部楼层
可是编了一个程序,前面说明这个矩阵是正定的,后面直接解方程组得时候老是有问题。(解优化问题)
g0是目标函数的梯度,矩阵B的初始值设为单位阵I

    gamma=1.5;lambda=0;
    I=eye(n);
    if diag(eig(B))<=0            %如果B不正定,则在[0,a]之间找一个数使得B+lambda*I是正定的
        a=norm(B)+(1+epsilon)*norm(g0)/delta;
        for lambda=0:0.1:a
            if diag(eig(B+lambda*I))>0
                break;
            else
                error('没有找到使B正定的lambda');
            end
        end
    end
    while(1)        
        A1=B+lambda*I;     %由于B+lambda*I正定(上面保证了),对其进行Cholesky分解
        R=chol(A1)
        dk=(-inv(A1)*g0')';
        N_dk=norm(dk);
        if N_dk<=delta
            break;
        else
            q=inv(R')*dk';
            N_q=norm(q);
            lambda=lambda+((N_dk^2)*(gamma*N_dk-delta))/((N_q^2)*delta);
        end

    end
发表于 2014-12-26 20:28 | 显示全部楼层
看一下刚度矩阵的特征值是不是都大于零
发表于 2014-12-29 10:16 | 显示全部楼层
Ref:  对称正定矩阵的特征值会有复数? http://forum.vibunion.com/thread-108027-1-1.html
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-12-23 15:54 , Processed in 0.073330 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表