我感兴趣的是计算给定稀疏矩阵H
的矩阵指数,然后将其与给定的向量v
相乘。由于矩阵H
的大小变为90.000的数量级,因此明确计算它然后乘以v
变得困难(它花费了大量时间)。关键是我想计算状态v
的时间演变,其中H
是汉密尔顿主义者,在给定时间内:
U = exp(-i*H*t)
其中i
是虚数单位,t
是时间。然后我想将此矩阵U
乘以向量v
,以获得此状态的演变v
另一方面,我在python中找到了以下库:
scipy.sparse.linalg.expm_multiply
这样:
scipy.sparse.linalg.expm_multiply(-(1j)*t*H,v)
来自https://docs.scipy.org/doc/scipy-0.16.1/reference/generated/scipy.sparse.linalg.expm_multiply.html。有了这个,我只能在很短的时间内非常高效地计算。在很长一段时间t
,它花了很多时间,我不知道为什么......
知道为什么会这样吗?怎么解决?
我的目标是制作一张包含多个时间点及其各自演变状态的表格
答案 0 :(得分:1)
首先应该对H进行对角化,然后在该基础上表示v(量子力学的能量基础)。以这种形式表达v将使您可以轻松计算后续时间演变。
设e_i为H的特征向量。由于H是哈密顿量,因此它是Hermitian,因此任何向量v都具有完整且唯一的描述,作为能量基础中的线性叠加:
v = SUM(v_i * e_i)
使用v_i唯一常量。然后你可以计算任何t的时间进化状态:
v(t) = SUM(exp(-i*t*lambda_i) * v_i *e _i)
其中lambda_i是特征值H * e_i = lambda_i * e_i。由于这只是一堆标量乘法和求和,因此计算效率非常高。
主要减速将对角化H,其在算法上是O(N ^ 3)阶(对于N×N矩阵)。
对于小t,exp(-itH)约为1 - itH(你可以从泰勒展开看到这个),所以当然这会很快。
我担心上面的内容几乎和它一样快(除非系统有一些额外的特殊属性)。量子力学的模拟存在一些非常现实的困难,并且是量子计算机的用途; P。