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