Sunteți pe pagina 1din 6

Tema

APROXIMAREA FUNCIILOR CU POLINOAME DE


INTERPOLARE

Listingul programului
p/u algoritmul lui Neville-Aitken
#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<stdlib.h>
#include<iostream.h>
#define eps 0.001
#define pi 3.14
float function(float x)
{
float y;
y=exp(x)*sqrt(x*x+1);
return y;
}
void main()
{
clrscr();
float z,x[100],y[100],t[100],a=0.5,b=4.0,p,t1,z1,er,d;
int n,i,k,j,m=1;
printf("\nIntrodu punctul z in care se calculeaza valoarea polinomului de
interpolare(valoare de pe intervalul[0.5,4]):\n");
scanf("%f",&z);
printf("%d)",m);
printf("Introdu gradul polinomului de interpolare:\n");
scanf("%d",&n);
printf("\n");
for(i=0;i<=n;i++)
{
t[i]=-cos((2*i+1)*pi/(2*n+2));
x[i]=(b+a)/2+t[i]*(b-a)/2;
}
for(i=0;i<=n;i++)
{
y[i]=function(x[i]);
}
for(i=0;i<=n;i++)
{
printf("x%d=%f
}

f(x%d)=%f\n",i,x[i],i,y[i]);

z1=function(z);
er=-1; t1=y[0];
for(i=1;i<=n;i++)
{
for(k=i;k>=1;k--)
{
j=k-1;
y[j]=y[k]+(y[k]-y[j])*(z-x[i])/(x[i]-x[j]);
}
d=fabs(y[0]-t1);
t1=y[0];

if(d<eps){
er=eps;
p=y[0];
break;
}
else{
if((er<0)||(d<er)){
}
}

er=d;
p=y[0];

printf("\n\nPunctul in care se calculeaza valoarea polinomului de


interpolare: z=%f\n",z);
printf("Valoarea polinomului de interpolare in punctul z este: %f\n",p);
printf("Valoarea functiei in punctul z este: f(z)=%f\n",z1);
printf("Cea mai buna exactitate posibila: %f\n",er);
double z2,p1,x1[100],y1[100],pas=0,er1,d1,t2;
int n1,k1;
m=1;
printf("\n\n\n%d)",m);
printf("Introdu gradul polinomului de interpolare:\n");
scanf("%d",&n1);
printf("\n");
pas=(b-a)/n1;
for(i=0;i<=n1;i++)
{
x1[i]=a+(pas*i);
}
for(i=0;i<=n1;i++)
{
y1[i]=function(x1[i]);
}
for(i=0;i<=n1;i++)
{
printf("x%d=%f
}

f(x%d)=%f\n",i,x1[i],i,y1[i]);

z2=function(z);
er1=-1; t2=y1[0];
for(i=1;i<=n1;i++)
{
for(k1=i;k1>=1;k1--)
{
j=k1-1;
y1[j]=y1[k1]+(y1[k1]-y1[j])*(z-x1[i])/(x1[i]-x1[j]);
}
d1=fabs(y1[0]-t2);
t2=y1[0];
if(d1<eps){
er1=eps;
p1=y1[0];
break;
}
else{

if((er1<0)||(d1<er1)){
er1=d1;
}
}

p1=y1[0];

printf("\n\nPunctul in care se calculeaza valoarea polinomului de


interpolare: z=%f\n",z);
printf("Valoarea polinomului de interpolare in punctul z este: %f\n",p1);
printf("Valoarea functiei in punctul z este: f(z)=%f\n",z2);
printf("Cea mai buna exactitate posibila: %f\n",er1);
getch();
}

p/u polinomul Newton cu diferene divizate


#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<stdlib.h>
#include<iostream.h>
#define eps 0.001
#define pi 3.14
float function(float x)
{
float y;
y=exp(x)*sqrt(x*x+1);
return y;
}
void main()
{
clrscr();
float z,x[100],y[100],t[100],a=0.5,b=4.0,p,z1,E;
int n,i,k,m=1;
printf("\nIntrodu punctul z in care se calculeaza valoarea polinomului de
interpolare(valoare de pe intervalul[0.5,4]):\n");
scanf("%f",&z);
do{
printf("%d)",m);
printf("Introdu gradul polinomului de interpolare:\n");
scanf("%d",&n);
printf("\n");
for(i=0;i<=n;i++)
{
t[i]=-cos((2*i+1)*pi/(2*n+2));
x[i]=(b+a)/2+t[i]*(b-a)/2;
}

for(i=0;i<=n;i++)
{
y[i]=function(x[i]);
}
for(i=0;i<=n;i++)
{
printf("x%d=%f
}

f(x%d)=%f\n",i,x[i],i,y[i]);

z1=function(z);
for(i=1;i<=n;i++)
{
for(k=n;k>=i;k--)
{
y[k]=(y[k]-y[k-1])/(x[k]-x[k-i]);
}
}
p=y[n];
for(i=n-1;i>=0;i--)
{
p=y[i]+(z-x[i])*p;
}
E=z1-p;
if(fabs(E)>eps){ printf("\nEroarea de calcul in punctul z a polinomului de
interpolare este mai mare decit precizia data epsilon=%f\n",eps);
printf("\nIntrodu un grad mai mare pentru polinomul
de interpolare\n");
}
m++;
}while(fabs(E)>eps);
printf("\nPunctul in care se calculeaza valoarea polinomului de interpolare:
z=%f",z);
printf("\nValoarea polinomului de interpolare in punctul z este: %f",p);
printf("\nValoarea functiei in punctul z este: f(z)=%f",z1);
printf("\nEroarea in punctul z este: %f",fabs(E));

float z2,p1,E1,x1[100],y1[100],pas=0;
int n1;
m=1;

do{
printf("\n\n%d)",m);
printf("Introdu gradul polinomului de interpolare:\n");
scanf("%d",&n1);
printf("\n");
pas=(b-a)/n1;
for(i=0;i<=n1;i++)
{
x1[i]=a+(pas*i);
}

for(i=0;i<=n1;i++)
{
y1[i]=function(x1[i]);
}
for(i=0;i<=n1;i++)
{
printf("x%d=%f
}

f(x%d)=%f\n",i,x1[i],i,y1[i]);

z2=function(z);
for(i=1;i<=n1;i++)
{
for(k=n1;k>=i;k--)
{
y1[k]=(y1[k]-y1[k-1])/(x1[k]-x1[k-i]);
}
}
p1=y1[n1];
for(i=n1-1;i>=0;i--)
{
p1=y1[i]+(z-x1[i])*p1;
}
E1=z2-p1;
if(fabs(E1)>eps){ printf("\nEroarea de calcul in punctul z a polinomului de
interpolare este mai mare decit precizia data epsilon=%f\n",eps);
printf("\nIntrodu un grad mai mare pentru polinomul
de interpolare\n");}
m++;
}while(fabs(E1)>eps);
printf("\nPunctul in care se calculeaza valoarea polinomului de interpolare:
z=%f",z);
printf("\nValoarea polinomului de interpolare in punctul z este: %f",p1);
printf("\nValoarea functiei in punctul z este: f(z)=%f",z2);
printf("\nEroarea in punctul z este: %f",fabs(E1));
getch();
}

S-ar putea să vă placă și