Умножение матрицы на строку - PullRequest
0 голосов
/ 18 сентября 2018

Я пытаюсь умножить матрицу на константы, которые я определил следующим образом:

E1 = "E1"
E2 = "E2"
J = "J"

Однако тогда, когда я пытаюсь умножить их на матрицы, определенные ниже, я получаю ошибку:

# Defining the sigma functions and Identity matrices:
sigx = np.array([[0,1],[1,0]])
sigy = np.array([[0,-1j],[1j,0]])
sigz = np.array([[1,0],[0,-1]])
I1 = np.array([[1,0],[0,1]])
I2 = I1

enter image description here

# Trying to structure a Hamiltonian
H1 = np.kron(((E1)*(sigz)),I2)
H2 = np.kron((E2*(I1)),(sigz))
H3 = J*((np.kron((sigx),(sigx)))+(np.kron((sigy),(sigy))))
print(H1)
print(H2)
print(H3)
# Overall Hamiltonian Matrix 
Hs = H1 + H2 + H3
print(Hs)

enter image description here

Сценарий работает, если я не определяю E1, E2 или J заранее, как показано выше, но он работает только потому, что python автоматически присваивает им значение 1,2,3. Как получить, чтобы E1, E2 и J появлялись на выходах матричной операции?

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Для начала вот ваш код, переведенный на sympy:

import sympy as sp

I1 = I2 = sp.eye(2)

# Pauli matrices
# (there is sympy.physics.paulialgebra but I do not know how to use it)
sigx = sp.Matrix([[0, 1], [1, 0]])
sigz = sp.diag(1, -1)
sigy = sigx * sigz * sp.I

# symbolic constants
E1, E2, J = sp.symbols('E1 E2 J')

kp = sp.kronecker_product

H1 = kp(E1 * sigz, I2)
H2 = kp(E2 * I1, sigz)
H3 = J * (kp(sigx, sigx) + kp(sigy, sigy))

Hs = H1 + H2 + H3

# now we can for example compute eigen decomposition
evals, mults, evecs = zip(*Hs.eigenvects())
0 голосов
/ 18 сентября 2018

Первое размещение здесь.

Надеюсь, я не констатирую очевидное, но похоже, что вы умножаете матрицу целых чисел на строки.Я думаю, что вы должны определить константы как целые числа (или удваивается или возможно с плавающей запятой) .Вы выполняете матричное умножение, используя продукт Kronecker, но умножаете целые числа на строки, вызывая ошибку dtype (U11).

https://docs.scipy.org/doc/numpy/reference/arrays.dtypes.html

Здесь вы можете видеть, что ошибка 'U11' означает11-символьная строка Unicode с прямым порядком байтов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...