gpt4 book ai didi

Julia:我们如何计算伴随或经典伴随(线性代数)?

转载 作者:行者123 更新时间:2023-12-01 10:18:42 28 4
gpt4 key购买 nike

我想计算 Julia 1.0 中的经典伴随

为此,我复制了 wikipedia 中作为示例给出的矩阵

julia> B = [-3 2 -5; -1 0 -2; 3 -4 1]
3×3 Array{Int64,2}:
-3 2 -5
-1 0 -2
3 -4 1

在我看来,这是计算 B 的转置而不是它的伴随。相反,我们应该得到这个(来自 wikipedia ):

并尝试使用 adjoint() 得到它的伴随Julia 文档中提到的函数 here尽管该文档没有具体说明此功能的作用
julia> adjoint(B)
3×3 Adjoint{Int64,Array{Int64,2}}:
-3 -1 3
2 0 -4
-5 -2 1

相反,我想得到这个:

enter image description here

在 Matlab 中,我确实得到了:
>> adjoint(B)

ans =

-8.0000 18.0000 -4.0000
-5.0000 12.0000 -1.0000
4.0000 -6.0000 2.0000

最佳答案

Julia 的伴随被定义为输入矩阵的复共轭的转置。但是,您似乎想要 审判矩阵:

The adjugate has sometimes been called the "adjoint", but today the "adjoint" of a matrix normally refers to its corresponding adjoint operator, which is its conjugate transpose.



您可以通过求逆,然后乘以行列式来计算调整矩阵:
julia> det(B) * inv(B)
3×3 Array{Float64,2}:
-8.0 18.0 -4.0
-5.0 12.0 -1.0
4.0 -6.0 2.0

感谢 @Antoine Levitt 和 @Syx Pek 在 Julia Slack 上提出的求逆和乘以行列式的建议。

原答案:

辅助矩阵似乎是辅助因子矩阵的转置。以下是寻找辅因子的简单实现:
# import Pkg; Pkg.add("InvertedIndices")
using InvertedIndices # for cleaner code, you can remove this if you really want to.
function cofactor(A::AbstractMatrix, T = Float64)
ax = axes(A)
out = similar(A, T, ax)
for col in ax[1]
for row in ax[2]
out[col, row] = (-1)^(col + row) * det(A[Not(col), Not(row)])
end
end
return out
end

然后,要找到调整词,您只需要转置( transpose(cofactor(B)) )。

答案是:
julia> cofactor(B, Float64) |> transpose
3×3 Transpose{Float64,Array{Float64,2}}:
-8.0 18.0 -4.0
-5.0 12.0 -1.0
4.0 -6.0 2.0

这相当于 Matlab 给出的。

编辑:@Antoine Levitt on the Julia slack 指出这本质上是一个重新缩放的逆矩阵,所以如果你计算出缩放因子,你可以做 inv(B) * scaling_factor (在这个矩阵的情况下,它是 6)。

关于Julia:我们如何计算伴随或经典伴随(线性代数)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58149645/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com