Почему SymPy предоставляет собственные векторы для вырожденного подпространства, которые не образуют допустимых операторPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Почему SymPy предоставляет собственные векторы для вырожденного подпространства, которые не образуют допустимых оператор

Сообщение Anonymous »

Я пытаюсь использовать SymPy для символического вычисления каждого набора операторов проекции, соответствующих собственным подпространствам каждой из матриц, определенных в списке An:

Код: Выделить всё

import numpy as np
import sympy as sp
qutritketsn = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]])
qutritketss = sp.Matrix(qutritketsn)
an = [(1/sp.sqrt(1+sp.cos(sp.pi/5)))*(sp.cos(4*sp.pi*n/5)*qutritketss.col(0)+sp.sin(4*sp.pi*n/5)*qutritketss.col(1)+sp.sqrt(sp.cos(sp.pi/5))*qutritketss.col(2)) for n in range(5)]
An = [sp.eye(3)-2*(v*v.T.conjugate()) for v in an]
Обратите внимание, что все матрицы в An должны иметь собственные значения -1, 1, 1.
Код, который мне нужен для этого заключается в следующем:

Код: Выделить всё

eigproj = []
for num in range(len(An)):
eig_stuff = An[num].eigenvects(simplify=True)
eigproj_temp = []
for i in range(len(eig_stuff)):
if eig_stuff[i][1]0)*sum([eig_mult[j] for j in range(max(i, 0))])), sum([eig_mult[j] for j in range(i+1)]))] for i in range(len(eig_mult))]
eigproj_temp = [np.outer(eigvs_temp[:, i], np.conj(eigvs_temp[:, i])) for i in range(eigvs_temp.shape[0])]
eigproj_temp1 = []
for i in dup_inds:
# sum the projectors to get the projector for the degenerate subspace
if len(i)>1:
og = np.zeros(eigproj_temp[0].shape)
for j in i:
og += eigproj_temp[j]
eigproj_temp1.append(og)
else:
eigproj_temp1.append(eigproj_temp[i[0]])

eigproj_temp1 = np.array(eigproj_temp1)
eigproj.append(eigproj_temp1)
Вот пример вывода для второго набора операторов проекции, соответствующих матрице

Код: Выделить всё

Matrix([
[0.27639320225002103036, 0.52573111211913360603, 0.80449586419071039205],
[0.52573111211913360603, 0.61803398874989484820, -0.58450045893897621288],
[0.80449586419071039205, -0.58450045893897621288, 0.10557280900008412144]
])
с использованием SymPy с точностью до 20 значений:

Код: Выделить всё

# For eigenvalue -1
Matrix([
[0.36180339887498948482, -0.26286555605956680301, -0.40224793209535519602],
[-0.26286555605956680301, 0.19098300562505257590, 0.29225022946948810644],
[-0.40224793209535519602, 0.29225022946948810644, 0.44721359549995793928]
])

# For degenerate eigenvalue 1
Matrix([
[0.89827790731256834867, 0.47552825814757678606, 0.49720578787857844011],
[0.47552825814757678606, 0.65450849718747371205, 0],
[0.49720578787857844011, 0, 0.44721359549995793928]
])
а затем с помощью NumPy:

Код: Выделить всё

# For eigenvalue -1
array([
[ 0.3618034 , -0.26286556, -0.40224793],
[-0.26286556,  0.19098301,  0.29225023],
[-0.40224793,  0.29225023,  0.4472136 ]
])

# For degenerate eigenvalue 1
array([
[ 0.6381966 ,  0.26286556,  0.40224793],
[ 0.26286556,  0.80901699, -0.29225023],
[ 0.40224793, -0.29225023,  0.5527864 ]
])
Итак, мой вопрос: почему SymPy возвращает эти конкретные собственные векторы и действительно ли проблема на моей стороне или в SymPy? Если это с моей стороны, что я здесь делаю не так? Любая помощь будет принята с благодарностью :)

Подробнее здесь: https://stackoverflow.com/questions/791 ... form-valid
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»