Sei sulla pagina 1di 86

Interpolao Polinomial

Prof. Paulo R. G. Bordoni

UFRJ

Surfista, estamos assumindo todo o conhecimento adquirido no 2 grau e em Clculo I sobre as funes elementares.

Claro Mestre, seno ia ficar muito chato!

Manuel, aponte a no Help do Numpy, onde achamos as funes matemticas elementares

As funes matemticas elementares esto em Routines na Referncia do Numpy. Clique em Mathematical functions, Surfista.

Elas esto classificadas em diversos tpicos. Vou separar os de interesse imediato.

Logo de cara vemos as funes trigonomtricas.

Em seguida as funes hiperblicas.

Depois as exponenciais e logartmicas.

Da Miscelnea, ao final, separei algumas..

Mas, praticamente todas, essas funes j esto na biblioteca math de Python.


Por qu so duplicadas em Numpy?

Porque em Numpy acrescentou elas a vetorizao e a difuso. Agora elas podem receber arrays como argumentos, etc.

bvio que clicando em sin, chegamos a este help sobre a funo seno.

Fiz este programa para mostrar o grfico das funes seno e cosseno e uma combinao linear delas.

Bacana Surfista!

E assim para todas as outras funes. Escolhi a logaritmo na base neperiana.

Fiz este programa, que traa o grfico da funo exonencial, do logaritmo neperiano e da composta. Exclui x = 0, pois ln(0) no est definido.

Como a exponencial a inversa da funo logaritmo neperiano a composta a identidade y = x

Notem que y = x, faz ngulo de 45 com o eixo-x.

Isto no aparece visualmente devido s escalas dos eixos.

Ento Loirinha, vou fazer um programa parecido, com as funes elevar ao quadrado extrair a raiz quadrada.

Ento com = e = 2 , teremos = 2 = . Aqui est o help da raiz quadrada (square root).

O programa bem simples, praticamente igual ao outro!

Vejam, uma a inversa da outra.

Observem como os grficos da composta e de y = x se superpe.


S fiz para x > 0 pq. no est definida para x < 0.

Muita calma nesta hora, Surfista. Observe que 2 = , isto , NO a inversa de 2 . Isto s verdadeiro para 0.

Uma forma mais simples de trabalhar com = usar a funo absolute( ) do Numpy.

Mestre, uma outra definio para |x| 0 : = < 0 Como posso definir funes desse tipo, com expresses diferentes em cada pedao do domnio?

A Numpy fornece a funo piecewise( ) para esses casos. Cada pedao do domnio selecionado a partir de uma condio.

Eis o help para a piecewise( ). So duas listas L e F de mesmo tamanho. A cada condio lgica L[k] da lista L corresponde uma funo F[k] da lista F.

Mais detalhes sobre a piecewise( ).


Vejamos um exemplo.

No programa da prxima pgina definiremos duas funes f e g. A partir delas, usando a piecewise( ) e um valor , satisfazendo < < , construiremos o grfico abaixo, no intervalo [, ], da funo = > .

Escolhemos = 1, = 2, = 1. As funes f e g esto definidas no cdigo por = = 2 2

imperioso observar que, na piecewise, a funo g avaliada no vetor X deslocado para a direita de d-a.

Podemos obter o mesmo resultado, mais facilmente, usando a funo select( ), do Numpy.

O mesmo problema, mas agora para d = 0. Nesse caso a funo h(x) descontnua em x = 0
Mas ento essa retinha vermelha, quase vertical, perto do eixo-y, no poderia ser desenhada!

A forma de resolver esse problema inacreditavelmente simples Loirinha.

Este o grfico da funo (descontnua) definida por:


2 0.5 < 0.5 = 2 0.5 < < 3.0

Contornei em vermelho os pontos importantes do cdigo.

Agora faam alguns exerccios de utilizao das funes do mdulo Mathematical functions.

Vou estudar, parece uma dica do tipo vai cair na prova!

No deixem de visitar este site sobre funes. Vejam que belssima pgina de abertura.

Aqui esto as primeiras informaes sobre o site. O acesso gratuito.

Entretanto, meus jovens, antigamente, as coisas no eram to fceis assim!

No passado, quando no existiam mquinas de calcular (nem computadores) usvamos tabelas e interpolao (interpolar, do latim interpolare).

A interpolar uma tcnica para calcular resultados numricos associados a dados no tabelados, a partir de dados e valores vizinhos tabelados.

Comearemos com a interpolao polinomial.

Parte de uma pgina do Canon mathematicus de Vite (1579). Nela esto tabelados valores de senos, cossenos, tangentes, etc de 4 430

http://locomat.loria.fr

Rheticus foi aluno de Coprnico e o apoiou na divulgao do heliocentrismo. Em particular na publicao da obra maior de Coprnico: De revolutionibus orbium coelestium

O sistema geocntrico (Ptolomeu), a Igreja/Inquisio e o julgamento de Galileu Galilei. O heliocentrismo com Coprnico,

O livro de Coprnico, sobre o heliocentrismo.

