确定矩阵为正定



我想检查矩阵是否为正定确定。我已经在Internet上搜索了如何使用MATLAB检查它。我有兴趣使用chol检查方法(不要检查特征值一个)。以下是代码:

[~, r] = chol(A);
r == 0 && rank(A) == size(A,1)

我知道,如果A不是正定确定的,那么r是正面的。但是,检查rank(A)==size(A,1)的意义是什么?如果我只使用以下代码:

,它似乎仍然有效
[~, r] = chol(A);
r == 0 % check if r>0

我想知道A是否为正半决矩阵,r==0。但是,如果我以A=[1,0;0,0]为例,则使用上述代码进行检查,r = 2 > 0。这使我对检查排名感到不舒服。

我在这里找到了此代码。

为什么不使用 chol的1输出变体?当A不是正确定时,这会引发错误。

您可以使用这样的事实:

function itis = isPositiveDefinite(A)
    % Input checks
    errId = @(str) [mfilename ':' str];
    assert(isnumeric(A) && ~isempty(A),...
           errId('invalid_argument'),...
           'Input argument must be a non-empty numeric matrix.');
    % Initialize
    itis = true;
    % Trivial cases
    if ~isequal(A.', A) || any(~isfinite(A(:))) || any(~isreal(A(:)))
        itis = false;
    % Less trivial cases -- use chol()
    else
        try
            [~] = chol(double(A));
        catch ME
            if strcmp(ME.identifier, 'MATLAB:posdef')
                itis = false;
            else
                baseME = MException(errId('chol_failure'), [...
                                    'Failed to determine whether matrix is ',...
                                    'positive definite.']);
                throw(addCause(baseME, ME));
            end
        end
    end
end

相关内容

  • 没有找到相关文章

最新更新