Я пытаюсь использовать 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)
Вот пример вывода для второго набора операторов проекции, соответствующих матрице
Итак, мой вопрос: почему SymPy возвращает эти конкретные собственные векторы и действительно ли проблема на моей стороне или в SymPy? Если это с моей стороны, что я здесь делаю не так? Любая помощь будет принята с благодарностью
Я пытаюсь использовать SymPy для символического вычисления каждого набора операторов проекции, соответствующих собственным подпространствам каждой из матриц, определенных в списке An: [code]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] [/code] Обратите внимание, что все матрицы в An должны иметь собственные значения -1, 1, 1. Код, который мне нужен для этого заключается в следующем: [code]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) [/code] Вот пример вывода для второго набора операторов проекции, соответствующих матрице [code]Matrix([ [0.27639320225002103036, 0.52573111211913360603, 0.80449586419071039205], [0.52573111211913360603, 0.61803398874989484820, -0.58450045893897621288], [0.80449586419071039205, -0.58450045893897621288, 0.10557280900008412144] ]) [/code] с использованием SymPy с точностью до 20 значений: [code]# 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] ]) [/code] а затем с помощью NumPy: [code]# 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 ] ]) [/code] Итак, мой вопрос: почему SymPy возвращает эти конкретные собственные векторы и действительно ли проблема на моей стороне или в SymPy? Если это с моей стороны, что я здесь делаю не так? Любая помощь будет принята с благодарностью :)
Я пытаюсь использовать SymPy для символического вычисления каждого набора операторов проекции, соответствующих собственным подпространствам каждой из матриц, определенных в списке An:
import numpy as np
import sympy as sp
qutritketsn = np.array([ ,...
Я хочу рассчитать собственные векторы x из системы a , используя это: a x = λ x
Проблема в том, что я не знаю, как решить собственные значения, используя Sympy.
Вот мой код. Я хочу получить некоторые значения для x1 и x2 от матрицы A
Я работаю с функцией в Python, которая строит матрицу 4 × 4 на основе входов (x1, Y1, x2, y2), и вычисляет ее собственные значения и собственные векторы, использующие np.linalg.eigh
PrettyPrint-Override > import numpy as np
Пример того, что вызывает у меня ошибку: я пытаюсь получить класс, находящийся в подпространстве имен (если вы вообще это так называете):
namespace Namespace::Namespace2
{
class A
{
public:
void DoStuff();
};
Я пытаюсь найти и представить собственные векторы цепочки осцилляторов (пружин), используя numpy в Python. Проблема в том, что полученный результат не совсем ожидаемый.
Вот мой код:
import numpy as np
import matplotlib.pyplot as plt