Octave中的伴随矩阵

4
在GNU Octave中是否有类似于Matlab中的伴随矩阵的函数?
4个回答

9
这里的伴随矩阵(adjugate)可能不是你真正想要的。
如果你想要普通伴随矩阵(共轭转置),那么x'将为x提供它。(非共轭转置是x.'transpose(x)conj(x)也适用于矩阵和向量,可以给出复共轭。)
如果你真的想要伴随矩阵(又称经典伴随矩阵),我不认为Octave内置了它。有几种方法可以计算这个矩阵。如果你可以假设可逆性,那么它就是det(x)*inv(x)。如果不能,那就有点复杂了。一般来说,伴随矩阵是余子式矩阵的转置。余子式矩阵用其余子式替换原始矩阵中的每个元素(加上或减去其次数,即没有该行和列的原始矩阵的行列式。对于行列式扩展,加减规则相同--如果行和列的和是偶数,则为正数,如果为奇数,则为负数)。
最简单的编码方式可能是使用SVD(内置)--伴随矩阵是一个反同态,其中adj(xy) = adj(y) adj(x)。x的SVD是一组矩阵u,s,v,其中u*s*v' = x,s为对角线矩阵,u和v都是正交矩阵。adj(x) = adj(u*s*v') = adj(v')adj(s)adj(u)。对于可逆矩阵,伴随矩阵就是行列式乘以逆矩阵。对于正交矩阵,这只是共轭转置。adj(x) = det(v') v adj(s) det(u) u' = det(v'*u) v adj(s) u'。对角矩阵s的伴随矩阵相对容易计算--对角线之外的每个条目都为零,对角线上的每个条目都是其他条目的乘积。

3
我想要做的是求解矩阵的伴随矩阵,而det(x)*inv(x)就是一个解,谢谢。 - Garret Raziel

2

尝试了几次后,我使用以下命令计算了协因子:

det(a)*inv(a).'

请注意命令结尾的点号。


包含“。”时不起作用,至少对于我的目的来说是这样。 - 9 Guy

1

很遗憾,Octave没有内置的adj函数,你可以尝试使用det(A) * inv(A)... 但实际上没有内置的函数,你还可以尝试找到矩阵的余子式然后转置它。另外,它是否说你必须使用matLab?https://www.dcode.fr/adjoint-matrix 对我也起作用....


1

令矩阵A为n行n列的矩阵。

如果矩阵可逆,则将B定义为A的伴随矩阵: B = inv(A)*det(A)

如果矩阵不可逆,则使用以下代码获取伴随矩阵。 计算矩阵A的余子式,然后转置它们:

    function Adjoint_A = adjoint(A)
    
    %Of course it must be nxn matrix
    [n,m] = size(A);
    if n ~= m
        disp('This is not square matrix.')
        return
    endif
    
    Adjoint_A = zeros(n,m);
    
    % Arlright first we need to find the cofactor then tranpose the whole matrix. 
    for i = 1:m
        for j = 1:n
            %Getting minors
            minor_A = A;
            minor_A(i,:) = [];
            minor_A(:,j) = [];
            %Filling up the matrix with cofactor
            Adjoint_A(i,j) = ((-1)^(i+j))*det(minor_A);
        endfor
    endfor
    
    Adjoint_A = Adjoint_A';
    endfunction

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接