Operações Sobre Matrizes
Por: Eliziane Balbi • 7/12/2019 • Trabalho acadêmico • 522 Palavras (3 Páginas) • 230 Visualizações
from numpy import*
def traco(A):
tam = len(A)
soma = 0
for i in range(tam):
soma+=A[i][i]
return soma
def transposta(A):
tam = len(A)
for i in range(tam):
for j in range(i+1,tam):
if(j != i):
aux = A[i][j]
A[i][j] = A[j][i]
A[j][i] = aux
return A
#polinomio caracteristico
def LeverrierFaddeev(A):
tam = len(A)
B = array(A)
S = zeros(((tam-1,tam,tam)))
Q = zeros(tam+1)
Q[0] = 1
Q[1] = -traco(B)
for i in range(2,tam+1):
S[i-2] = B + Q[i-1] * identity(tam)
B = dot(A, B + Q[i-1]*identity(tam))
Q[i] = -traco(B/i)
return Q[::-1], S #retorna os coeficientes do polinomio e todas as matrizes B
#se quiser so pegar o polinomio faca LeverrierFaddeev(A)[0]
def matrizOrtogonal(A,i,j):
U = identity(len(A))
U[i][i] = A[0][0]/(sqrt(A[0][0]**2 + A[i][j]**2))
U[j][j] = U[i][i]
U[j][i] = A[i][j]/(sqrt(A[0][0]**2 + A[i][j]**2))
U[i][j] = -U[j][i]
return U
def maiorElemento(A):
for i in range(1,len(A)):
for j in range(i):
if abs(A[i][j]) > 0.0001:
return 1
return 0
#autovalores
def QR(A):
cont = 0
tam = len(A)
while maiorElemento(A) and cont<1000:
Q = identity(tam)
for i in range(1,tam):
for j in range(i):
if A[i][j]!=0:
...