特定结构4×4非厄米矩阵特征值与向量高效Julia计算
特定结构4×4非厄米矩阵特征向量高效算法求助
我目前正在寻找可计算特定结构4×4非厄米矩阵特征向量的高效算法,优先支持Julia语言实现,目标矩阵的结构如下:
a b 0 c 0 0 -1 0 d e 0 f g h 0 i
我清楚原则上直接调用Julia或Python的内置函数即可完成计算,但实际测试显示,即便Julia本身具备高性能特性,其计算速度仍比开启fastmath选项的C++ Eigen库慢2倍。因此我希望了解Eigen库针对此类场景采用的具体算法,以及该算法是否可以迁移实现到Julia或Python环境中。
感谢各位提供的提示与建议。
问题更新
感谢各位评论指出我此前描述不够准确,以下为可在Julia中直接运行的测试示例代码:
using BenchmarkTools using LinearAlgebra using StaticArrays function foo(A) eigen(A) return end function foo2(A) @fastmath eigen(A) return end function foo3(A) LinearAlgebra.LAPACK.geevx!('B', 'N', 'V', 'N', copy(A)) return end A = rand(4,4) + im*rand(4,4); A[:,3] .= 0; A[2,:] .= 0; A[2,3] = 1; AStatic = SMatrix{4,4, ComplexF64}(A) @benchmark eigen($A) @benchmark eigen($AStatic) @benchmark foo($AStatic) @benchmark foo2($AStatic) @benchmark foo3($A)
针对其他用户的疑问和建议,补充说明如下:
- 计算需求:我实际需要同时计算特征值与特征向量。当前使用的Julia版本底层调用OpenBLAS,即便加载
MKL.jl切换为MKL后端,性能提升也十分有限。 - 已尝试的优化手段:测试显示
fastmath选项未带来任何性能变化,推测原因是调用的相关线性代数函数已完成预编译,该选项无法生效;StaticArrays虽在部分场景下有优化效果,但针对非厄米矩阵其仍会调用Julia内置计算函数;QR分解、LU分解无法直接得到特征值,且eigenvals()方法也不适用于非厄米矩阵计算场景。 - 对解析解方案的顾虑:针对有用户提到的手动推导求解(如Ferraris方法),我担心这类方法手动展开的计算量较大,最终实现后的计算速度不会有明显提升。
内容的提问来源于stack exchange,提问作者Itzui
相关产品推荐
相关产品推荐

