矩阵指数与python中给定向量的乘法

时间:2017-01-15 17:21:03

标签: python scipy

我感兴趣的是计算给定稀疏矩阵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,它花了很多时间,我不知道为什么......

知道为什么会这样吗?怎么解决?

我的目标是制作一张包含多个时间点及其各自演变状态的表格

1 个答案:

答案 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。