用matlab编程判断矩阵是否正定

matlab编写一个脚本,要求使用顺序主子式(不用特征值判断)判断一个矩阵是正定还是负定还是不定型。要在今晚十二点前编写出来。

直接上代码吧

function Test()

%% 案例1
A1= eye(4)
f1 = Fun_isPD(A1);
switch f1
    case 1
        disp('正定')
    case -1
        disp('负定')
    otherwise
        disp('不定')
end

%% 案例2
A2 = -A1
f2 = Fun_isPD(A2);
switch f2
    case 1
        disp('正定')
    case -1
        disp('负定')
    otherwise
        disp('不定')
end

%% 案例3
A3 = diag([1 1 1 0])
f3 = Fun_isPD(A3);
switch f3
    case 1
        disp('正定')
    case -1
        disp('负定')
    otherwise
        disp('不定')
end

%% 案例4
A4 = diag([1 -1 1 1])
f4 = Fun_isPD(A4);
switch f4
    case 1
        disp('正定')
    case -1
        disp('负定')
    otherwise
        disp('不定')
end

end

function f = Fun_isPD(A)
% f = Fun_isPD(A) 使用顺序主子式方法判断矩阵A的正定性
% f = 1   A为正定时
% f = 0   A不定时
% f = -1  A为负定时

n = length(A);   % 阶数
f0 = sign(A(1));  % 一阶顺序主子式
for ii = 2:n
    f = sign( det(A(1:ii,1:ii)) );
    if f <= 0
        if f == (-1)^ii
            f = -1;
            f0 = f;
            continue;
        end
        f = 0;
        break;
    else
        if f0 > 0
            f = 1;
        else
            f = -1;
        end
    end
    f0 = f;
end

end

结果:

A1 =

     1     0     0     0
     0     1     0     0
     0     0     1     0
     0     0     0     1

正定

A2 =

    -1     0     0     0
     0    -1     0     0
     0     0    -1     0
     0     0     0    -1

负定

A3 =

     1     0     0     0
     0     1     0     0
     0     0     1     0
     0     0     0     0

不定

A4 =

     1     0     0     0
     0    -1     0     0
     0     0     1     0
     0     0     0     1

不定

 

clear
clc
 
a=[1 2 3;4 5 6;7 8 9]
c=eig(a)
 
d=size(c);
e=d(1)*d(2)
 
flag=0;
 
for i=1:1:e
    if(c(i)<0)
        flag=1;
    end
end
 
if(flag==1)
    fprintf('不是正定\n');
end
 

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632