Sunteți pe pagina 1din 4

Mthodes Numriques

Travail pratique nr.3

Thme:

LInterpolation des fonctions

Effectu par ltudiant du gr. FI-131:


Vrifi par le professeur:

Brodicico Grigore
MoraruVasile

Chiinu 2014

Scopul lucrrii:
Pentru funcia f:[a,b]R se cunoscvalorileyi=f(xi), i=0,1,,n n puncteledistincte a=x0,x1,,xn=b.
1) S se construeasc polinomul de interpolare Lagrange Ln(x) ceaproximeaz funcia dat.
2) S se calculeze valoarea funciei f(x) ntr-un punct x= utiliznd polinomul de interpolare Lagrange
Ln(x).
3) S se aproximeze valoarea funciei f(x) pentru x= cu eroarea =0,0001 (sau cu ceamai bun exactitate
posibil), calculnd polinomul de interpolare Lagrange Lm(x) pentru m<n.
4) S se compare i s se explice rezultateleobinute.
3. Date teoretice:
Polinomul de interpolare Lagarange se utilizeaz pe larg atunci cnd discretizarea intervalului [a,b] de
interpolare n subdomenii elementare este neuniform, adic intervalele au o lungime diferit.
Polinomul de interpolare al lui Lagrange se calculeaza dup formula:

Ln ( x) yi
i 0
j 0
j i

Enunul Problemei:
Se propuneexemplul :
x

-1

-1

-2

Punctul x=este: a) -0.5


Listingulprogramului:
#include<iostream>
#include<cmath>
#include<stdlib.h>
using namespace std;
float x[10]={-1,0,1,2};
float y[10]={2,-1,-2,7};
float a[10],b[10],ln[10],im;;
int i,j,ii,jj,n=4;;
int main()
{
cout<<"X: ";
for (i=0;i<n;i++)
cout<<x[i]<<" ";
cout<<"\n";

x xj

xi x j

cout<<"\nY: ";
for (i=0;i<n;i++)
cout<<y[i]<<" ";
cout<<"\n\n";
for(i=0;i<n;i++)
{ im=1;
for(j=0;j<n;j++){b[j]=0;a[j]=0;if (i!=j)im=im*(x[i]-x[j]);}
//produsul
if (i==0){ a[1]=1;a[0]=-1*x[1];} else{a[1]=1;a[0]=-1*x[0];}
b[1]=a[1];b[0]=a[0];
for(j=1;j<n;j++){
if ((i!=j)&&((j!=1)||(i!=0))){
for(ii=n;ii>=1;ii--) b[ii]=a[ii-1];
b[0]=0;
for(jj=0;jj<n;jj++){ b[jj]=b[jj]+(a[jj]*-1*x[j]);}
for(jj=0;jj<n;jj++)a[jj]=b[jj];
}
}
im=y[i]/im;
for(ii=0;ii<n;ii++){ b[ii]*=im; ln[ii]+=b[ii];}
}
cout<<"Polinomul Lagrange:\n\n";
i=n-1;
cout<<ln[i]<<"*x^"<<i;
for (i=n-2;i>0;i--)
if (ln[i]<0)cout<<ln[i]<<"*x^"<<i;else cout<<"+"<<ln[i]<<"*x^"<<i;
i=0;
if (ln[i]<0)cout<<ln[i];else cout<<"+"<<ln[i];
float v=0,f=0;
cout<<"\nVerificare:\n";
for(j=0;j<n;j++){
cout<<"Ln("<<x[j]<<")=";
f=0;
v=x[j];
for(i=0;i<n;i++)
f=f+ln[i]*pow(v,i);
cout<<f<<"\n";
}
cout<<"\n Introduceti punctul in care se va calcula valoarea functiei:";
cin>>v;
f=0;
for(i=0;i<n;i++)
f=f+ln[i]*pow(v,i);
cout<<"\nValoare functiei in punctul ("<<v<<") este "<<f;
}

Rezultatele programului:

Concluzie: In acesta lucrare de laborator ne-am familiarizat cu metoda teoretica si practica de a construi
polinomul de interpolare Lagrange Ln(x) i am calculat valoarea funciei f(x) ntr-un punct x=utiliznd
polinomul de interpolare Lagrange Ln(x).
Biografie
1. Indrumar la Laborator Nr:3
2. PROGRAMARE IN C/C++ RO ValeriuIorga Ed. Niculescu - 2003
3. http://ro.wikipedia.org/wiki/metode%numerice
4.M E T O D E D E C A L C U L NUMERIC IN AUTOMATICA 1997 S. Barbu, C. Jora, I. Popeea
5. http://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D1%82%