Aula Interpol a Cao
-
Upload
paulo-costa -
Category
Documents
-
view
35 -
download
1
Transcript of Aula Interpol a Cao
Interpolação Polinomial
Índice
● Polinômios● Polinômios de Lagrange● Métodos das diferenças divididas de newton
Interpolação Polinomial
● Dado um conjunto de pontos conhecidos, calcular os pontos intermediários entre o primeiro e o último ponto conhecido
Caso de uso
Hora Amostragem08:00:00 210:00:00 313:00:00 417:00:00 1
● Uma fábrica despeja dejetos no leito de um rio
● Deve-se determinar a quantidade de dejetos expelidos durante o dia
● Metodologia: amostragem de hora em hora
● Após muitas tentativas, quatro tiveram sucesso
Situação
● Temos quatro pontos, e necessitamos saber uma estimativa do que está sendo jogado no rio no decorrer do dia
Número de Horas
kg/horas0 22 35 49 1
Qtde Poluentes
Pontos Disponíveis
Variação Constante
Variação Linear
Interpolação Polinomial
Interpolação Polinomial
Interpolação Polinomial
Interpolação Polinomial
● Pode ser resolvido usando eliminação de Gaus
p é único
● Problema: é computacionalmente custoso● Deve-se encontrar um meio mais barato
Polinômios de Lagrange● Dado um conjunto de k+1 pontos
onde todos os xj são distintos
o polinômio interpolador de Lagrange é a combinação linear
das bases polinômicas de Lagrange
L
Polinômios Lagrange
L
Polinômios de Lagrange
p(x) L
Diferenças Divididas de Newton
Diferenças Divididas de Newton
Diferenças Divididas de Newton
Diferenças Divididas de Newton
Diferenças Divididas de Newton
Retas
Interpolante linear por partes
* Primeiro algoritmo *f[i],x[i], i=0, 1, ..., ng: resultado da interpolaçãoz: produto de fatoresxa: x *valor da interpolação a ser calculado
g=0;Para i<-0 até n z=1.0; Para j<-0 até n Se (i!=j) z=z*(xa-x[j]/(x[i]-x[j]); g=g+z*f[i];
Lagrange
//Algoritmo em linguagem C#include <stdio.h>#include <math.h>#define TRUE 1/* n: número do último ponto (n+1 = número de dados de entrada)f(i), x[i]: dados de entrada dados (i começa em 0)yans: resultado finalxa: x valor de entrada para o qual a interpolação é calculada */main(){ int i, j, kk; float xa, yans, z; static n = 3; /* n+1 é o número de pontos de entrada */ /*As próximas duas linhas defina os pontos para ser usados na interpolação */ static float x[11]={1., 2. , 3., 4.}; static float f[11]={.671, .620, .567, .512}; printf ("Interpolacao de Lagrange\n"); printf("Dados utilizados\n"); printf("i x(i) f(i) \n" ); for (i=0; i<=n; i++) printf("%d %g %g \n", i, x[i], f[i] );
while (TRUE) { printf( "\nEntrada x ? "); scanf("%f", &xa ); if (!(x[0]<= xa && xa <= x[n]) ) printf("(Atencao: x é uma extrapolacao do intervalo.)\n" ); for (i =0; i<=n; i++) { z=1.0; for (j=0;j<=n;j++) { if (i != j) z=z*(xa - x[j]) / (x[i] - x[j]); } yans= yans + z*f[i]; } printf("Resposta: g( %g) = %g \n", xa, yans ); printf("\nDigite 1 para continuar, 0 para parar: "); scanf("%d", &kk); if (kk !=1) exit(0); }}
//Interpolação usando newton#define MAXN 100#define ORDER 4
real ax[MAXN],ay[MAXN],diff[MAXN+1][ORDER+1];real nr<-1.0,dr<-1.0,x,p,h,yp;inteiro i,n,j,k;
Mostrar("entre com o valor de n : ")Ler(n);Mostrar("entre com os valores na forma X e Y")Para i<-0 até n
Ler(ax[i],ay[i])
Mostrar("Entre o valor de x para o qual y é desejado : ")Ler(x)h<-ax[1]-ax[0];Para i<-0 até n-1
diff[i][1]<-ay[i+1]-ay[i]; Para j<-2; até ORDER Para i<-0 até n diff[i][j]<-diff[i+1][j-1]-diff[i][j-1]
//continuacaoi=0 Enquanto(!(ax[i]>x)) i<-i+1
i<-i-1;p<-(x-ax[i])/hyp<-ay[i]Para k<-1 até ORDER nr<-nr*p-k+1;
dr<-dr*k;yp<-yp+(nr/dr)*diff[i][k];
Mostrar(resultados)