у меня есть большая сетка с матрицей (3x3), связанной с каждой точкой. Я хочу выполнить симметричную и кососимметричную декомпозицию. Я знаю, что алгоритм
𝐴=0,5(𝐴+𝐴T)+0,5(𝐴−𝐴T)
Я проверял библиотеку линейной алгебры в Джулии, но не могу найти это разложение (я нашел Qr,LU,SDV,...)
Он доступен в Джулии (или из внешнего источника) или мне придется его написать?
заранее спасибо
Мне нужно разложение на симметричную и антисимметричную часть матрицы. я проверил библиотеку LinearAlgebra от Джулии
6 миллионов баллов
у этого разложения есть имя?
Я нашел только такое разложение, как «симметричное и кососимметричное разложение».
возможно, вам захочется пройтись по обмену математическими стеками, чтобы они могли помочь определить/назвать математический и численный подход к его решению.
Если вы используете Julia 1.10 или более позднюю версию, LinearAlgebra.jl
предоставляет метод LinearAlgebra.hermitianpart. Вы всегда можете посмотреть, как это реализовано, и реализовать кососимметричную часть самостоятельно.
Этот вариант выделяет матрицы факторизации, что может оказаться дорогостоящим. Альтернативой является использование LinearOperators.jl, который предоставляет ленивые (т.е. нераспределяющие) операторы, ведущие себя как марисы. Вы можете использовать это для определения частей sym/skew без фактического вычисления матрицы, просто это действие на векторы.
Простейшую декомпозицию можно выполнить следующим образом.
using StaticArrays
A = randn(SMatrix{3,3,Float64}, 4, 5) # create initial data
Symm = 0.5 .* (A .+ adjoint.(A))
SkewSymm = A .- Symm # or 0.5 .* (A .- adjoint.(A))
Я использую StaticArrays для внутренних матриц 3x3, поскольку это намного эффективнее, чем использование обычного Matrix
.
Насколько большой большой?