import math
from decimal import Decimal,getcontext

getcontext().prec = 40

def gaussPivoteamento(A,b):

    for i in range(len(A)):
        pivo = math.fabs(A[i][i])
        linha_pivo = i

        for j in range(i+1,len(A)):
            if math.fabs(A[i][i]) > pivo:
                pivo = math.fabs(A[i][i])
                linha_pivo = j
        
        if linha_pivo != i:
            linhaAuxiliar = A[i]
            A[i] = A[linha_pivo]
            A[linha_pivo] = linhaAuxiliar

            bAuxiliar = b[i]
            b[i] = b[linha_pivo]
            b[linha_pivo] = bAuxiliar

        for m in range(i + 1,len(A)):
            mult = A[m][i] / A[i][i]
            for n in range(i,len(A)):
                A[m][n] -=  mult * A[i][n]
            b[m] -= mult * b[i]
    calculaSolucao(A,b)

vetorSolucao = []
solucFinal = []

def calculaSolucao(A,b):
    
    for i in range(len(A)):
        vetorSolucao.append(0)
    linha = len(A) - 1
    while linha >= 0:
        xl = b[linha]
        coluna = len(A) - 1
        while coluna > linha:
            xl -= A[linha][coluna]*vetorSolucao[coluna]
            coluna -= 1
        xl /= A[linha][linha]
        linha -= 1
        vetorSolucao[coluna] = xl
    
    for j in range(len(vetorSolucao)):
        print("a"+str(j)+" = "+str(vetorSolucao[j]))

def crie_matriz(n_linhas, n_colunas, valor):	
	    matriz = [] # lista vazia
	    for i in range(n_linhas):
	        # cria a linha i
	        linha = [] # lista vazia
	        for j in range(n_colunas):
	            linha.append(valor)
	
	        # coloque linha na matriz
	        matriz.append(linha)
	
	    return matriz

def solucao_final(u):
    soma = 0
    for i in range(len(u)):
        for j in range(len(u)):
            aux = math.pow(u[i],j)
            soma += Decimal(vetorSolucao[j]) * Decimal(aux)
        
        solucFinal.append(soma)
        soma =0

    for j in range(0,len(u)):
        print("P("+str(j)+") = "+str(solucFinal[j]))
        
        
# Resolvendo problema particular y=p(x)=a_0+a_1z+...+a_nx^n, com p(s) polinômio interpolador

x=[Decimal(1), Decimal(2),Decimal(3)]
y=[Decimal(1), Decimal(3),Decimal(3)]

solucaoDecimal = crie_matriz(len(x),len(x),0)

for i in range(len(x)):
    mult = x[i]
    solucaoDecimal[i][0] = Decimal(1)
    solucaoDecimal[i][1] = Decimal(mult)
    for j in range(2,len(x)):
        solucaoDecimal[i][j] = Decimal(mult * mult)
        mult = solucaoDecimal[i][j]

gaussPivoteamento(solucaoDecimal,y)
print()
solucao_final(x)

print(y)

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: