化二次型为标准型
可以用schur和eig实现:
[Q,D]=schur(A)
[Q,D]=eig(A)
其实,A为二次型的矩阵,D为A的特征值构成的对角矩阵,Q为正交矩阵。
>> A=[-2 2 2 2;2 -6 0 0;2 0 -9 3;2 0 3 -9];
>> [Q,D]=schur(A)
Q =
0.0000 -0.5000 -0.0000 -0.8660
0.0000 0.5000 0.8165 -0.2887
0.7071 0.5000 -0.4082 -0.2887
-0.7071 0.5000 -0.4082 -0.2887
D =
-12.0000 0 0 0
0 -8.0000 0 0
0 0 -6.0000 0
0 0 0 0.0000
>> [Q D]=eig(A)
Q =
0.0000 -0.5000 -0.0000 -0.8660
0.0000 0.5000 0.8165 -0.2887
0.7071 0.5000 -0.4082 -0.2887
-0.7071 0.5000 -0.4082 -0.2887
D =
-12.0000 0 0 0
0 -8.0000 0 0
0 0 -6.0000 0
0 0 0 0.0000
经过正交变换X=QY,二次型化为标准型:f=-12*y1^2-8*y2^2-6*y3^2。
>> A=[3 -2;-2 6];
>> D=schur(A)
D =
2.0000 0
0 7.0000
二次型的标准型为:f=2*x1^2+7*x2^2。
实二次型的定性
>> subplot(2,2,1);
>> ezmesh('3*x1^2-4*x1*x2+6*x2^2');
>> subplot(2,2,2);
>> ezmesh('-5*x1^2+4*x1*x2-2*x2^2');
>> subplot(2,2,3);
>> ezmesh('3*x1^2+4*x1*x2-2*x2^2');
>> subplot(2,2,4);
>> ezmesh('x1^2-6*x1*x2+9*x2^2');
>> grid on
一、正定的
二、负定的
三、不定的
四、半正定的
MATLAB判断实二次型f正定的方法:
1、特征值法
2、顺序主子式法
>> A1=[1 1 -1;1 2 -1;-1 -1 5];
>> d1=eig(A1)
d1 =
0.3542
2.0000
5.6458
>> A2=[1 1 0 0;1 1 1 0;0 1 3 2;0 0 2 2];
>> d2=eig(A2)
d2 =
-0.3489
0.6041
2.0000
4.7448
第一个正定
第二个不正定
用顺序主子式方法判断实二次型的正定性的程序Untitled:
syms t;
A=input('输入矩阵A:');
n=size(A);
for i=1:n
w(i)=det(A(1:i,1:i));
end
w;
if w>0
fprintf('因为A的各阶顺序主子式都大于零,所以f是正定的.\n');
else
fprintf('因为A的各阶顺序主子式都不全大于零,所以f不是正定的.\n');
end
>> Untitled
输入矩阵A:[1 -1 2 1;-1 3 0 -3;2 0 9 -6;1 -3 -6 19]
因为A的各阶顺序主子式都大于零,所以f是正定的.
syms t;
A=input('输入矩阵A:');
n=size(A);
for i=1:n
w(i)=det(A(1:i,1:i));
end
w
>> Untitled2
输入矩阵A:[1 t 1;t 3 -2;1 -2 3]
w =
[ 1, 3 - t^2, - 3*t^2 - 4*t + 2]