Julia-对从另一个函数返回的矩阵求幂

Julia-对从另一个函数返回的矩阵求幂,julia,Julia,我有函数f1和f2返回矩阵m1和m2,它们是使用LinearAlgebra软件包中的对角线、三对角线、符号三对角线计算的 在一个新函数中,我尝试计算 j = m1 - m2*im m3 = exp(j) 但这会在计算时产生方法错误,除非我使用j=Matrix(m1-m2*im),表示exp(::LinearAlgebra.Tridiagonal…)没有匹配方法 我的问题是如何以最佳方式进行计算?我完全是朱莉娅的初学者。除非你有一个非常特殊的结构j(也就是说,如果它的指数是稀疏的-这不太可能),

我有函数
f1
f2
返回矩阵
m1
m2
,它们是使用LinearAlgebra软件包中的
对角线、三对角线、符号三对角线
计算的

在一个新函数中,我尝试计算

j = m1 - m2*im
m3 = exp(j)
但这会在计算时产生
方法错误
,除非我使用
j=Matrix(m1-m2*im)
,表示exp(::LinearAlgebra.Tridiagonal…)没有匹配方法


我的问题是如何以最佳方式进行计算?我完全是朱莉娅的初学者。

除非你有一个非常特殊的结构
j
(也就是说,如果它的指数是稀疏的-这不太可能),否则你最好使用密集矩阵作为
exp
的输入:

m3 = LinearAlgebra.exp!([float(x) for x in Tridiagonal(dl, d, du)])
如果您希望
m3
是稀疏的,那么我认为目前在Julia中没有针对这种情况实现的特殊算法


注意,我使用
exp在适当的位置执行操作,并使用理解来确保参数为
exp是密集的。作为
exp
需要
linearagebra.BlasFloat
(即
Union{Complex{Float32},Complex{Float64},Float32,Float64}
)我使用
float
来确保
j
的元素被适当转换。请注意,如果您使用例如
BigFloat
Float16
值,它可能会失败-在这种情况下,您必须自己对预期类型进行适当的转换。

j
是一个三对角矩阵,对角线相同为零。所以我确实希望它非常稀疏。它实际上是量子力学的。如果你有一个很好的建议,这将是非常有益的。同时,我会尝试一下。在这种情况下,利用这些信息编写一个自定义的求幂函数可能是最好的。事实上,这就是我最后所做的。事实证明,这要简单得多。不过,我曾尝试使用PyCall从scipy导入expm来完成这一部分,但Julia的速度仍然不如python快。我希望稀疏算法能尽快实现。