Em 1614, no livro Mirifici Logarithmorum Canonis Descriptio, J. Napier descreve um mtodo para calcular produtos em termos de somas. Nasciam os logaritmos. O livro apresenta ainda 90 pginas com tabelas para utilizao do seu mtodo

Obtivemos essas informaes no site do Gresham College. O texto a seguir, sobre Briggs, parte da apresentao s minhas costas.

A declarao de Briggs emocionante!

O livro que Briggs escreveu. Nos logaritmos de Napier, log(1) 0.

Briggs foi um grande matemtico.

Foi o 1 Professor Saviliano de Geometria em Osford!

Que encadeamento fantstico! Percebam a importncia de boas escolas e bons Professores!

Briggs convenceu Johann Kepler sobre as vantagens da inveno de Napier. Kepler usou logaritmos para calcular as posies de Marte, o que conduziu-o a descobrir as leis do movimento planetrio.

A reputao de Kepler foi fundamental na disseminao do uso de logaritmos em toda a Europa.


Isaac Newton usou as leis de Kepler para descobrir a lei da gravidade.

Mestres, afinal de contas, para que eram utilizadas as tbuas de logaritmo?

Elas eram usadas para efetuar multiplicaes e divises, de forma rpida.

A rgua de clculo foi um instrumento analgico largamente utilizado pelos engenheiros at surgirem as mquinas de calcular cientficas nos anos 70. Elas utilizavam escalas logartmicas e as duas propriedades abaixo:

log(xy) = log(x) + log(y) log(x/y) = log(x) - log(y)

Quando d 12.717.8 ?
Seja x = 12.717.8. Ento log(x) = log(12,7) + log(17.8) = 0.103804 + 0.250420 = 0.354224. Como 0.354108 < 0.354224 < 0.356026 e, pela tabela: log(226) = 0.354108, log(227) = 0.356026, conclumos que: x est entre 226 e 227.

A soluo, usando tbuas de logaritmos, a seguinte:

Para obter um resultado mais exato, efetuamos uma interpolao linear.


0.356026 0.354224 0.354108

226

227

A equao da reta r = 0.001918 226 + 0.354108.

Para = 0.354224 ela fornecer


= 226 + 0.060480 = 226.06(0480)

Saquei Mestres, vou fazer a diviso: 30.4/12.3


Para x = 30.4/12.3 temos log(x) = log(30.4) - log(13.5) = 0.482874 - 0.130334 = 0.392969. Como 0.392697 < 0.392969 < 0.394452 e, pela tabela: log(2.47) = 0.392697 , log(2.48) = 0.394452, conclumos que: x est entre 2.47 e 2.48.

E fao a interpolao linear para obter um valor mais exato: r

0.394452

0.392969
0.392697

2.47

2.48

A equao da reta r = 0.1755 2.47 + 0.392697.

Para = 0.392969 ela fornecer


= 2.47 + 0.001550 = 2.471550

Arithmetica Logarithmica, de Briggs, foi publicada aps 1624. Obviamente, com uma calculadora, temos os resultados diretamente. Mas elas no existiam nos tempos de Brigs.

No final dos anos 70, quando fui Prof. de Clculo numrico, na Universidade Estadual de Maring, no norte do Paran, trabalhei muito com esta HP97 sob meus ps. Ganhava bem, possua uma HP45 S !

HP 67

HP 45

Agora, vamos descobrir o que h sobre interpolao polinomial no Numpy.

No achei quase nada Mestre!

De fato Surfista. O tratamento geral sobre interpolao, integrao numrica e outros tpicos est em outro pacote: o SciPy, uma abreviao para Scientific Python

Todas as informaes esto no:

As informaes no SciPy esto estruturadas da seguinte forma

Para trabalharmos, dois tpicos so fundamentais: SciPy Tutorial Reference

Esse o contedo do Tutorial

No restante de nosso curso, vamos trabalhar com os quatro marcados.

Eis o contedo de Reference. Aqui esto as informaes sobre cada classe.

Vamos comear com Interpolao.

De imediato veremos: 1. O problema de interpolao 2. Obteno da polinomial resolvendo o sistema linear de Vandermonde 3. Obteno da polinomial pelo mtodo de Lagrange, nos casos: 1. Linear 2. Quadrtico 3. Cbico

Esse o contedo sobre interpolao do livro minha frente.

O contedo do mdulo interpolate do SciPy:

Uma funo para interpolao unidimensional:

Outras funes do mdulo interpolate.

A interpolao polinomial uma tcnica para calcular resultados numricos associados a dados no tabelados, a partir de dados (e valores) vizinhos tabelados, utilizando funes polinomiais.

J fizemos isso com a tabela de logaritmos. Usamos uma reta, uma polinomial de grau 1.

O primeiro passo envolve a obteno da polinomial que passa por pontos dados. Os pares de valores tabelados.

x x0 x1

y y0 y1
y1 y0

No caso linear, os dados so dois pares de valores, dois pontos dados.

p1

x0

x1

