求教:在Matlab里面,如何判断一个矩阵是否正定?
求教:在Matlab里面,如何判断一个矩阵是否正定?直接求他的特征值么?还有其他的方法么?谢谢! 特征值都大于零就可以了。这个好像是充分必要条件。 可是编了一个程序,前面说明这个矩阵是正定的,后面直接解方程组得时候老是有问题。(解优化问题)
g0是目标函数的梯度,矩阵B的初始值设为单位阵I
gamma=1.5;lambda=0;
I=eye(n);
if diag(eig(B))<=0 %如果B不正定,则在之间找一个数使得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 看一下刚度矩阵的特征值是不是都大于零 Ref:对称正定矩阵的特征值会有复数? http://forum.vibunion.com/thread-108027-1-1.html
页:
[1]