我正在嘗試在Python中求指數複數矩陣,並且遇到了一些麻煩。我使用的scipy.linalg.expm
功能,和時遇到當我嘗試下面的代碼一個相當奇怪的錯誤消息:運行第二個實驗中,當Python中的矩陣求冪
import numpy as np
from scipy import linalg
hamiltonian = np.mat('[1,0,0,0;0,-1,0,0;0,0,-1,0;0,0,0,1]')
# This works
t_list = np.linspace(0,1,10)
unitary = [linalg.expm(-(1j)*t*hamiltonian) for t in t_list]
# This doesn't
t_list = np.linspace(0,10,100)
unitary = [linalg.expm(-(1j)*t*hamiltonian) for t in t_list]
的錯誤是:
This works!
Traceback (most recent call last):
File "matrix_exp.py", line 11, in <module>
unitary_t = [linalg.expm(-1*t*(1j)*hamiltonian) for t in t_list]
File "/usr/lib/python2.7/dist-packages/scipy/linalg/matfuncs.py", line 105, in expm
return scipy.sparse.linalg.expm(A)
File "/usr/lib/python2.7/dist- packages/scipy/sparse/linalg/matfuncs.py", line 344, in expm
X = _fragment_2_1(X, A, s)
File "/usr/lib/python2.7/dist- packages/scipy/sparse/linalg/matfuncs.py", line 462, in _fragment_2_1
X[k, k] = exp_diag[k]
TypeError: only length-1 arrays can be converted to Python scalars
這似乎真的奇怪,因爲我改變的是我使用的t
的範圍。這是因爲哈密頓量是對角的嗎?一般來說,漢密爾頓主義者不會,但我也希望它能用於對角線。我真的不知道expm
的機制,所以任何幫助將不勝感激。
您可以嘗試將計算移至for循環而不是列表理解。那麼你至少可以找出它失敗的價值。 – Elliot
程序失敗的第一個數字是't = 2.12121212121'。它看起來完全是任意的......該程序不適用於't = 2.ax',其中'a> 0'。而且它根本不適用於't = 3.x' ... – anar