Sei sulla pagina 1di 9

AUTORES: EDUARDO OTTE MONTEIRO E MATHEUS GONALVES FERREIRA

NETO

INTERPOLAO POR SPLINE


CBICO: APLICAO PROGRAMADA

Trabalho referente disciplina


de Clculo Numrico do 3 perodo
do curso de Engenharia de Controle e Automao Industrial do Instituto Federal
Fluminense orientado pelo professor Felipe Pereira
Realizado pelos alunos Eduardo Otte Monteiro e Matheus Gonalves Ferreira Neto
MACA,
AGOSTO / 2013

SUMRIO

1 INTRODUO ........................................................................................................ 3
2 INTERPOLAO POR SPLINE CBICO ............................................................... 5
2.1 Cdigo em C ......................................................................................................... 6
3 CONCLUSO .......................................................................................................... 8
4 REFERNCIAS BIBLIOGRFICAS ........................................................................ 9

1 INTRODUO

O mtodo de interpolao por spline cbico natural uma maneira de se descobrir


polinmios e suas curvas. Ele mais simples em sua resoluo, em relao a algumas
das frmulas antes trabalhadas, pois gera um polinmio de grau 3, independente do
nmero de pontos dados.
O desafio proposto visa descobrir os polinmios que compem uma curva, que
representa o perfil de um pato em pleno voo a partir de 21 pontos pr-definidos (conforme
Tabela 1), e dela encontra-se o polinmio correspondente. Para se conseguir um bom
ajuntamento, os pontos escolhidos so aqueles que se deseja onde a curva de
aproximao passe.

0,9

1,3

1,9

2,1

2,6

3,0

3,9

4,4

f(x) 1,3

1,5

1,85 2,1

2,6

2,7

2,4

2,15 2,05 2,1

4,7

5,0

6,0

7,0

2,25 2,3

8,0

9,2

10,5 11,3 11,6 12,0


1 12,6 13,0 13,6

2,25 1,95 1,4

0,9

0,7

0,6

0,5

0,4

0,25

Tabela 1 Dados Propostos

A curva da parte superior do pato pode ser vista em grfico e representao


abaixo:

Curva do Polinmios Interpoladores


3
2,5
2
1,5
1
0,5
0
13,3

13

12,6

12

11,6

11,3

10,5

9,2

4,7

4,4

3,9

2,6

2,1

1,9

1,3

0,9

f(x)

Figura 1 Ilustrao da Parte Superior do Pato em Curva

Figura 2 Pato e Sua Curva

2 INTERPOLAO POR SPLINE CBICO

A interpolao por spline cbico parte do princpio de todos os splines, que so


curvas definidas matematicamente por dois ou mais pontos de controle que esto nela e
so chamados de ns. Como h interpolao, h tambm a passagem em todos eles.
As frmulas podem ser observadas na figura abaixo:

Figura 3 Frmulas de Spline Cbico

2.1 Cdigo em C

#include<stdio.h>
#include<math.h>
#define MAX 21
int main(){
float
x[MAX]={0.9,1.3,1.9,2.1,2.6,3.0,3.9,4.4,4.7,5.0,6.0,7.0,8.0,9.2,10.5,11.3,11.6,12.0,12.6,13.0,13.3};
float
a[MAX]={1.3,1.5,1.85,2.1,2.6,2.7,2.4,2.15,2.05,2.1,2.25,2.3,2.25,1.95,1.4,0.9,0.7,0.6,0.5,0.4,0.25};
float h[MAX-1],alfa[MAX-1],l[MAX],mi[MAX-1],z[MAX],c[MAX],b[MAX-1],d[MAX-1];
float s[4][MAX-1];
int i,j;
for(i=0;i<=MAX-2;i++){
h[i]=x[i+1]-x[i];
}
for(i=1;i<=MAX-2;i++){
alfa[i]=(3/h[i])*(a[i+1]-a[i]) - (3/h[i-1])*(a[i]-a[i-1]);
}
l[0]=0;
mi[0]=0;
z[0]=0;
for(i=1;i<=MAX-2;i++){
l[i]=2*(x[i+1]-x[i-1]) - (h[i-1]*mi[i-1]);
mi[i]=h[i]/l[i];
z[i]=(alfa[i]-(h[i-1]*z[i-1]))/l[i];
}
l[MAX-1]=1;
z[MAX-1]=0;
c[MAX-1]=0;
for(j=MAX-2;j>=0;j--){
c[j]=z[j]-(mi[j]*c[j+1]);
b[j]=((a[j+1]-a[j])/h[j]) - (h[j]*(c[j+1]+(2*c[j])))/3;
d[j]=(c[j+1]-c[j])/(3*h[j]);
}
printf("I | X | A | B | C | D\n");
for(i=0;i<MAX;i++){
if(i<MAX-1){
printf("%d | %.2f | %.2f | %.2f | %.2f | %.2f\n", i,x[i],a[i],b[i],c[i],d[i]);
}else{
printf("%d | %.2f | %.2f\n",i,x[i],a[i]);
}
}
printf("\n\n");
for(i=0;i<MAX-1;i++){
printf("Se %.1f<=x<=%.1f=>S(x)=(%.1f)+(%.1f)(x-%.1f)+(%.1f)(x-%.1f)^2+(%.1f)(x%.1f)^3\n",x[i],x[i+1],a[i],b[i],x[i],c[i],x[i],d[i],x[i]);
}
for(i=0;i<MAX-1;i++){
s[0][i]=0; //x^0
s[1][i]=0; //x
s[2][i]=0; //x^2
s[3][i]=0; //x^3
}
for(i=0;i<MAX-1;i++){
s[0][i]+= (-b[i]*x[i])+(pow(x[i],2)*c[i])-(pow(x[i],3)*d[i])+a[i];
s[1][i]+= b[i]-(2*x[i]*c[i])+(3*d[i]*pow(x[i],2));

s[2][i]+= c[i]-(3*x[i]*d[i]);
s[3][i]+= d[i];
}
printf("\n\n");
for(i=0;i<MAX-1;i++){
printf("Se %.2f<=x<=%.2f => S(x)= (%.2f)x^3 + (%.2f)x^2 + (%.2f)x +
(%.2f)\n",x[i],x[i+1],s[3][i],s[2][i],s[1][i],s[0][i]);
}
system("pause");
}

Figura 4 Tabela e Polinmios

3 CONCLUSO

O programa em C consistiu em duas etapas para a resoluo dos polinmios


pelo mtodo de spline cbico. Em sua primeira parte, foi necessrio encontrar uma
tabela com base nos dados fornecidos que formam a curva do pato. E, ento, a
partir dela pde ser feita a segunda parte, que a dos polinmios interpoladores.
Foram encontrados 20 polinmios, obtidos pelos 20 intervalos, na segunda
etapa do programa. Eles podem ser vistos na execuo do programa, na imagem
abaixo:

Figura 5 Os 20 Polinmios Desenvolvidos

4 REFERNCIAS BIBLIOGRFICAS

Disponvel em:
<http://www.mat.ufrgs.br/~guidi/grad/MAT01032/calculo_numerico.cap4.pdf>
Disponvel em: <http://pessoal.utfpr.edu.br/angelabarboza/arquivos/Spline.pdf >
Disponvel em: <http://www.dca.ufrn.br/~meneghet/FTP/MCEC/Transp05.pdf>

Potrebbero piacerti anche