4

在 gnu octave 中是否有任何函数可以辅助矩阵(类似于 matlab 中的伴随矩阵等)?

4

4 回答 4

8

佐证可能不是您真正想要的。

如果你想要正常的伴随(共轭转置),那么x'会给你 for 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 的对角矩阵相对容易计算——对角线之外的每个元素都是零,对角线上的每个元素都是其他元素的乘积。

于 2010-12-15T09:23:03.023 回答
2

经过一些尝试后,我使用以下命令计算了协因数:

det(a)*inv(a).'

注意最后的点是命令的一部分

于 2021-02-23T15:13:07.583 回答
1

不幸的是,八度音阶中的 adj 没有内置函数,您可以尝试 det(A) * inv(A)... 但是 func 中实际上没有内置函数,您也可以尝试找到矩阵的辅因子然后转置它。它还说你必须使用matLab吗?https://www.dcode.fr/adjoint-matrix也适用于我....

于 2020-06-11T00:13:24.850 回答
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
于 2021-06-01T15:17:59.613 回答