A equao da polinomial de grau um 1 = 0 + 1 e ela deve satisfazer as condies 1 0 = 0 1 1 = 1

Portanto os coeficientes 0 e 1 so a soluo do sistema linear 0 = 0 + 1 0 1 = 0 + 1 1

Na forma matricial esse sistema linear fica 0 1. 0 0 = 1 1. 1 1 e ele tem soluo nica quando 0 1 .

No caso da tabela de logaritmos: 1. 226. 0 0.356026 = 1. 227. 1 0.354108

x x0 x1
x2

y y0 y1
y2

No caso quadrtico, os dados so trs pares de valores, trs pontos dados.

Se os trs pontos no estiverem alinhados, a polinomial ser do 2 grau e seu grfico uma parbola.

p2
y2

y0
y1 x0 x1 x2

A equao da polinomial de grau um

1 = 0 + 1 + 2 2
e ela deve satisfazer as condies 2 0 = 0 2 1 = 1 2 2 = 2

Portanto os coeficientes 0 , 1 e 2 so a soluo do sistema linear 0 = 0 + 1 0 + 2 0 2 1 = 0 + 1 1 + 2 1 2

2 = 0 + 1 2 + 2 2 2

Na forma matricial esse sistema linear fica 0 1. 0 0 2 0 1 = 1. 1 1 2 1 . 2 2 1. 2 2 2 A matriz do coeficientes desse sistema a matriz de Vandermonde. x -1.1 1.3 2.7 y 1.2 0.5 3.4 No caso da tabela ao lado, por exemplo o sistema linear fica 1. 1.2 0.5 = 1. 3.4 1. 1.1 (1.1)2 1.3 0.52 2.7 3.42 0 1 2

Este programa constri a polinomial interpoladora pelos pontos dados. Ele usa a funo interp1d do mdulo scipy.interpolate.

A polinomial interpoladora, de grau 2, por 3 pontos dados.

O mesmo programa, agora com uma polinomial interpoladora de grau 3, por 4 pontos dados.

Passaremos a analisar uma forma de construir a polinomial conhecida como interpolao de Lagrange. A polinomial exatamente a mesma obtida resolvendo o sistema linear de Vandermonde.

O nome interpolao de Lagrange passou a ser usado aps uma publicao sua em 1795. Entretanto, quem a descobriu 1 foi E. Waring em 1779.

O aspecto importante reside no fato da interpoladora ser construda como uma combinao linear de uma base de n[a,b], o espao vetorial das polinomiais de grau menor ou igual a n.

Em 1[a,b], que tem dimenso 2, as funes bsicas sero nomeadas L0(x) e L1(x) e so polinomiais de grau 1.

A L0(x) a polinomial de grau 1 que satisfaz: L0(x0) = 1 e L0(x1) = 0. A L1(x) por sua vez satisfaz: L1(x0) = 0 e L1(x1) = 1.

trivial confirmar que: L0(x) = (x-x1)/(x0 -x1), L1(x) = (x-x0)/(x1 x0).

Este programa mostra: L0(x), L1(x), p(x) =y0 L0(x) + y1 L1(x) y0 L0(x), y1 L1(x)

Veja, p(x) uma combinao linear das polinomiais bsicas!

Em 2[a,b], que tem dimenso 3, as funes bsicas (tambm) sero nomeadas L0(x), L1(x) e L2(x). Elas so polinomiais de grau 2.

Elas so definidas pelas 9 condies: L0(x0) = 1, L0(x1) = 0, L0(x2) = 0

L1(x0) = 0, L1(x1) = 1, L1(x2) = 0

L2(x2) = 0, L2(x1) = 0, L2(x2) = 1

Confira que, se definirmos L0(x) pela expresso ( 1 )( 2 ) 0 = (0 1 )(0 2 ) teremos 0 0 = 1, 0 1 = 0, 0 2 = 0

As expresses para as outras duas funes bsicas so: ( 0 )( 2 ) 1 = (1 0 )(1 2 ) 2 = ( 0 )( 1 ) (2 0 )(2 1 )

Este programa gera as polinomiais da base de Lagrange do espao das funes polinomiais de grau menor ou igual a 2.

Para fazer L0(x) passar pelo ponto de coordenadas (0.3, 1.4) s multiplic-la por 1.4. Vejam na prxima transparncia.

A mesma ideia se aplica s outras duas funes bsicas: Multiplicando L1(x) por um nmero y1, a funo escalada y1 L1(x) passar pelo ponto (x1, y1); Multiplicando L2(x) por um nmero y2, a funo escalada y2 L2(x) passar pelo ponto (x2, y2).

Este programa gera a polinomial interpoladora de grau 2 que passa pelos pontos utilizando a base de Lagrange do espao das funes polinomiais de grau menor ou igual a 2. (x0, y0), (x1, y1), (x2, y2)

Marquei em vermelho a parte que gera os grficos das 3 funes bsicas escaladas e da polinomial interpoladora.

Esse o resultado de uma execuo do programa.

Tchau, at a prxima aula!

Potrebbero piacerti anche