Сопряженный Юлии определяется как транспонирование комплексного сопряжения входной матрицы.Тем не менее, вы, похоже, хотите, чтобы матрица adjugate :
Адъюгат иногда называли «сопряженным», но сегодня «сопряженный» матрицы обычно ссылается на ее соответствующийоператор присоединения, который является его сопряженным транспонированием.
Вы можете вычислить сопряженную матрицу путем инвертирования, а затем умножения на определитель:
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 на слабости Джулии указал, что это по существу измененная обратная матрица, так что если вы вычислите коэффициент масштабирования, вы можетепросто сделайте inv(B) * scaling_factor
(для этой матрицы это 6).