Matriz de exponenciación en Python
Estoy tratando de exponer una matriz compleja en Python y me encuentro con algunos problemas. Estoy usando elscipy.linalg.expm
función, y tengo un mensaje de error bastante extraño cuando intento el siguiente código:
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]
El error cuando se ejecuta el segundo experimento es:
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
Esto parece realmente extraño ya que todo lo que cambié fue el rango det
Estaba usando ¿Es porque el hamiltoniano es diagonal? En general, los hamiltonianos no lo serán, pero también quiero que funcione para los diagonales. Realmente no conozco la mecánica deexpm
, por lo que cualquier ayuda sería muy apreciada.