Процесс Грамма-Шмидта
Решаю задачу ортнормирование векторов в унитарном (эрмитовом пространстве). Столкнулся с несколькими трудностями. Не могли бы Вы помочь? Вот мой код для ортонормирования векторов в обычном евклидовом пространстве:
from numpy import linalg as LA
def GramSchmidt(*a):
k=len(a[0])
N=len(a);
#Система ортогональных векторов
b = [[0] * k for i in range(N)]
b[0]=a[0]
for i in range(1,N):
sum=a[i]
for j in range(0,i):
scolar_ab=0
scolar_bb=0
proj=[i for i in range(k)]
for n in range(k):
scolar_ab+=b[j][n]*a[i][n]
scolar_bb+=b[j][n]*b[j][n]
for n in range(k):
proj[n]=(scolar_ab/scolar_bb)*b[j][n]
for n in range(k):
sum[n]-=proj[n]
b[i]=sum
#Система ортонормированных векторов
e = [[0] * k for i in range(N)]
for i in range(0,N):
LA.norm(b[i])
e[i]=b[i]/LA.norm(b[i])
print("Система ортогональных векторов: ", b)
print("Система ортонормированных векторов: ", e)
return e;
N = int(input("введите число векторов "))
A = []
for i in range(N):
A.append(list(map(int, input().split())))
print("Исходные векторы: ", A)
GramSchmidt(*A)
k=input("Нажмите на любую кнопку, чтобы закрыть программу ")
Собственно вот с какими трудностями я столкнулся.
1)Как мне сделать, чтобы элементами векторов были комплексные числа? То есть чтобы я сюда, при
for i in range(N):
A.append(list(map(int, input().split())))
Например (1, 1, 1j) Пробовал писать 1j(как мнимая единица) но питон не читает
2)Почему-то при выводе ортонормированных векторов, то есть e:
ВЫдаются массивы вместе со словом array
Система ортонормированных векторов: [array([0.30151134, 0.30151134, 0.90453403]), array([ 0.88077101, 0.27524094, -0.38533732])]
Как его можно убрать? Ведь с вектором b не выдается со словом array