Я довольно новичок в Python и пытаюсь преобразовать код Matlab в Python. У меня есть работающий алгоритм Ланцоша в Python:
import numpy as np
import scipy as sp
from math import factorial
from numpy import *
from pylab import *
def Lanczos(A,m):
[n,k] = size(A)
V = zeros[k, m+1]
V[:,2]= rand[k,1]
V[:,2]=V[:,2]/norm[V[:,2],2]
beta[2]=0
for j in range [2: m+2]:
w=A*V[:,j] - beta[j]*V[:,j-1]
alpha[j]=w.transpose()*V[:,j]
w = w - alpha[j]*V[:,j]
beta[j+1]=norm[w,2]
V[:,j+1]= w/beta[j+1]
T=sparse[m+1,m+1]
disp("approximation quality is: ", (norm(V*T*V.transpose()-A)))
for i in range [2: m+1]:
T[i-1,i-1]=alpha[i]
T[i-1,i]=beta[i+1]
T[i,i-1]=beta[i+1]
T[m+1, m+1]=alpha[m+2]
V=V[:,2:end-1]
disp("approximating eigenvalues are: ",(eigs(T).transpose()))
, но когда я пытаюсь «проверить» диагонализацию с помощью следующей матрицы:
import numpy as np
import scipy as sp
from math import factorial
from numpy import *
from pylab import *
def Lanczos(A,m):
[n,k] = size(A)
V = zeros[k, m+1]
V[:,2]= rand[k,1]
V[:,2]=V[:,2]/norm[V[:,2],2]
beta[2]=0
for j in range [2: m+2]:
w=A*V[:,j] - beta[j]*V[:,j-1]
alpha[j]=w.transpose()*V[:,j]
w = w - alpha[j]*V[:,j]
beta[j+1]=norm[w,2]
V[:,j+1]= w/beta[j+1]
T=sparse[m+1,m+1]
disp("approximation quality is: ", (norm(V*T*V.transpose()-A)))
for i in range [2: m+1]:
T[i-1,i-1]=alpha[i]
T[i-1,i]=beta[i+1]
T[i,i-1]=beta[i+1]
T[m+1, m+1]=alpha[m+2]
V=V[:,2:end-1]
disp("approximating eigenvalues are: ",(eigs(T).transpose()))
def test (A,m,i):
A=rand(5,12)
A=A.dot(A.transpose()
for i in range [2:4]:
disp("runnung for" , str(i), "rounds")
Lanczos(A,i)
disp("eigenvalues are", (flipud(eig(A))))
Я продолжаю получать ' неверный синтаксис 'после последнего l oop. Я думаю, что просто могу правильно применить алгоритм к матрице, но я просто не могу разобраться с этим. Спасибо за помощь!
Изображение сообщения об ошибке: