用Matlab 判断矩阵是正定、半正定还是负定
function matrix_type = check_matrix_definiteness(A)
% 输入:
% A - 待检测的矩阵
% 输出:
% matrix_type - 矩阵类型: 'positive_definite', 'positive_semidefinite', 'negative_definite', 'indefinite'
% 检查矩阵是否为对称矩阵
if ~isequal(A, A')
error('矩阵必须为对称矩阵');
end
% 计算矩阵的特征值
eigenvalues = eig(A);
% 根据特征值判断矩阵的类型
num_positive = sum(eigenvalues > 0);
num_negative = sum(eigenvalues < 0);
num_zero = sum(eigenvalues == 0);
n = length(eigenvalues);
if num_positive == n
matrix_type = 'positive_definite';
elseif num_positive + num_zero == n
matrix_type = 'positive_semidefinite';
elseif num_negative == n
matrix_type = 'negative_definite';
else
matrix_type = 'indefinite';
end
end
将上述代码保存为check_matrix_definiteness.m
后,就可以在另一个matlab脚本里调用了,例如:
% 定义一个对称矩阵
A = [2 -1; -1 2];
% 调用函数检查矩阵类型
matrix_type = check_matrix_definiteness(A)
输出:
matrix_type = positive_definite
有时候,会在求出海森矩阵之后去判定海森矩阵是否是正定或者半正定:
syms x1 x2;
f = x1.^2+x2.^2-x1*x2;
h = hessian(f, [x1, x2]); % 求函数f的海森矩阵