Prévia do material em texto
Sistemas de equações lineares e ajustes
de curvas em Python
Você vai estudar sistemas de equações lineares e técnicas de ajuste de curvas, utilizadas em engenharia e
ciências. Também aprenderá métodos para solução de sistemas lineares, interpolação polinomial e ajuste
de funções pelo método dos mínimos quadrados. As técnicas apresentadas serão implementadas em
Python.
Prof. Tiene Andre Filisbino
1. Itens iniciais
Preparação
Antes de iniciar o estudo deste conteúdo, pesquise e acesse as páginas indicadas para a execução dos
scripts:
Python
Jupyter
Google
Objetivos
Aplicar os métodos diretos de eliminação de Gauss e decomposição LU para resolução de sistemas
lineares.
Aplicar os métodos iterativos Jacobi e Gauss-Seidel para resolução de sistemas lineares.
Aplicar os métodos de Lagrange e Newton para encontrar polinômios interpoladores.
Aplicar o método dos mínimos quadrados para ajustar funções lineares e polinomiais a conjuntos de
dados.
Introdução
Olá! Boas-vindas! Neste vídeo, apresentaremos os sistemas lineares e sua resolução por meio de métodos
diretos e iterativos. Além disso, trataremos da interpolação polinomial e de métodos para encontrar polinômios
interpoladores. Por fim, abordaremos o método dos mínimos quadrados para ajuste de funções polinomiais.
Conteúdo interativo
Acesse a versão digital para assistir ao vídeo.
•
•
•
•
•
•
•
1. Métodos diretos para resolução de sistemas lineares
Fundamentos dos sistemas de equações lineares
Neste vídeo, apresentaremos o que é uma equação linear e um sistema de equações lineares. Para isso,
exploraremos sua representação matricial e as ferramentas para a resolução. Conheceremos ainda os tipos de
solução possíveis: única, infinitas ou nenhuma.
Conteúdo interativo
Acesse a versão digital para assistir ao vídeo.
Antes de explorar os algoritmos computacionais e os métodos de resolução, é importante construir uma base
sólida sobre equações lineares e sistemas lineares. Vamos entender o que são esses sistemas, como podem
ser representados e quais tipos de soluções podem apresentar.
Uma equação linear é aquela em que cada termo envolve, no máximo, uma variável, que aparece sempre
elevada à primeira potência. Por exemplo, é uma equação linear com três incógnitas
. Já equações como , nas quais ocorre o produto de variáveis em , ou
, em que o primeiro termo está elevado ao quadrado, não são lineares.
Um sistema de equações lineares, ou sistema linear, é um conjunto de m equações lineares com n incógnitas.
Podemos representá-lo de forma genérica como:
Na representação, vemos que:
Os coeficientes (coordenadas da linha e coluna, respectivamente) representam números reais
conhecidos os dados do problema.
As variáveis são as incógnitas que desejamos encontrar.
Os termos são os resultados de cada equação.
Resolver um sistema linear significa encontrar um conjunto de valores para as incógnitas que
satisfaça de forma simultânea todas as equações do sistema.
Confira um exemplo: considere o sistema linear com duas equações e quatro incógnitas:
•
•
•
No exemplo, é uma solução do sistema, pois, ao substituir -1 e
, as duas equações lineares são satisfeitas. Verifique!
Representação matricial
Para resolução de sistemas lineares, a notação matricial torna a manipulação mais prática e fácil quando
trabalhamos com sistemas grandes. Nesse sentido, a representação do sistema anterior pode ser escrito de
forma compacta, assim:
Em que é a matriz dos coeficientes, é a coluna das incógnitas e é a coluna dos termos
independentes:
Veja o exemplo anterior representado na forma matricial:
Já o sistema a seguir tem outra representação.
Outra forma matricial importante na resolução de sistemas lineares e muito usada nos algoritmos de solução
de sistemas é a matriz aumentada [A|b], formada pela junção da matriz A e os termos independentes b. Veja!
Vamos exemplificar essa forma matricial utilizando sistemas lineares anteriores.
pois, de acordo com a
imagem:
Forma matricial aumentada do sistema linear. Matriz dos coeficientes do sistema em
azul e vetor dos termos independentes em vermelho.
Seguindo a mesma linha, o sistema:
Tem como forma aumentada:
Tipos de solução
Um sistema linear pode apresentar 3 casos; confira.
1
Solução única
Caracteriza-se como possível e determinado. Nesse caso, existe apenas um conjunto único de
valores para as incógnitas que satisfaz o sistema.
2 Infinitas soluções
Denomina-se possível e indeterminado. Aqui, existem múltiplos conjuntos de valores que
satisfazem o sistema.
3
Nenhuma solução (impossível)
Ocorre quando não há um conjunto de valores para as incógnitas que satisfaça todas as equações
ao mesmo tempo.
Atividade 1
Na resolução de sistemas lineares, a notação matricial torna a manipulação mais prática e fácil. Considere o
seguinte sistema linear:
Sua representação matricial na forma AX=B é dada por:
A
B
C
D
E
A alternativa A está correta.
A forma matricial de um sistema linear é representada por:
é a matriz dos coeficientes, ou seja, os números que multiplicam as incógnitas nas equações:
X é o vetor coluna das incógnitas:
B é a coluna dos termos independentes:
Método de eliminação de Gauss
Neste vídeo, abordaremos o método de eliminação de Gauss para resolver sistemas lineares, demonstrando
as operações elementares entre linhas para transformar a matriz aumentada em uma forma triangular superior.
Assista!
Conteúdo interativo
Acesse a versão digital para assistir ao vídeo.
Entre os métodos diretos para resolver sistemas lineares, a eliminação de Gauss é uma das técnicas mais
tradicionais. Também chamada de escalonamento, essa metodologia transforma o sistema original em um
sistema triangular superior equivalente. A partir desse formato, a solução é obtida de forma simples por meio
da retrossubstituição.
Vamos considerar uma matriz A, :
A metodologia busca obter uma matriz , triangular superior, na qual os elementos abaixo da diagonal
principal são nulos, conforme vemos a seguir.
Para realizar essa transformação, são utilizadas operações elementares nas linhas da matriz associada, as
quais não alteram a solução do sistema original.
Operações elementares entre linhas
A transformação é realizada aplicando-se uma sequência de operações elementares sobre as linhas da matriz
aumentada do sistema. Essas operações não alteram o conjunto solução do sistema. Veja!
Troca de duas linhas : permutar a linha com a linha .
Multiplicação de uma linha por uma constante não nula : substituir a linha por
ela mesma multiplicada por .
Substituição de uma linha pela soma dela com um múltiplo de outra linha : substituir
a linha pela soma da linha com m vezes a linha .
Processo de eliminação de Gauss
Considere um sistema de equações e incógnitas. O objetivo é zerar todos os elementos
abaixo da diagonal principal da matriz de coeficientes .
Passo 1 (para a coluna 1)
Escolha o primeiro elemento da primeira linha, , como pivô. Se , troque a primeira linha com outra
linha abaixo, em que o elemento correspondente seja não nulo. Se todos os elementos da primeira coluna
forem zero, passe para a próxima coluna. Para cada linha abaixo da primeira , calcule o
multiplicador . Substitua a linha por . Isso vai zerar o elemento . Repita o
processo para todas as linhas abaixo da primeira.
Passo k (para a coluna k)
Ignore as primeiras linhas e colunas. Considere o elemento da matriz transformada como o novo
pivô. Se for zero, troque por uma linha abaixo que tenha um elemento não nulo na coluna . Para cada linha
abaixo da linha , calcule o multiplicador . Substitua a linha por
. Repita até que a matriz se torne uma matriz triangular superior . O sistema se torna
, sendo a coluna dos termos independentes transformado. No final, o sistema triangular
superior terá a forma:
•
•
•
Agora vejamos como aplicar a retrossubstituição:
Resolva a última equação para
Substitua na penúltimatodos os pontos, o ajuste de curvas ou
regressão procura uma função que represente a tendência geral de um conjunto de dados, mesmo quando há
erros ou ruídos.
Em situações práticas, costumamos nos deparar com um conjunto de dados tabelados, como
, e desejamos encontrar uma função que não precise passar por
todos os pontos, mas que descreva da melhor forma possível a relação subjacente entre e . Esse
processo é conhecido como ajuste de curvas ou regressão linear.
Considere um conjunto de pontos e o objetivo de encontrar a reta que melhor se ajusta a
esses dados. Como os pontos podem não estar perfeitamente colineares, seja por erros de medição ou por
variações naturais, é pouco provável que uma única reta passe por todos eles. Assim para cada ponto (
), a reta nos daria um valor estimado:
A diferença vertical entre o valor observado e o valor predito é o resíduo ou erro para aquele ponto:
A imagem a seguir mostra, através de um único ponto, o erro relacionado ao valor real e ao valor
estimado .
Exemplo geométrico do erro.
Uma maneira de quantificar o quão bem a reta se ajusta ao conjunto de dados é somar os quadrados desses
resíduos. Definimos a função de erro quadrático como:
O objetivo do método dos mínimos quadrados é encontrar os valores de e que minimizam a soma .
Elevar ao quadrado torna todos os erros positivos, evitando que erros positivos e negativos se cancelem. Além
disso, também penaliza erros maiores de forma mais significativa.
Para minimizar , vamos fazer uso dos conceitos de cálculo em que tomamos as derivadas parciais em
relação a e e as igualamos a zero, que é uma condição para obter os pontos críticos em cálculo que
minimiza a função. Com isso, realizamos e .
Calculando as derivadas parciais:
Igualando a zero e simplificando, obtemos o seguinte sistema de equações lineares:
é o número total de pontos. Esse é um sistema de duas equações com duas incógnitas e e
pode ser resolvido para encontrar os coeficientes da reta de melhor ajuste.
Exemplo 1
Vamos ajustar uma reta aos dados .
Note que e vamos calcular cada valor referente a e . Confira.
Substituindo os resultados no sistema linear:
Teremos
Resolvendo esse sistema por substituição, eliminação ou algum método (como eliminação de Gauss),
obtemos:
A reta de melhor ajuste é:
Forma matricial
Podemos também expressar o problema anterior de ajuste linear de forma matricial, o que é útil para
generalizações. Se temos pontos, podemos escrever cada observação como
Isso pode ser escrito como: . Note que queremos minimizar a distância entre .
Em que:
Com isso, pelo método dos mínimos quadrados para obter os parâmetros a e b na forma matricial, significa
minimizar:
Assim, derivar em relação a z , ou seja, fazendo , teremos:
Que equivale a . Com isso, se for inversível, a solução é:
Exemplo 2
Um estudante mediu a corrente ( , em Amperes) por um resistor para diferentes voltagens ( , em Volts),
obtendo a seguinte tabela:
V 2 4 6 8
I 0,4 0,9 1,1 1,5
Tabela: Medida da corrente , em relação a diferentes voltagens .
Tiene Andre Filisbino
Queremos ajustar uma reta , em que é e é . Primeiro, vamos representar nossas
matrizes:
Calculando e , teremos:
O cálculo de:
Assim
O primeiro elemento será:
Já o segundo elemento:
Com isso, o resultado final dos parâmetros a e de são , e a reta que melhor se ajusta
é:
Atividade 1
Qual é o principal objetivo do método dos mínimos quadrados ao ajustar uma reta a um conjunto
de pontos ?
A Fazer a reta passar pelo maior número possível de pontos.
B Maximizar a soma das distâncias verticais entre os pontos e a reta.
C Minimizar a soma dos quadrados das distâncias verticais, ou seja, o erro entre os pontos e a reta.
D Encontrar os coeficientes a e b que tornam a soma dos resíduos igual a zero.
E Garantir que a reta passe pelo primeiro e pelo último ponto do conjunto de dados.
A alternativa C está correta.
O MMQ busca determinar os parâmetros e de uma reta que minimizam os resíduos, ou seja, as
diferenças entre os valores observados e os valores preditos pelo modelo .
Ajuste de funções polinomiais e não polinomiais
Neste video, apresentaremos o método dos mínimos quadrados para ajustar polinômios de grau superior e
modelos lineares com funções base não polinomiais. Veja como a formulação matricial se generaliza e como
resolver o sistema de equações para encontrar os coeficientes do modelo de melhor ajuste.
Conteúdo interativo
Acesse a versão digital para assistir ao vídeo.
O método dos mínimos quadrados não se restringe a modelos lineares. Podemos estendê-lo para ajustar
polinômios de graus mais elevados ou até mesmo combinações lineares de funções não polinomiais a um
conjunto de dados. A ideia central de minimizar a soma dos quadrados dos resíduos permanece, levando a um
sistema de equações.
Ajuste função polinomial
Ocorre quando temos como entrada uma tabela de pontos de dados, para , e
desejamos determinar uma função polinomial mais próxima dos dados, considerando uma ordem do
polinômio . Essa metodologia não se limita a retas. Podemos usar o mesmo princípio dos mínimos
quadrados para ajustar funções mais complexas, como polinômios de grau :
Se queremos ajustar um polinômio de grau a pontos de dados , o resíduo para cada ponto é:
A soma dos quadrados dos resíduos é:
Para minimizar , tomamos as derivadas parciais em relação a cada coeficiente e as
igualamos a zero. Isso resultará em um sistema de equações lineares com incógnitas
.
A forma matricial para o ajuste polinomial é uma generalização direta do caso linear. O vetor de parâmetros é:
A matriz (matriz de Vandermonde) para um polinômio de grau e pontos é:
Note que cada coluna corresponde a uma potência de . A primeira coluna é de 1s (para o coeficiente
), a segunda é (para ), e assim por diante. Além disso, observe que temos incógnitas e n pontos
de dados. Logo, possuímos um sistema com mais equações que incógnitas. Assim, pelo princípio dos mínimos
quadrados, a forma matricial do sistema de equações permanece igual; veja!
E a solução é:
Que fornece os coeficientes .
Vamos a um exemplo.
Considere os dados de contágio no início da pandemia. A tabela apresenta o número de contágios mês a mês,
sendo o mês a variável e o número de contágios a variável .
x 1 2 3 4 5
y 100 300 200 400 200
Tabela: Número de contágio em relação ao mês.
Tiene Andre Filisbino
O polinômio que se deseja ajustar é uma parábola:
Note que o grau do polinômio escolhido é , e o número de pontos é .
Vamos agora representar nossas informações na forma matricial:
Calculamos:
E , e resolvemos o sistema :
Por qualquer metodologia, como eliminação de Gauss ou decomposição LU, temos que
. Nossa função polinomial ajustada é:
Essa metodologia de ajuste de funções costuma ser usada para realizar extrapolação, ou seja, predizer um
resultado futuro. Assim, os resultados dependem do modelo matemático que estamos adotando. Por exemplo,
se quiséssemos saber qual o número de pessoas contagiadas no mês seguinte para tomarmos alguma ação,
bastaria realizar a operação:
Extrapolações baseadas em modelos polinomiais podem ser sensíveis a erros e não representar tendências
futuras se fatores externos mudarem. Além disso, no problema anterior, ajustamos a função polinomial com
um polinômio de grau . No entanto, como pontos, poderíamos ajustar com um polinômio de
grau , ou seja, .
Ajuste funções não polinomiais
Às vezes, na procura de uma modelagem matemática adequada para descrever algum fenômeno natural, as
funções polinomiais não apresentam boa resposta. Dentro da ciência, é comum os dados terem semelhanças
com funções trigonométricas, devido à periodicidade, ou com funções exponenciais e logarítmicas, por causa
do crescimento.
O poder do método dos mínimos quadrados reside no fato de que ele se aplica a qualquer modelo que seja
linear nos parâmetros que queremos estimar, mesmo que as funções base envolvidas não sejam polinomiais.Considere um modelo da forma:
Na equação, são funções conhecidas de , chamadas funções base, e
são os parâmetros a serem estimados. Assim a matríz para esse caso terá colunas
formadas pelos valores das funções base . Veja!
Assim, teremos o mesmo sistema de equações já visto:
Com a seguinte solução:
As funções base poderiam ser: . O problema consiste em ajustar:
.
Embora não seja necessário resolver o sistema neste momento, a matriz A que seria aplicada aos dados do
exemplo anterior é:
Atividade 2
Considere um modelo . Ao ajustá-lo a um conjunto de pontos
, usando o método dos mínimos quadrados, qual é a dimensão da matriz A?
A n x 3
B 3 x n
C n x n
D 3 × 3
E (n-1) x 3
A alternativa A está correta.
A matriz A terá linhas, uma para cada ponto de dado, e colunas, sendo o número de parâmetros a
serem estimados. Neste caso, são 3 parâmetros: , correspondentes às 3 funções base
. Portanto, a dimensão é .
Ajuste de função polinomial com Python
Neste video, utilizaremos Python para abordar uma situação real para ajustar um modelo polinomial. Assista!
Conteúdo interativo
Acesse a versão digital para assistir ao vídeo.
Prever valores futuros a partir de dados históricos é uma das aplicações mais úteis da análise numérica. O
ajuste de funções polinomiais pelo método dos mínimos quadrados permite criar um modelo matemático que
descreve a tendência presente em um conjunto de observações. Implementar esse método em Python agiliza
os cálculos e transforma dados brutos em uma base confiável para apoiar decisões.
Vamos usar agora o poder da linguagem Python na construção do nosso modelo de ajuste de funções para
estimar um valor futuro, fazendo uso de uma base de dados. O objetivo é ajudar um agrônomo a prever como
a produção de soja irá se comportar no ano seguinte com base nos resultados da produção dos anos
anteriores.
A produção foi medida em toneladas ao final de cada safra, durante os últimos 7 anos. O agrônomo suspeita
que a produção segue uma tendência não linear em função do tempo, por conta de fatores como:
Melhoria genética
Uso de fertilizantes
Variações climáticas
O agrônomo informou em uma tabela os dados históricos; confira:
Ano 1 2 3 4 5 6 7
Produção(T) 150 200 220 300 280 350 340
Tabela: Medida de produção de soja por ano.
Tiene Andre Filisbino
Ele deseja ajustar um modelo polinomial aos dados históricos e prever a produção no 8º ano.
Para resolver, siga estes passos:
1
Passo 1
Reescreva o código a seguir em uma célula do Google Colab.
2
Passo 2
Nas linhas 5 e 6, insira os valores da tabela.
3
Passo 3
Na linha 30, insira o valor a ser estimado ou predito.
4
Passo 4
Execute.
Vamos ao código!
•
•
•
python
1. import numpy as np
2. import matplotlib.pyplot as plt
3.
4. # Dados do Exemplo 1 (Pandemia simplificado)
5. x_obs = np.array([???????])
6. y_obs = np.array([???????])
7. degree = 2 # Grau do polinômio (quadrático)
8.
9. # Montando a matriz A (Vandermonde)
10. # A = np.vstack([x_obs**0, x_obs**1, x_obs**2]).T ou
11. A = np.polynomial.polynomial.polyvander(x_obs, degree)
12.
13. # Calculando A^T A e A^T y
14. AtA = A.T @ A
15. Aty = A.T @ y_obs
16.
17. # Resolvendo para os coeficientes c = [c0, c1, c2]
18. coeffs = np.linalg.solve(AtA, Aty)
19. c0, c1, c2 = coeffs[0], coeffs[1], coeffs[2]
20.
21. print(f"Coeficientes: c0={c0:.2f}, c1={c1:.2f}, c2={c2:.2f}")
22. print(f"Equação: y = {c0:.2f} + {c1:.2f}x + {c2:.2f}x^2")
23.
24. # Para plotagem
25. x_fit = np.linspace(min(x_obs)-0.5, max(x_obs)+2, 100)
26. # y_fit = c0 + c1*x_fit + c2*x_fit**2
27. # Usando polyval para avaliar o polinômio com coeficientes na ordem c0, c1, c2...
28. y_fit = np.polynomial.polynomial.polyval(x_fit, coeffs)
29.
30. x_estimativa = ???
31.
32. y_estimativa = np.polynomial.polynomial.polyval(x_estimativa, coeffs)
33. print(f"Valor estimado de produção no 8° ano: {y_estimativa:.2f}")
34. plt.scatter(x_estimativa, y_estimativa, color='black', label='valor estimado')
35. plt.scatter(x_obs, y_obs, color='blue', label='Dados Observados')
36. plt.plot(x_fit, y_fit, color='orange', label=f'Ajuste Quadrático')
37. plt.xlabel('Mês (x)')
38. plt.ylabel('Contágios (y)')
39. plt.legend()
40. plt.title('Ajuste Polinomial Quadrático')
41. plt.grid(True)
42. plt.show()
43.
O código implementa o método dos mínimos quadrados para ajustar um polinômio quadrático aos dados.
Vamos analisar as principais etapas:
A montagem da matriz A ocorre na linha 11.
O coração do método dos mínimos quadrados, que é resolver o sistema de equações:
está nas linhas 14, 15 e 18
A extrapolação e a previsão (ou seja, a estimação do valor de entrada) ocorrem entre as linhas 30 e 32.
1.
2.
3.
Atividade 3
Um engenheiro de materiais está estudando a resistência (R) de uma nova liga metálica em função da
temperatura (T). Ele realizou um experimento e obteve os seguintes dados:
Temperatura (°C) Resistência (R)
100 5,1
200 5,8
300 6,2
400 6,5
500 6,0
O engenheiro acredita que a relação não é linear e suspeita que a resistência atinja um valor máximo em
alguma temperatura intermediária, seguindo um comportamento parabólico (quadrático).
Sua tarefa:
Use o código Python fornecido no roteiro de prática para ajustar um polinômio de grau 2 aos dados do
engenheiro.
A partir da equação do polinômio ajustado , calcule o vértice da parábola para
encontrar a temperatura em que a resistência é máxima. A fórmula para a coordenada x do
vértice de uma parábola é .
Qual é a temperatura aproximada (em °C) que maximiza a resistência da liga, segundo o seu modelo?
Chave de resposta
Passo1: Inserir os dados no código modificando as linhas 5 e 6 com os dados do problema:
x_obs = np.array([100, 200, 300, 400, 500])
y_obs = np.array([5.1, 5.8, 6.2, 6.5, 6.0])
Passo 2: Ao executar o código, a saída dos coeficientes será aproximadamente:
Coeficientes: c0=3.414, c1=0.016, c2=-0.000021
Passo 3: Calcular o vértice usando a fórmula x = -c₁ / (2c₂). Você, então, terá:
1.
2.
•
•
T_max = - (0.0161) / (2 * -0.0000214)
T_max ≈ -0.0161 / -0.0000428
T_max ≈ 376.16 °C
•
•
•
5. Conclusão
Considerações finais
O que você aprendeu neste conteúdo?
Representar sistemas lineares na forma matricial e identificar os tipos de solução.
Resolver sistemas lineares por métodos diretos, como eliminação de Gauss e decomposição LU.
Implementar métodos diretos em Python, com ou sem bibliotecas (SymPy, SciPy).
Compreender os fundamentos dos métodos iterativos (Jacobi, Gauss-Seidel) e avaliar seus critérios de
convergência.
Aplicar o conceito de interpolação polinomial em diferentes contextos.
Diferenciar interpolação de ajuste de curvas.
Utilizar o método dos mínimos quadrados para ajustar modelos lineares e polinomiais a conjuntos de
dados.
Explore +
Confira as indicações que separamos para você!
Para melhor compreensão de sistemas lineares, leia o livro Álgebra linear e suas aplicações, de David
C. Lay.
Para explorar a implementação dos códigos, acesse o livro Métodos numéricos para engenharia, de
Steven C. Chapra e Raymond P. Canale.
Acesse a documentação NumPy e SciPy e explore as funções numpy.linalg.solve, scipy.linalg.lu,
scipy.interpolate, numpy.polyfit.
Pesquise o site Matplotlib para explorar as diversas maneiras de fazer gráficos e figuras em Python.
Referências
BURDEN, R. L.; FAIRES, J. D. Análise numérica. São Paulo: Pioneira Thompson Learning, 2003.
CHAPRA, S. C.; CANALE, R. P. Métodos numéricos para engenharia. 7. ed. Porto Alegre: AMGH, 2016.
DIEGUEZ, J. P. P. Métodos de cálculo numérico. Rio de Janeiro: Ed. Fundação Ricardo Franco, 2005.
INSTITUTO DE ENGENHEIROS ELETRICISTAS E ELETRÔNICOS. Standard for Floating-Point Arithmetic. 22 Jul.
2019. Consultado na internet em: 23 nov. 2021.
RUGGIERO, M. A. G.; LOPES, V. L. R. Cálculo numérico: aspectos teóricos e computacionais. São Paulo:
Pearson Education, 1996.
1.
2.3.
4.
5.
6.
7.
•
•
•
•
STRANG, G. Álgebra linear e aplicações. 4. ed. São Paulo: Cengage Learning, 2005.
Sistemas de equações lineares e ajustes de curvas em Python
1. Itens iniciais
Preparação
Objetivos
Introdução
Conteúdo interativo
1. Métodos diretos para resolução de sistemas lineares
Fundamentos dos sistemas de equações lineares
Conteúdo interativo
Representação matricial
Tipos de solução
Solução única
Infinitas soluções
Nenhuma solução (impossível)
Atividade 1
Método de eliminação de Gauss
Conteúdo interativo
Operações elementares entre linhas
Processo de eliminação de Gauss
Passo 1 (para a coluna 1)
Passo k (para a coluna k)
Método de eliminação de Gauss-Jordan
Normalização do pivô
Eliminação acima e abaixo do pivô
Passo 1
Passo 2
Passo 3
Passo 4
Passo 5
Passo 6
Passo 7
Aplicando Gauss-Jordan em Python
Atividade 2
Decomposição LU
Conteúdo interativo
Condições para a decomposição LU
Fórmula geral para cálculo de L e U
Passo 1: Decomposição LU da matriz
Passo 2: Resolver
Passo 3: Resolver
Atividade 3
Aplicando recursos do Python na decomposição LU
Conteúdo interativo
Na primeira abordagem
Na segunda abordagem
Primeira abordagem
Passo 1
Passo 2
Passo 1
Passo 2
Atividade 4
2. Métodos iterativos para resolução de sistemas
Fundamentos dos métodos iterativos
Conteúdo interativo
Construindo a forma iterativa
Forma geral de iteração e critério de parada
Calcule o resíduo
Calcule o passo ou a correção
Obtenha a aproximação seguinte
Número máximo de iterações
Tolerância de erro (tol)
Atividade 1
Método de Jacobi
Conteúdo interativo
Convergência do método de Jacobi e critério de parada
Aplicação do método de Jacobi
Exemplo 1
Passo 1
Passo 2
Passo 3
Passo 4
Exemplo 2
Passo 1
Passo 2
Passo 3
Passo 4
Atividade 2
Aplicando recursos do Python no método de Jacobi
Conteúdo interativo
Cálculo de iteração
Critério de tolerância
Parâmetros de entrada
Chamada da função
Saídas do exemplo
Atividade 3
Método de Gauss-Seidel
Conteúdo interativo
Exemplo 1
Iteração 1
Iteração 2
Iteração 3
Exemplo 2
Primeira linha
Segunda linha
Terceira linha
Quarta linha
Iteração 1
Iteração 2
Iteração 3
Atividade 4
Aplicando recursos do Python no método de Gauss-Seidel
Conteúdo interativo
Passo 1
Passo 2
Atividade 5
3. Interpolação polinomial
Principais fundamentos
Conteúdo interativo
Funções de aproximação e interpolação
Interpolação
Ajuste de curvas (ou regressão):
Polinômio interpolador
Exemplo: Interpolação com 3 pontos (manual)
Para (1, 2)
Para (3, 7)
Para (5, 19)
Atvidade 1
Método de interpolação de Lagrange
Conteúdo interativo
Atividade 2
Aplicando recursos do Python no método de Lagrange
Conteúdo interativo
Passo 1
Passo 2
Passo 3
Atividade 3
Método de Newton
Conteúdo interativo
Polinômios nodais
Solução
Forma de Newton
Para os pontos
Para
Para
Atividade 4
Método de Newton com Python
Conteúdo interativo
Passo 1
Passo 2
Passo 3
Passo 4
Atividade 5
4. Ajuste de funções polinomiais
Método dos mínimos quadrados para modelos lineares
Conteúdo interativo
Exemplo 1
Forma matricial
Exemplo 2
Atividade 1
Ajuste de funções polinomiais e não polinomiais
Conteúdo interativo
Ajuste função polinomial
Ajuste funções não polinomiais
Atividade 2
Ajuste de função polinomial com Python
Conteúdo interativo
Passo 1
Passo 2
Passo 3
Passo 4
Atividade 3
5. Conclusão
Considerações finais
O que você aprendeu neste conteúdo?
Explore +
Referênciasequação e resolva para
Continue "subindo" e substituindo os valores já encontrados até resolver para .
A fórmula geral para a retrossubstituição é:
Vamos ver, na prática, como esse método é simples. Tomemos como exemplo o sistema linear a seguir.
Primeiro, construímos nossa matriz aumentada:
Eliminação da coluna 1:
Pivô:
Linha 2: . Assim, :
•
•
•
•
•
Linha 3: . Assim, :
A nova matriz aumentada passa a ser:
Eliminação na coluna 2:
Pivô:
Linha 3: . Assim,
Neste passo teremos nossa matriz triangular superior:
Veja agora a fase da retrossubstituição:
Logo, o conjunto solução é: .
Um ponto importante é que, na última linha, a única resposta é 3. Isso garante que o sistema tenha uma única
solução, o que o torna possível e determinado.
•
•
•
•
Considere agora outro exemplo:
A matriz aumentada será:
Confira, agora, a eliminação da coluna 1:
Pivô: }
Linha 2: . Assim, :
Linha 3: . Assim, :
A nova matriz aumentada é:
Vejamos a eliminação na coluna 2 a seguir:
Pivô:
Linha 3: . Assim,
A forma escalonada será:
•
•
•
•
•
Na fase de retrossubstituicãõo, encontramos uma equação do tipo , que é sempre verdadeira seja
qual for valor de . Isso significa que é uma variável livre e pode assumir qualquer valor real. Nesse
caso, o sistema é possível e indeterminado, possuindo infinitas soluções.
Método de eliminação de Gauss-Jordan
É uma variação da eliminação de Gauss. Enquanto a eliminação de Gauss transforma a matriz de coeficientes
A em uma matriz triangular superior U, o método de Gauss-Jordan prossegue até transformar A em uma
matriz identidade I.
Quando a matriz A da forma é transformada na matriz identidade , o sistema se torna ,
sendo o termo independente após todas as transformações. Como , a solução é .
Isso elimina a necessidade de retrossubstituição.
O processo é semelhante à fase de eliminação de Gauss, mas com duas modificações principais, confira.
Normalização do pivô
Escolhendo o pivô , divide-se toda a linha do pivô por . Isso torna o elemento pivô igual
a 1.
Eliminação acima e abaixo do pivô
Utiliza-se o pivô que é agora igual a 1 para zerar todos os outros elementos na coluna do pivô, tanto
os que estão abaixo (como no método de Gauss) quanto os que estão acima dele.
Ao final do processo para todas as colunas, a matriz na matriz aumentada terá se tornado a matriz
identidade , e a parte correspondente a será a solução .
Vamos conferir, na prática, esse processo. Considere o sistema linear:
Agora, confira o passo a passo!
Passo 1
Construir a matriz z aumentada:
Passo 2
Caso o pivô não seja 1, normalize o pivô da primeira linha: O pivô é . Vamos dividir toda a por 2:
E voilà, a nova matriz:
Passo 3
Realizar as operações abaixo do pivô (coluna 1):
Assim a nova matriz será:
Passo 4
Normalizar o pivô da 2ª linha:
Pivô (já está normalizado)
Passo 5
Eliminar acima e abaixo do pivô (coluna 2):
•
•
•
A nova matriz será:
Passo 6
Normalizar pivô da 3ª linha:
Pivô . Dividir por 7:
Nova matriz:
Passo 7
Eliminar acima do pivô da 3ª linha (coluna 3):
Assim, a matriz final na forma reduzida de Gauss-Jordan será:
•
•
•
•
•
Observe que, no método Gauss-Jordan, a solução do sistema está na última coluna (termo independente) da
nova matriz aumentada. Portanto, não é necessário realizar a substituição reversa, como ocorre no método de
Gauss. Confira!
Aplicando Gauss-Jordan em Python
Uma das facilidades da linguagem Python é o uso das bibliotecas que oferecem soluções prontas, eficientes e
de alto nível. A seguir veremos uma implementação da metodologia Gauss-Jordan na resolução de sistemas
lineares fazendo uso da biblioteca sympy.
python
1. from sympy import Matrix
2.
3. # Matriz aumentada [A | b]
4. A = Matrix([
5. [2, 1, 1, 4],
6. [4, 3, 1, 10],
7. [-2, 2, 3, -6]
8. ])
9.
10. # Aplica Gauss-Jordan
11. rref_matrix, pivots = A.rref()
12.
13. print("Matriz reduzida (forma de Gauss-Jordan):")
14. print(rref_matrix)
15.
Trata-se de uma implementação que usa o mesmo exemplo anterior e pode ser executada em uma célula do
Google Colab. Vamos entender melhor!
O primeiro passo é importar da biblioteca sympy o método Matrix, que serve para criar e manipular matrizes
simbólicas. Note que na linha 4 a variável A recebe como entrada a matriz aumentada do sistema linear,
utilizando o método Matrix. Na linha 11 usamos a função rref(), que aplica o método de Gauss-Jordan de forma
automática.
Atividade 2
Uma maneira de resolver um sistema linear consiste em substituí-lo por outro sistema equivalente, mais
simples de resolver. Uma abordagem comum é transformá-lo em um sistema linear triangular. Considere o
sistema:
A solução desse sistema é:
A
B
C
D
E
A alternativa D está correta.
Matriz aumentada:
L2 ← L2 - 2×L1: →[0 -1 -1 -2]
L3 ← L3 - L1: →[0 1 2 3]
L3 ← L3 + L2: → [0 0 1 1]
Retrossubstituição:
Decomposição LU
Neste vídeo, apresentaremos a decomposição LU, que fatora uma matriz A em triangular inferior e triangular
superior. Iremos também aprender como essa fatoração transforma AX=B em dois sistemas mais simples.
Conteúdo interativo
Acesse a versão digital para assistir ao vídeo.
Também chamada de fatoração LU, decomposição LU é um método direto para resolver sistemas lineares.
Essa técnica é vantajosa quando vários sistemas compartilham a mesma matriz de coeficientes, mas possuem
diferentes vetores de termos independentes, pois permite reutilizar a mesma fatoração para obter as soluções
com menor esforço computacional.
Decomposição LU é uma técnica que "quebra" uma matriz quadrada em duas mais simples:
Uma matriz triangular inferior (de Lower, isto é, “inferior” em inglês) com elementos da diagonal
iguais a 1. Os elementos abaixo da diagonal são os , e acima da diagonal são zeros.
Uma matriz triangular superior (de Upper, ou seja, “superior” em inglês), em que os elementos
abaixo da diagonal são zero.
Queremos encontrar e tais que:
De forma explícita:
•
•
•
•
•
Considere o sistema . Podemos reescrevê-lo como . Para começar, definimos .
Com isso, o sistema se torna . Como é triangular inferior, resolver para encontrar é fácil
usando substituição direta.
Com o vetor definido, resolvemos para encontrar . Como é triangular superior, a solução é
simples por meio de substituição regressiva. Além disso, o determinante de é o produto dos determinantes
de e . Se tiver 1s na diagonal principal, e , que é o produto dos
elementos da diagonal de .
Condições para a decomposição LU
Para que uma matriz admita uma decomposição LU única, com a condição de que a matriz tenha todos
os elementos da sua diagonal principal iguais a 1, é necessário que todos os menores principais de sejam
diferentes de zero. O que é um menor principal?
Se é uma matriz :
é a submatriz no canto superior esquerdo de .
é a submatriz no canto superior esquerdo de .
…
é a submatriz no canto superior esquerdo de .
Com isso, se para , existe uma única matriz triangular inferior
e uma única matriz triangular superior , tal que:
Fórmula geral para cálculo de L e U
Para uma matriz de ordem , os elementos de e de são calculados da seguinte forma:
Para os elementos de (quando ):
•
•
•
•
•
Para a primeira linha de U (i=1), o somatório é vazio, então: para
Para os elementos de (quando > ,
Para a primeira coluna de , o somatório é vazio, então:
Note que, pela fórmula anterior, não é possível construir completamente a matriz L sem conhecer os
elementos da matriz U e vice-versa.
Vamos ver um exemplo.
Linha de : vimos que se , então, . Logo:
Coluna de , com
Linha de :
•
Coluna de :
Linha de :
Portanto:
Você pode verificar que . Além disso, as condições para decomposição LU são satisfeitas, pois:
.
Vamos ver a resolução de umsistema:
Agora, vamos representar esse sistema na forma matricial :
, então, , então,
Confira o passo a passo.
Passo 1: Decomposição LU da matriz
Queremos encontrar (triangular inferior com 1s na diagonal) e (triangular superior).
Primeira linha de U:
Então:
Primeira coluna de L (abaixo da diagonal):
Então:
Segunda linha de U:
Então:
Segunda coluna de L (abaixo da diagonal):
Então:
Terceira linha de U:
Então:
Assim, as matrizes e são:
Passo 2: Resolver
Nosso sistema se torna . Definimos, então, . Para isso, primeiro resolvemos
; veja!
Confira cada linha:
Da primeira linha: .
Da segunda linha: .
Da terceira linha: .
Então:
Passo 3: Resolver
Agora resolvemos :
Confira cada linha:
Da terceira linha:
Da segunda linha:
Da primeira linha:
•
•
•
•
•
•
A solução do sistema é:
Atividade 3
Considere a decomposição de uma matriz quadrada , tal que , sendo L uma matriz triangular
inferior com 1s na diagonal, e U é uma matriz triangular superior. Com base nisso, assinale a alternativa
correta:
A A decomposição só pode ser aplicada a matrizes simétricas e definidas positivas.
B A decomposição elimina a necessidade de resolver sistemas lineares.
C A decomposição exige o uso de pivoteamento parcial.
D A decomposição pode resolver sistemas lineares de forma mais eficiente, reutilizando os fatores
e .
E Após a decomposição, a solução do sistema é obtida por multiplicação de vetores.
A alternativa D está correta.
A permite resolver vários sistemas com a mesma matriz A, mas vetores b diferentes, reaproveitando
e , o que é eficiente em aplicações numéricas.
Aplicando recursos do Python na decomposição LU
Neste vídeo, apresentaremos o funcionamento da implementação da decomposição LU em Python,
abordando passo a passo para entender a construção de L e U e a resolução dos sistemas triangulares.
Assista!
Conteúdo interativo
Acesse a versão digital para assistir ao vídeo.
Vamos agora levar a decomposição LU para a prática computacional. A programação em Python permite
automatizar os cálculos e analisar o desempenho dos algoritmos em diferentes situações e escalas. O uso de
recursos computacionais é parte essencial da atuação de engenheiros, cientistas e analistas, pois oferece
eficiência, precisão e reprodutibilidade. Nesta etapa, serão abordadas tanto a implementação passo a passo
quanto a aplicação de bibliotecas especializadas.
Vamos analisar agora a aplicação da decomposição LU para resolver sistemas lineares utilizando a linguagem
Python. A técnica será explorada de duas maneiras, confira.
1
Na primeira abordagem
Implementaremos a decomposição LU manualmente, sem recorrer a bibliotecas específicas, para
compreender melhor o funcionamento e os fundamentos do método.
2
Na segunda abordagem
Vamos analisar o potencial das bibliotecas Python, que otimizam e simplificam a implementação da
decomposição LU, tornando o processo mais eficiente e menos suscetível a erros.
Primeira abordagem
Confira os primeiros passos.
Passo 1
Reproduza o código a seguir em uma célula do
Google Colab.
Passo 2
Execute o código com as entradas
predefinidas.
O código implementa a aplicação da decomposição LU. Vamos analisar as etapas fundamentais:
Os resultados, apesar de corretos, podem apresentar pequenas diferenças em relação aos cálculos
manuais devido às limitações de precisão numérica nas operações computacionais.
Os valores da matriz A e do termo independente b estão entre as linhas 4 e 8.
A construção da matriz U ocorre entre as linhas 17 e 22.
A construção da matriz L está nas linhas 23 a 27.
Os fundamentos mais importantes, que é aplicação , ocorrem entre as linhas 30 e 35. E U •x=y
ocorre entras as linhas 37 e 43.
A linha 46 é onde chamamos a aplicação com os valores iniciais.
Aqui está o código, confira!
1.
2.
3.
4.
5.
6.
python
1. import numpy as np
2.
3. # Matriz A e vetor b
4. A = np.array([[2, 1, 1],
5. [4, 3, 3],
6. [6, 5, 4]], dtype=float)
7.
8. b = np.array([5, 11, 17], dtype=float)
9.
10. # Inicializa L como identidade e U como zeros
11.
12. # Decomposição LU (sem pivoteamento)
13. def decomposicaoLU(A,b):
14. n = len(A)
15. L = np.eye(n)
16. U = np.zeros((n, n))
17. for i in range(n):
18. for j in range(i, n):
19. total = 0.0
20. for k in range(i):
21. total += L[i][k] * U[k][j]
22. U[i][j] = A[i][j] - total
23. for j in range(i+1, n):
24. total = 0.0
25. for k in range(i):
26. total += L[j][k] * U[k][i]
27. L[j][i] = (A[j][i] - total) / U[i][i]
28.
29. # Resolver L·y = b (substituição direta)
30. y = np.zeros(n)
31. for i in range(n):
32. total = 0.0
33. for j in range(i):
34. total += L[i][j] * y[j]
35. y[i] = b[i] - total
36.
37. # Resolver U·x = y (substituição retroativa)
38. x = np.zeros(n)
39. for i in range(n-1, -1, -1):
40. total = 0.0
41. for j in range(i+1, n):
42. total += U[i][j] * x[j]
43. x[i] = (y[i] - total) / U[i][i]
44. return x
45. # Resultado
46. x = decomposicaoLU(A,b)
47. print("Solução do sistema A·x = b:")
48. print(x)
49.
Agora fique com a segunda abordagem, que analisa o potencial das bibliotecas Python!
Passo 1
Reproduza o código a seguir em uma célula do
Google Colab.
Passo 2
Execute o código com os valores predefinidos.
O código estudado realiza a decomposição LU da matriz de forma semelhante ao exemplo anterior, mas
utilizando funções otimizadas fornecidas por bibliotecas especializadas. Observe que:
Na linha 2, é importado o módulo scipy.linalg, que contém os métodos lu_factor e lu_solve, utilizados para
realizar a decomposição LU da matriz A e resolver o sistema.
As chamadas aos métodos lu_factor (linha 19) e lu_solve (linha 23) representam os pontos principais da
aplicação dessa técnica com recursos da biblioteca SciPy.
Vamos ao código!
python
1. import numpy as np
2. from scipy.linalg import lu_factor, lu_solve
3.
4. def resolver_sistema_lu_scipy_simples(A, b):
5. """
6. Resolve um sistema linear Ax = b usando decomposição LU com
SciPy.
7. Esta é uma versão simplificada que foca os passos principais.
8.
9. Args:
10. A (np.ndarray): Matriz de coeficientes.
11. b (np.ndarray): Vetor de termos independentes.
12.
13. Returns:
14. np.ndarray: Vetor solução x.
15.
16. """
17. # 1. Realizar a decomposição LU com pivotação (PA = LU)
18. # lu_factor retorna uma tupla (lu_matrix, pivot_indices)
19. lu, piv = lu_factor(A)
20.
21. # 2. Resolver o sistema usando os fatores LU e os pivôs
22. # lu_solve resolve Ly = Pb e depois Ux = y
23. x = lu_solve((lu, piv), b)
24.
25. return x
26.
27. A = np.array([[2, 1, 1],
28. [4, 3, 3],
29. [6, 5, 4]], dtype=float)
30.
31. b = np.array([5, 11, 17], dtype=float)
32.
33. print("Matriz A:\n", A)
34. print("Vetor b:\n", b)
35. solucao_x = resolver_sistema_lu_scipy_simples(A, b)
36. print("\nSolução x (via LU com SciPy):")
37. print(solucao_x)
38.
Como sugestão, explore mais o código para resolver outros tipos de sistemas. Analise também a saída de
cada um para sistemas classificados como infinitas soluções e com soluções impossíveis.
Atividade 4
Considere o seguinte sistema linear:
Qual será a saída ao executar um código Python que utiliza a biblioteca scipy.linalg e os métodos lu_factor e
lu_solve para resolver um sistema por meio da decomposição LU?
A O sistema não possui solução única, o algoritmo retornará uma matriz com valores nan (não
numéricos).
B O sistema é possível e determinado, e o algoritmo retornará à solução exata: .
C O sistema possui infinitas soluções, e o algoritmo irá identificar e exibirtodas elas.
D O sistema é impossível (inconsistente), e o algoritmo retornará uma matriz com valores nan ou gerará
um erro de matriz singular.
E O sistema será resolvido normalmente com a solução aproximada: .
A alternativa A está correta.
Analisando o sistema:
Observe que a segunda equação é o dobro da primeira:
Portanto, as duas primeiras equações apresentam dependência linear. Isso torna o sistema possível e
indeterminado, ou seja, com infinitas soluções. Com isso, ao aplicar lu_factor, o algoritmo não identifica de
forma explícita infinitas soluções. Logo ao aplicar lu_solve, o SciPy costuma retornar nan ou emite um aviso
de matriz singular do tipo: “Não exibe ‘todas as soluções infinitas’". E a saída será:
Solução: [nan nan nan]•
Ou:
LinAlgWarning: Diagonal number 3 is exactly zero. Singular matrix.•
2. Métodos iterativos para resolução de sistemas
Fundamentos dos métodos iterativos
Neste vídeo, abordaremos a base dos métodos iterativos para sistemas lineares e como transformar AX=B na
forma iterativa. Iremos também explorar o conceito de vetor resíduo, a importância da matriz de iteração M e
os critérios de parada.
Conteúdo interativo
Acesse a versão digital para assistir ao vídeo.
A resolução de sistemas lineares pode ser feita por métodos diretos, que buscam encontrar a solução exata
em um número finito de etapas. No entanto, para sistemas de grande porte ou com matrizes esparsas (com a
maioria dos elementos iguais a zero), esses métodos podem apresentar baixa eficiência em termos de tempo
de processamento e uso de memória.
Como alternativa, os métodos iterativos transformam o sistema linear original em um sistema equivalente e
aplicam um processo de aproximações sucessivas. O objetivo é obter uma solução aproximada que, sob
certas condições, converge para a solução exata do sistema inicial.
Construindo a forma iterativa
A estratégia fundamental dos métodos iterativos é transformar um sistema linear original em uma
forma equivalente , em que G é uma matriz, e h, um vetor. Ou seja, , de
maneira que a solução de seja, também, solução de . Então, a partir de uma estimativa
inicial , calculamos aproximações sucessivas. Veja!
Se o processo for bem-sucedido, a sequência se aproximará cada vez mais da solução exata
do sistema.
Uma maneira comum de obter a forma é decompor a matriz A em duas matrizes, M e N, tal que
. Assim, se torna: , em que, realizando a distributividade, teremos
, que é equivalente a . Se M for uma matriz invertível, podemos multiplicá-la
em ambos os lados da última expressão . Como , chegamos a:
Comparando , temos e . A escolha de M define o método iterativo
específico. A equação é a base para nossos métodos iterativos. Sabemos que
, já que . Substituindo na equação iterativa , teremos:
Note que a equação nos diz que, para obter uma nova estimativa de , pegamos a
estimativa atual de e somamos um termo de correção, . O termo tem um
significado muito importante. Ele representa o quão "distante" certa aproximação está de satisfazer a
equação original . Se fosse a solução exata, então, ( ) seria o vetor nulo. Logo, definimos
como vetor resíduo.
Outro ponto a considerar é o vetor passo p ou vetor de correção, que aplicamos à nossa estimativa atual
para obtermos a próxima. Assim, com a definição do resíduo, a equação pode ser
reescrita como , e 0 termo é a correção aplicada. Então, a equação de iteração
ficaria da seguinte maneira:
Note que, para encontrar o passo p, precisamos resolver o sistema . A matriz deve ser escolhida
de modo que seja simples de inverter.
Forma geral de iteração e critério de parada
Com essas definições, o processo iterativo para encontrar a partir de pode ser descrito da seguinte
forma:
Dada uma aproximação ,
Calcule o resíduo
Calcule o passo ou a correção
Lembre-se
Obtenha a aproximação seguinte
As etapas de 1 a 3 serão executadas até que o critério de parada seja atingido. Entre os métodos mais usados,
podemos utilizar:
Número máximo de iterações
Define-se um limite superior para o número de iterações. Se a solução não convergir dentro desse limite, o
processo é interrompido para evitar laços infinitos.
Tolerância de erro (tol)
Compara-se a diferença entre a iteração atual e a anterior . Se essa diferença for pequena o
suficiente, considera-se que a solução convergiu. Para tal, podemos usar:
Erro absoluto: calcula-se a norma da diferença: tol.
Erro relativo: podemos usar o erro relativo: tol para evitar problemas com a
magnitude dos valores de . Ele é útil se não for próximo de zero, ok?
Para entendermos melhor o processo iterativo descrito, vamos aplicá-lo a um problema concreto usando da
linguagem Python. Considere o sistema linear:
Nosso objetivo é resolver de forma iterativa. Como ponto de partida, adotamos uma aproximação
inicial (ou "chute", digamos assim):
Note que:
Assim nossa matriz M é a matriz identidade.
•
•
Sendo:
Vamos ao código!
python
1. import numpy as np
2. A=np.array([[2.,-1.,0.],[-1.,2.,-1.],[0.,-1.,2.]])
3. b=np.array([1.,0,0])
4. def metodo_iterativo(A,b,x0,kmax):
5. #M= identidade
6. for k in range(kmax):
7. r = b - A@x0
8. p = r
9.
10.
11. x0 += p
12. return x0, k
13. x0=np.zeros(3)
14. kmax=3
15. x,k = metodo_iterativo(A,b,x0,kmax)
16. print('x=',x)
17. print('k=',k)
18.
Na linha 2 temos a matriz A. Já na linha 3, o termo b. O resíduo está sendo calculado na linha 7. Na linha 8,
usamos o fato de a matriz M ser a matriz identidade. Já na linha 11 ocorre a atualização em relação ao passo
p. Nosso critério de parada foi máxima iteração com valor kmax = 3.
Por fim, lembre-se: esse método é simples, mas, dependendo da escolha da matriz M, sua performance pode
não ser boa. Em alguns casos, o método pode até divergir. Para contornar essas limitações, existem métodos
mais eficientes e estáveis, que veremos a seguir.
Atividade 1
Se um dado satisfizer a equação original , então a solução exata de ( resulta no vetor nulo.
No entanto, usamos o método interativo quando não é viável obter essa solução exata de forma direta. Assim,
no método iterativo para resolver sistemas lineares, como é chamado o vetor ?
A Vetor correção
B Vetor resultado
C Vetor resíduo
D Vetor solução
E Vetor direção
A alternativa C está correta.
O vetor mede o quanto a aproximação atual de não satisfaz a equação . Por isso,
ele é chamado de vetor resíduo.
Método de Jacobi
Neste vídeo, exploraremos o método de Jacobi, uma técnica iterativa na qual cada incógnita é atualizada
usando apenas valores da iteração anterior. Detalharemos a decomposição da matriz A, a derivação da
fórmula iterativa e como aplicar os critérios de convergência. Não perca!
Conteúdo interativo
Acesse a versão digital para assistir ao vídeo.
Uma das técnicas iterativas mais simples para resolver sistemas lineares chama-se método de Jacobi. Ele é
útil quando o sistema é grande, esparso ou quando a decomposição direta é custosa. Sua aplicação envolve
atualizar cada variável de forma independente, utilizando os valores obtidos na iteração anterior.
Na decomposição da matriz , a escolha da matriz pode alterar a performance de um método iterativo.
O método de Jacobi, também conhecido como método de Gauss-Jacobi, é uma das formas de definir a matriz
na decomposição do sistema linear representado por:
Nesse método, a matriz é escolhida como a matriz diagonal de , denotada por . Os elementos fora
da diagonal da matriz formam o termo , em que:
é a parte triangular inferior estrita de (abaixo da diagonal).
é a parte triangular superior estrita de (acima da diagonal)
Assim, podemos escrever a matriz como:
•
•
Em termos gerais, temos:
Então, dado o sistema e substituindo a matriz por , teremos:
Que é equivalente a:
Ou seja:
Logo:
Assim, a forma iterativa de Jacobi é representada como:
Que também pode ser expressa em termos matriciais como:
Em termos práticos, considerando um sistema, para cada linha do sistema, a forma iterativa é:
Assim:
No método de Jacobi, para calcularmos o -ésimo valor , usamos os componentes no
lado direito, de modo que:
Note que estamos considerando . Logo, se efetuarmos a divisão dos elementos e por ,
e .
Em termos práticos, a expressão anterior pode ser representada como:
Convergência do método de Jacobi e critério de parada
Por se tratar de um método iterativo, é necessário estabelecer um critério de convergência, ou seja, uma
forma de medir o quão próximo estamos da solução desejada. Para isso, existem critérios práticos baseados
na estrutura da matriz transformada que podem ser utilizados para verificar a convergência do método de
Jacobi. A matriz é construída ao dividir cada elemento fora da diagonal principal de pelo elemento
correspondente da diagonal principal, linha a linha, resultando em .
Existem dois critérios usuais: o critério das linhas e o critério das colunas.
A partir da formulação , a matriz transformada .
O critério das linhas estabelece que o método de Jacobi será convergente se:
Ou seja, deve-se calcular, para cada linha, a soma dos módulos dos coeficientes fora da diagonal principal da
matriz normalizada e verificar se a maior dessas somas é inferior a 1.
Da mesma forma, o critério das colunas afirma que o método de Jacobi será convergente se:
Ou seja, deve-se calcular, para cada coluna, a soma dos módulos dos coeficientes fora da diagonal principal e
verificar se o maior desses valores é inferior a 1.
Para definir o critério de parada, o método pode ser executado até que os valores de deixem de
apresentar variações significativas entre uma iteração e outra, indicando que a solução aproximada está
estabilizada. Uma forma prática de avaliar isso é por meio do erro absoluto calculado com uma norma,
adotando, por exemplo, tol, em que tol é uma tolerância predefinida.
Aplicação do método de Jacobi
Exemplo 1
Para ilustrar a aplicação prática do método, vejamos o seguinte sistema linear:
Passo 1
Reescreva cada equação isolando a incógnita principal:
Passo 2
Verifique a convergência do sistema observando os coeficientes fora da diagonal principal na matriz
transformada. A matriz dos coeficientes é:
Então, tem-se a matriz transformada.
após a divisão dos elementos não pertencentes a diagonal principal pelos respectivos valores
com sinal trocado da diagonal principal da matriz A.
Aplicando o critério das linhas em , buscamos . Confira!
Assim, o método de Jacobi converge e podemos prosseguir.
Passo 3
Escolha um chute inicial. Vamos usar:
Passo 4
Aplique as fórmulas de atualização.
Primeira iteração:
Segunda iteração:
Terceira iteração:
E assim sucessivamente, até que os valores de e não se alterem mais entre uma iteração e outra,
indicando a aproximação da solução. Por exemplo, repetir até que:
Exemplo 2
Considere o seguinte sistema linear:
Passo 1
Reescreva cada equação isolando a incógnita principal:
Passo 2
Verifique a convergência. Mais uma vez usaremos o critério das linhas.
Nossa matriz dos coeficientes é:
A matriz transformada obtida dividindo cada elemento fora da diagonal pelo elemento da diagonal
principal da linha correspondente, ou seja, por , será:
Somando os módulos das linhas:
Linha 1:
Linha 2:
Linha 3:
, logo o método de Jacobi é convergente.
Passo 3
Escolha um chute inicial:
Passo 4
Aplique as fórmulas iterativas aplicando as fórmulas de atualização.
Primeira iteração usando .
•
•
•
Segunda iteração usando :
Terceira iteração usando :
E assim sucessivamente até que o critério de parada seja alcançado.
Atividade 2
No método iterativo, a escolha da matriz M altera o desempenho do algoritmo. No método de Jacobi para
resolução de sistemas lineares, a matriz utilizada na decomposição corresponde à
A matriz identidade.
B matriz completa dos coeficientes .
C parte triangular superior de .
D matriz diagonal de .
E matriz com todos os sinais trocados.
A alternativa D está correta.
No método de Jacobi, a matriz é escolhida como a matriz diagonal de , contendo apenas os
elementos da diagonal principal e zeros nas demais posições. Isso facilita o cálculo, pois permite isolar cada
variável em função das demais na forma iterativa.
Aplicando recursos do Python no método de Jacobi
Neste vídeo, veja o funcionamento da implementação do método de Jacobi em Python aplicando sua fórmula
iterativa.
Conteúdo interativo
Acesse a versão digital para assistir ao vídeo.
O método de Jacobi possui uma fórmula de iteração bem definida e critérios específicos para garantir a
convergência. A implementação em Python permite traduzir essa lógica em um código funcional. Embora
existam bibliotecas especializadas para resolver sistemas lineares, desenvolver a implementação do zero
ajuda a reforçar o entendimento de cada etapa, desde a atualização das variáveis até a verificação do critério
de parada.
Para resolver um sistema linear utilizando o método de Jacobi, utilizaremos o script Python a seguir. Ele foi
desenvolvido para aplicar a fórmula de iteração e verificar a convergência a cada passo. Vamos lá!
Siga as instruções para executar o código e analisar a solução obtida:
Passo 1: Reproduza o código a seguir em uma célula do Google Colab.
Passo 2: Execute-o com os valores predefinidos.
Confira o código.
•
•
python
1. import numpy as np
2.
3. def gauss_jacobi(A, b, x0, tol, max_iter):
4. n = len(b)
5. x = x0.copy()
6. for k in range(max_iter):
7. x_old = x.copy()
8. for i in range(n):
9. sum_ax = np.dot(A[i, :i], x_old[:i]) + np.dot(A[i, i+1:], x_old[i+1:])
10. x[i] = (b[i] - sum_ax) / A[i, i]
11.
12. if np.linalg.norm(x - x_old, ord=np.inf)2.00000001 -1].
O algoritmo parou porque a condição np.linalg.norm(x - x_old, ord=np.inf)para convergência e número de
iterações.
1.
2.
3.
Na linha 30 ocorre a chamada da função da metodologia, cujo retorno são os valores das variáveis
impressos na linha 31.
Atividade 5
Vimos que realizar manualmente o procedimento iterativo de Gauss-Seidel até que não haja mudanças
significativas nas variáveis pode causar custo elevado de tempo e esforço. Por esse motivo, a utilização de
ferramentas computacionais, como a linguagem Python são eficazes. Com base nesse argumento, considere o
sistema linear a seguir.
Se utilizarmos o código desenvolvido para o método de Gauss-Seidel e considerarmos o valor de tol=0,00001,
e chute inicial = [0, 0, 0, 0], qual seriam o número de iterações e a saída?
Chave de resposta
Convergiu em 9 iterações.
Solução (Seidel): [0,75289181 1,13202387 1,62140423 1,19521318]
Ao aplicar o método das linhas para verificar a convergência, obtemos max{0,6, 0,625, 0,555, 0,858} =
0,858, que é menor que 1. Portanto, o método apresenta convergência, garantindo a execução do
algoritmo. Na linha 16, serão exibidos tanto o número de iterações realizadas quanto a solução final.
4.
3. Interpolação polinomial
Principais fundamentos
Neste vídeo, apresentaremos a interpolação polinomial, uma técnica para encontrar um polinômio que passa
por um conjunto de pontos dados. Acompanhe!
Conteúdo interativo
Acesse a versão digital para assistir ao vídeo.
A interpolação é uma técnica matemática que consiste em determinar uma função, em geral, um polinômio,
que passa por um conjunto de pontos conhecidos, permitindo estimar valores intermediários. Essa abordagem
é fundamental quando se dispõe de dados discretos, mas há necessidade de prever comportamentos ou
realizar estimativas em intervalos não amostrados, oferecendo um modelo contínuo para representar
fenômenos observados e aproximar com precisão os valores desconhecidos a partir das informações
disponíveis.
Imagine a seguinte situação: um engenheiro precisa projetar a instalação de uma rede elétrica ao longo de
uma rodovia. Para isso, é preciso conhecer o perfil altimétrico do terreno em diversos pontos para calcular a
quantidade de postes e a metragem de fios necessários.
Mas o que seria exatamente levantamento altimétrico? Consiste em obter as alturas ao longo de um eixo — no
nosso caso, no eixo principal da rodovia, como ilustra a imagem a seguir.
Representação de um levantamento altímetro ao longo de uma rodovia representada
pelo eixo.
Suponha que um topógrafo tenha realizado medições de altitude (y) em várias posições (x) ao longo do eixo
principal da rodovia, conforme a tabela:
x (posição em metros) y (altitude em metros)
1 1
2 3
3 2
4 4
5 2
6 5
7 4
Tabela: Medições de altitude em diferentes posições ao longo do eixo da rodovia.
Tiene Andre Filisbino
Com esses dados, o engenheiro pode querer saber a altitude em uma posição x = 3,5 metros, em que não foi
feita uma medição direta. Como proceder? Se o comportamento da altitude fosse linear entre os pontos
medidos, uma simples média ou proporção poderia ser usada. No entanto, nem sempre os fenômenos naturais
seguem um comportamento tão simples. A interpolação polinomial permite construir um polinômio que
descreve a variação da altitude e possibilita calcular o valor desejado.
Funções de aproximação e interpolação
O objetivo da interpolação é encontrar uma função, digamos , que aproxime uma função desconhecida
da qual conhecemos apenas um conjunto de pontos: ( ), , sendo
.
Existem duas abordagens principais, confira.
Interpolação
Exige-se que a função passe por todos os pontos dados. Ou seja, para todo
. Essa abordagem é útil quando se acredita que os dados são precisos.
Ajuste de curvas (ou regressão):
Não é desejável que a função passe por todos os pontos se os dados possuem erros experimentais
ou ruídos. Em vez disso, busca-se uma função que represente a tendência geral dos dados,
minimizando de alguma forma o "erro" entre a função e os pontos.
Polinômio interpolador
A forma mais intuitiva de representar um polinômio interpolador de grau n é utilizando a base monomial:
Se temos pontos dados , que são as entradas para um problema de interpolação, e queremos
encontrar um polinômio de grau (ou menor) que passe por todos esses pontos, podemos substituir cada
par ( ) na equação do polinômio. Isso gera um sistema de equações lineares com
incógnitas com os coeficientes ; veja:
Assim, o problema se resume em encontrar os coeficientes a₀,a₁,...,aₙ , ou seja, resolvendo o sistema linear
anterior. Esse sistema pode ser resolvido utilizando métodos como eliminação de Gauss ou decomposição LU,
determinando, assim, os valores dos coeficientes que definem o polinômio desejado.
Sua representação matricial é dada por:
A matriz do sistema anterior é chamada de matriz de Vandermonde. Seu determinante sempre é diferente de
zero, isto é, o sistema possui uma única solução.
Exemplo: Interpolação com 3 pontos (manual)
Considere os pontos . Queremos encontrar um polinômio que
passe por esses pontos. Vamos, então, substituí-los, confira.
1
Para (1, 2)
2
Para (3, 7)
3
Para (5, 19)
Agora, vamos resolver esse sistema linear (por exemplo, usando eliminação de Gauss):
E construir nossa matriz aumentada.
Confira:
L2 = L2 - L1:
L3 = L3 - L1:
A nova matriz é:
Fazendo agora L3 = L3 - (2)L2: (4-4)=0,(24-16)=8,(17-10)=7, a nova matriz será:
Com isso, na última equação:
Na segunda equação:
Então:
•
•
Logo,
Na terceira equação:
Então:
Logo,
Assim, nosso polinômio interpolador é representado por:
Embora a base monomial seja simples, a resolução do sistema linear associado à matriz de Vandermonde
pode apresentar instabilidade numérica, com risco de erros de arredondamento quando há muitos pontos ou
quando eles estão mal distribuídos. Por isso, outros métodos de interpolação, como os de Lagrange e Newton,
são preferidos, pois evitam a montagem e resolução explícita desse sistema.
Atvidade 1
Considere um conjunto de 5 pontos distintos . Qual é o grau máximo do polinômio interpolador único
que passa por todos esses pontos, utilizando a abordagem da base monomial?
A 3
B 4
C 5
D 6
E Depende dos valores
A alternativa B está correta.
Para pontos distintos, existe um único polinômio interpolador de grau no máximo . Se temos 5
pontos, então, , o que implica . Portanto, o grau máximo do polinômio é 4.
Método de interpolação de Lagrange
Neste vídeo, abordaremos o método de Lagrange para interpolação polinomial. Também iremos aprender a
construir os polinômios base de Lagrange e a combiná-los para formar o polinômio interpolador único que
passa por um conjunto de pontos.
Conteúdo interativo
Acesse a versão digital para assistir ao vídeo.
Vimos que é possível encontrar um polinômio único que interpola um conjunto de pontos distintos utilizando a
base monomial e resolvendo um sistema linear. No entanto, essa abordagem pode exigir alto custo
computacional ou apresentar instabilidade numérica em casos com muitos pontos. Já o método de Lagrange
constrói o polinômio interpolador de forma direta, sem a necessidade de resolver um sistema linear.
A ideia principal da interpolação é descobrir um polinômio de grau tal que , em que
, e essa premissa será respeitada no método de Lagrange.
O polinômio interpolador de Lagrange é uma ferramenta importante na interpolação polinomial, permitindo
encontrar um polinômio único que passa por um conjunto de pontos dados ,
em que todos os são distintos.
O polinômio interpolador é dado por:
Na equação, são os polinômios de base de Lagrange, definidos como:
Se escrevermos o produtório de forma explícita, teremos:
O polinômio base tem algumas propriedades importantes. Para cada i, o polinômio Lᵢ(x) é construído de forma
que:
, pois todos os termos no produto se cancelam, exceto o próprio .
Nos demais pontos , com , pois o numerador se anula em
algum termo do produto.
Essa propriedade é crucial. Quando avaliamos em um ponto , temos:
Como epara , temos:
Portanto, passa por todos os pontos dados. Além disso, o polinômio de Lagrange tem grau no máximo
(para pontos).
Vamos aos exemplos!
Suponha os seguintes pontos: e . Vamos calcular o polinômio interpolador pelo método de
Lagrange. Observe que possuímos dois pontos, logo o grau do polinômio é , e assim, o polinômio na
forma de Lagrange é dado por:
•
•
Primeiro, vamos aos seguintes polinômios de base:
Substituindo os valores de e , o polinômio interpolador passa a ser:
Assim, o polinômio interpolador é:
Como verificação, basta substituir os valores e . Com isso, teremos:
Vamos agora realizar um exemplo com 3 pontos.
Dados os pontos (1,2),(2,3),(3,5), o polinômio interpolador será de grau n = 2n. A forma geral do polinômio de
Lagrange é:
Vamos formar os seguintes polinômios de base:
Então, o polinômio interpolador passa a ser:
Substituindo e simplificando, obtemos:
Se resolvermos a operação anterior, chegamos ao seguinte resultado:
Atividade 2
Considere os pontos (1,3) e (4,6). Qual é o polinômio interpolador de Lagrange que passa pelos dois pontos?
A
B
C
D
E
A alternativa E está correta.
Com dois pontos, o polinômio interpolador é linear: . Calculando os polinômios
de base:
Substituindo os valores de e , vemos:
Assim, o polinômio interpolador é .
Aplicando recursos do Python no método de Lagrange
Neste vídeo, apresentaremos como utilizar a biblioteca SciPy do Python para aplicar o Método de Lagrange.
Veremos como a função Lagrange simplifica a obtenção do polinômio interpolador. Por fim, aplicaremos
também a um exemplo prático. Vamos lá!
Conteúdo interativo
Acesse a versão digital para assistir ao vídeo.
Com a base teórica do método de Lagrange estabelecida, vamos agora utilizar o Python para aplicá-lo de
forma prática. Uma das vantagens em utilizar a linguagem Python para implementar a interpolação de
Lagrange é avaliar o polinômio em um ponto específico, ou até mesmo obter os coeficientes do polinômio.
Vamos usar a biblioteca SciPy, que oferece uma função conveniente Lagrange( ) que constrói o polinômio
interpolador a partir dos pontos dados.
Vamos utilizar o Python para interpolar os pontos do problema inicial que consistia em obter um levantamento
altimétrico ao longo de uma rodovia. Nosso objetivo é obter o valor altimétrico para um valor que não consta
na tabela:
X(metros) 1 2 3 4 5 6 7
Y(metros) 1 3 2 4 2 5 4
Tabela: Medições de altitude em diferentes posições ao longo do eixo da rodovia.
Tiene Andre Filisbino
Além de obtermos o valor quando , vamos debater também algumas funcionalidades usadas no
código. Para isso:
1
Passo 1
Reproduza o código a seguir em uma célula do Google Colab.
2 Passo 2
Preencha as linhas 6 e 7 substituindo “?” pelos dados da tabela.
3
Passo 3
Preencha a linha 18, substituindo "?" pelo valor de .
Vamos ao código!
python
1. import numpy as np
2. from scipy.interpolate import lagrange # Biblioteca específica
3. import matplotlib.pyplot as plt
4.
5. # Dados do Exemplo
6. x_dados = np.array([?, ?, ?, ?, ?, ?, ?])
7. y_dados = np.array([?, ?, ?, ?, ?, ?, ?])
8.
9. # Construir o polinômio de Lagrange usando scipy
10. # A função lagrange retorna um objeto numpy.poly1d
11. polinomio_lagrange = lagrange(x_dados, y_dados)
12.
13. # Coeficientes do polinômio (em ordem decrescente de potência)
14. print("Coeficientes do polinômio de Lagrange (an, ..., a1, a0):")
15. print(polinomio_lagrange.coeffs) # Ex: para ax^2+bx+c, retorna [a,b,c]
16.
17.
18. x_estimar = ??
19. y_estimado = polinomio_lagrange(x_estimar)
20. print(f"\nO valor interpolado em x = {x_estimar} é y = {y_estimado:.4f}") # Deve ser
23.75
21.
22. # Para visualização
23. x_plot = np.linspace(min(x_dados)-0.5, max(x_dados)+0.5, 100)
24. y_plot = polinomio_lagrange(x_plot)
25.
26. plt.figure(figsize=(8, 6))
27. plt.plot(x_dados, y_dados, 'o', label='Dados Originais')
28. plt.plot(x_plot, y_plot, '-', label='Polinômio de Lagrange')
29. plt.scatter([x_estimar], [y_estimado], color='red', zorder=5, label=f'Ponto Estimado
({x_estimar}, {y_estimado:.2f})')
30. plt.xlabel('x (tempo em segundos)')
31. plt.ylabel('y (posição em metros)')
32. plt.title('Interpolação pelo Método de Lagrange')
33. plt.legend()
34. plt.grid(True)
35. plt.show()
36.
Atividade 3
O problema original consiste em ajudar um engenheiro a projetar a instalação de uma rede elétrica ao longo de
uma rodovia. Para isso, ele precisa obter um levantamento altimétrico, cujos dados foram coletados conforme
a tabela:
X(metros) 1 2 3 4 5 6 7
Y(metros) 1 3 2 4 2 5 4
No entanto, surgiu a necessidade de estimar o valor altimétrico para uma posição intermediária que não
consta na tabela. Com base nos dados fornecidos e fazendo uso do código desenvolvido, qual seria o valor
altimétrico estimado para a posição x = 6,5 metros?
Chave de resposta
O valor interpolado em x = 6,5 é y = 8,4873.
Como está entre os usados na tabela, teremos uma interpolação dentro de um valor esperado.
Assim, basta ajustar a linha 18, ajustando o valor da variável x_estimar .
Método de Newton
Neste vídeo, exploraremos o método de Newton para interpolação, que utiliza diferenças divididas para
construir o polinômio. Assista e aprenda a calcular os coeficientes e a montar o polinômio na forma de
Newton.
Conteúdo interativo
Acesse a versão digital para assistir ao vídeo.
Uma abordagem alternativa para interpolação polinomial é o método de Newton, que se destaca pela
eficiência quando há necessidade de acrescentar novos pontos de dados sem refazer todo o processo. A
técnica utiliza diferenças divididas para calcular os coeficientes do polinômio interpolador.
Para entender o método de Newton, precisamos de algumas definições:
Polinômio nodal
Forma de Newton
Confira cada uma delas a seguir.
Polinômios nodais
São definidos por e dados pela seguinte expressão:
•
•
Em que fornece um conjunto de pontos, que também são chamados de nós,
.
Como exemplo, vamos determinar os polinômios nodais do seguinte conjunto de nós:
Solução
Como podemos ver, há 5 nós, logo, pela definição, teremos os seguintes polinômios nodais:
Para índice , devido ao produto alcançado, teremos:
Para os demais:
Forma de Newton
Um polinômio interpolador, como qualquer outro, pode ser expresso na conhecida forma monomial:
Já a forma de Newton, no entanto, é uma maneira de expressar esse mesmo polinômio interpolador utilizando
uma base diferente, em que os coeficientes são calculados como diferenças divididas dos
dados ou como veremos adiante, funções das diferenças divididas. Na combinação linear dos polinômios
nodais com esses coeficientes, em que são conhecidos os nós , teremos nossa representação do
polinômio interpolador de Newton. Chamaremos esse polinômio escrito na forma de Newton de .
Portanto, teremos a seguinte expressão:
•
•
•
•
•
Então, o método de Newton para interpolação é: Dado pontos ,
encontrar:
O problema busca determinar os coeficientes e, logicamente, respeitando a condição
primordial da interpolação:
Vamos acompanhar os seguintes passos para determinar os coeficientes :
Para os pontos
Para
Em que :
Para
Em que
Desenvolvendo:
Para o terceiro ponto, em que
Da mesma forma, obtemos:
Generalizando e definindo diferenças divididas:
Agora continuando e generalizando:
Podemos visualizar esses valores em uma tabela das diferenças divididas para 5 pontos na tabela:
Tabela das diferenças divididas para 5 pontos.Tiene Andre Filisbino
Lembre-se: no método de Newton o objetivo é obter os coeficientes que serão usados na combinação linear
com os polinômios nodais. Conforme a tabela são:
•
•
•
Assim, para interpolação de 5 pontos, o polinômio interpolador de Newton seria representado por:
Confira um exemplo na pratica desse método. Queremos construir o polinômio interpolador de 3 pontos (1,2),
(2,3), (4, 1). Então, nossatabela terá a seguinte representação:
Tabela da construção do polinômio de 3 pontos.
Temos que . Logo . Confira.
Assim:
Como o polinômio interpolador de Newton para 3 pontos tem a seguinte representação:
Substituindo os valores, teremos:
•
•
Ao organizar os valores em uma tabela de diferenças divididas, torna-se evidente que todo o processo de
interpolação pode ser realizado apenas preenchendo essa tabela a partir dos pontos fornecidos. A estrutura
facilita o cálculo dos coeficientes do polinômio, como mostrado na tabela a seguir.
Tabela das diferenças divididas para 3 pontos.
Vamos agora interpolar 4 pontos operando apenas os valores da tabela. Sejam eles (0,1), (1,2), (2,5), (3,10).
Nossa tabela será:
Tabela das diferenças divididas para 4 pontos.
Vemos que os valores são os da coluna x da tabela. Assim, 2 e . Novamente
. Logo .
Agora vamos preencher a coluna :
Tabela das diferencas divididas para 4 pontos: para coluna \(D^2 f\).
Confira:
Agora temos nossa tabela atualizada:
Tabela das diferenças divididas para 4 pontos: para coluna \(D^3 f\).
Agora, atualizando a coluna .
Confira a tabela atualizada.
Tabela atualizada das diferenças divididas para 4 pontos da coluna \(D^3 f\).
Por fim, para obter a última coluna :
Confira a tabela final na imagem.
Tabela final das diferenças divididas para 4 pontos.
Agora, acompanhe.
Substituindo os valores:
Como , o termo cúbico desaparece. O polinômio interpolador é:
Atividade 4
Considere os pontos (0,1), (1,3) e (2,8). Qual é o polinômio interpolador de Newton que passa por esses três
pontos?
A
B
C
D
E
A alternativa A está correta.
Passo 1: Identifique os pontos:
Passo 2: Calcule as diferenças divididas.
Passo 3: Identifique os coeficientes.
Passo 4: Monte o polinômio interpolador de Newton.
A fórmula geral do polinômio de Newton para 3 pontos é:
Substituindo:
•
•
•
Passo 5: Desenvolva o polinômio.
Método de Newton com Python
Neste vídeo, utilizaremos o método de Newton em Python aplicando-o a um problema real. O vídeo também
mostrará como criar uma função para calcular os coeficientes e outra para avaliar o polinômio. Não perca!
Conteúdo interativo
Acesse a versão digital para assistir ao vídeo.
Para aplicar o método de Newton de forma eficiente, sobretudo quando há muitos pontos, a implementação
computacional é indispensável. O poder da linguagem Python permite estimar um valor que não se encontra
no conjunto de valores dado. Nesta prática, vamos desenvolver um código Python que calcula a tabela de
diferenças divididas e, em seguida, utilizaremos os coeficientes obtidos para avaliar o polinômio interpolador
de Newton em um ponto desejado.
Lembra-se do caso do engenheiro que precisava projetar a instalação de uma rede elétrica ao longo de uma
rodovia? Vamos voltar a esse problema inicial e ajudá-lo mais uma vez. Ele agora precisa calcular a elevação
quando x = 3,5, com as observações do topógrafo:
(m) 1 2 3 4 5 6 7
(m) 1 3 2 4 2 5 4
Tabela: Medições de altitude em diferentes posições ao longo do eixo da rodovia.
Tiene Andre Filisbino
Para isso, siga os passos apresentados a seguir.
1
Passo 1
Reproduza o código a seguirvem uma célula do Google Colab.
2
Passo 2
Preencha as linhas 4 e 5 com valores da tabela e a linha 27 com o valor que quer estimar.
3 Passo 3
Execute.
4
Passo 4
Altere, na linha 41, a cor do parâmetro “color=” de 'black' para green e execute novamente.
Vamos ao código!
python
1. import numpy as np
2. import matplotlib.pyplot as plt
3.
4. x_dados = np.array([???????])
5. y_dados = np.array([???????])
6.
7. def interpolando_com_newton(x, y):
8. n = len(y)
9. F = np.zeros((n, n)) # Cria uma cópia de y para não modificar o original
10. F[:,0] = y.copy() # Primeira coluna é y_i
11.
12. for j in range(1, n):
13. for i in range(n - j):
14. F[i,j] = (F[i+1,j-1] - F[i,j-1]) / (x[i+j] - x[i])
15.
16. return F[0,:] # Retorna a primeira linha da tabela: a0, a1, ..., an
17.
18. coeficientes_newton = interpolando_com_newton(x_dados, y_dados)
19.
20. def estimando_com_newton(x_data, coeffs, x_eval):
21. n = len(coeffs)
22. result = coeffs[-1]
23. for i in range(n - 2, -1, -1):
24. result = coeffs[i] + (x_eval - x_data[i]) * result
25. return result # P(x) = a0 + a1(x-x0) + a2(x-x0)(x-x1) + ...
26. # Estimativa pontual
27. x_estimar = ???
28. y_estimado = estimando_com_newton(x_dados, coeficientes_newton, x_estimar)
29. print(f"\nO valor interpolado em x = {x_estimar} pelo método de Newton é y =
{y_estimado:.4f}")
30.
31. # Criar pontos interpolados para o gráfico
32. x_plot = np.linspace(min(x_dados), max(x_dados), 100)
33. y_plot = np.zeros_like(x_plot)
34.
35. for idx in range(len(x_plot)):
36. y_plot[idx] = estimando_com_newton(x_dados, coeficientes_newton, x_plot[idx])
37.
38. # Plotar
39. plt.scatter(x_dados, y_dados, color='red', label='Pontos dados')
40. plt.plot(x_plot, y_plot, color='blue', label='Interpolação de Newton')
41. plt.scatter([x_estimar], [y_estimado], color='black', zorder=5, label=f'Ponto
Estimado ({x_estimar}, {y_estimado:.2f})')
42. plt.xlabel('x')
43. plt.ylabel('y')
44. plt.title('Interpolação Polinomial - Método de Newton')
45. plt.legend()
46. plt.grid(True)
47. plt.show()
48.
O script implementa o método de Newton de forma eficiente, dividindo o processo em etapas:
O código constrói a tabela de diferenças divididas para encontrar os coeficientes do
polinômio. Essa operação ocorre no laço de repetição entre as linhas 12 e 14.
1.
A avaliação do polinômio em um ponto x é feita entre as linhas 20 e 26.
A visualização dos resultados ocorre entre as linhas 39 e 47.
Atividade 5
Você vai observar na prática a principal vantagem do método de Newton: a capacidade de adicionar novos
pontos de dados sem a necessidade de refazer todos os cálculos.
Entenda o contexto a seguir.
Você recebeu o conjunto inicial de dados de um experimento:
Conjunto inicial:
x_dados = np.array([1, 3, 4])
y_dados = np.array([2, 6, 8])
Novo ponto: (x=5, y=12)
Usando o código Python apresentado no roteiro, siga os passos a seguir para analisar o comportamento dos
coeficientes de Newton.
Execute a função interpolando_com_newton(x, y), usando, para isso, apenas o conjunto inicial de
dados. Anote o array de coeficientes retornado.
Adicione o Novo ponto aos seus arrays x_dados e y_dados.
Execute a função interpolando_com_newton(x, y) novamente, agora com o conjunto de dados
completo (4 pontos). Anote o novo array de coeficientes.
Com base nos resultados, o que acontece com os coeficientes que você calculou no Passo 1 quando o novo
ponto é adicionado? Explique por que essa característica representa uma vantagem computacional.
Chave de resposta
Resultado do Passo 1 (com 3 pontos):
O array de coeficientes retornado será: [2. 2. 0.]
Resultado do Passo 3 (com 4 pontos):
2.
3.
•
◦
◦
•
1.
2.
3.
•
O novo array de coeficientes retornado será: [2. 2. 0. 0.25]
Ao comparar os dois resultados, observamos que os três primeiros coeficientes ([2., 2., 0.]) permaneceram
iguais após a adição do novo ponto. Apenas um novo coeficiente (0.25) foi acrescentado ao final.
Essa característica é a principal vantagem do método de Newton: para adicionar um novo ponto, basta
calcular a nova "diagonal" da tabela de diferenças divididas, reutilizando todos os cálculos anteriores.
•
4. Ajuste de funções polinomiais
Método dos mínimos quadrados para modelos lineares
Neste video, aprenderemos o método dos mínimos quadrados (MMQ) para ajustar uma reta a um conjunto de
dados. Entenda como minimizar a soma dos quadrados dos resíduos leva a um sistema de equações cuja
solução fornece os coeficientes da reta de melhor ajuste.
Conteúdo interativo
Acesse a versão digital para assistir ao vídeo.
Ao contrário da interpolação, que busca uma função que passe por