Python'da karmaşık bir matrisi üstelleştirmeye çalışıyorum ve bazı sıkıntılarla karşılaşıyorum. Ben scipy.linalg.expm
fonksiyonunu kullanıyorum ve ben aşağıdaki kodu deneyin oldukça garip hata mesajı yaşıyorum: İkinci deney çalıştırıldığındaPython'da matris üssüleşmesi
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]
hatadır:
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
Bu gerçekten görünüyor Ben değiştiğimden beri garip kullanıyorum t
aralığı oldu. Hamiltoniyen diyagonal olduğundan mı? Genel olarak, Hamiltonlular olmayacak, ama ben de köşegen olanlar için çalışmasını istiyorum. Ben gerçekten expm
tekniklerini bilmiyorum, bu yüzden herhangi bir yardım büyük takdir edilecektir.
Hesaplamayı, liste anlaşması yerine bir for döngüsüne taşımayı deneyebilirsiniz. O zaman en azından hangi değerin başarısız olduğunu anlayabilirsiniz. – Elliot
Programın başarısız olduğu ilk sayı 't = 2.12121212121''dir. Tamamen keyfi görünüyor ... Program 't = 2.ax'' a '0' için çalışmıyor. Ve 't = 3.x' için işe yaramıyor ... – anar