You are on page 1of 5

Universitatea Tehnic a Moldovei

Facultatea: Calculatoare, Informatic i Microelectronic


Catedra: Automatic i Tehnologii Informaionale

RAPORT
La lucrarea de laborator Nr.3

Disciplina Metode Numerice

Tema: Interpolarea funciilor

A efectuat studentul grupei


A verificat conf.univ.:

Tutunaru E.

Chiinu 201

1. Scopul lucrarii:
Pentru funcia f :[a,b]

R se cunosc valorile yi =f(xi), i=0,1,,n n punctele distincte a=x0, x1,

,xn=b.
1) S se construiasc polinomul de interpolare Lagrange Ln(x) ce aproximeaz 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 =10-4 (sau cu cea mai bun
exactitatea posibil), calculnd polinomul de interpolare Lagrangr Lm(x) pentu m<n.
S se compare i s se explice rezultatele date.

2. Datele propuse:
x
y

-4.2
16.3

-2.1
3.4

0.4
4.6

3.8
22.8

8.9
78.7

9.3
86.1

3. Teorie:
Fie funcia y=f(x) dat sub forma unei tabele de valori :
x

x0

x1

xn

y0

y1

yn

unde yi=f(xi) i=0,1,2,n


Exist numeroase procedee de interpolare pentru gsirea unor valori intermediare ale lui f(x)
pentru xxi, i=0,1,..n. De foarte multe ori pentru aproximarea funciilor prin interpolare se utilizeaz
polinoamele algebrice :
Pn(x)=anxn+an-1xn-1++a1x+a0
Aceasta se datoreaz c funcia f(x) poate fi aproximat foarte bine cu ajutorul curbelor a cror
reprezentare analitic sunt polinoame( teorema Weierstrass ). Pe de alt parte, valoarea polinomului
se calculeaz uor (cu ajutorul schemei lui Horner). Nu apar dificulti i la integrarea sau derivarea
polinoamelor. Pentru ca un polinom P n(x) de grad.n s interpoleze funcia dat, trebuie ca valorile
sale n nodurile x0,x1,xn s coincid cu valorile funciei, adic :
Pn(x)=yi, i=0,1,,n.
Se demonstrez c condiiile de interpolare determin un polinom unic, care se poate exprima sub
forma:
n

Ln ( x ) yi
i 0
j 0
j i

x xj

xi x j

Polinomul Ln(x) se numete polinomul de interpolare Lagarange.


2) n multe cazuri concrete de interpolare a funciei f(x) nu e necesar determinarea formei analitice
a polinomului Lagrange, ci doar calculul valorii funciei ntr-un punct dat, diferit de nodurile de
interpolare, eroarea calculelor fiind cunoscut. n aa situaii importante pentru aplicaii se va utiliza
schema lui Aitken. Procedura de calcul const n faptul, c ncepnd cu 2 puncte de interpolare,
treptat n calcule se includ noduri noi pn se va obine precizia dorit.
Algoritmul schemei Aitken presupune efectuarea urmtorilor pai :
Pe intervalul [xi , xi+1] se aplic polinomul Lagrange de interpolare liniar:
Li,i+1=yi

x xi 1
xi xi 1

Apoi Li,i+1,i+2,...,n=

+ yi+1

x xi
xi 1 xi

, unde i=0,1,...,n.

Li ,i 1,i 2,..., n 1 x0 x

,j=2,3,,n-2

Li 1,i 2,..., n 1 xn x
xi j x0
pn cnd |L0,1,2(x)-L0,1(x)|,,|L1,2,,m(x)-L0,1,m-1 (x)|< , unde >0 precizia dat i m<n.

4. Programul:
#include <iostream>
#include <cctype>
#include <vector>
#include <iterator>
#include <algorithm>
using std::cout;
using std::cin;
using std::endl;
using std::vector;
int main(){
vector<double> x, y, up, lo;
cout << "Introduceti nr de puncte:" << endl;
int n;
cin >> n;
cout << "Enter X values:" << endl;
int ix;
for(int i = 0;i != n;++i){
cin >> ix;
if(binary_search(x.begin(),x.end(),ix)){
cout << "Error: nu este posibil de rezolvat" << endl;

system("PAUSE");
return 0;
}
x.push_back(ix);
}
cout << "Introduceti valoarea lui y:" << endl;
int iy;
for(int i = 0;i != x.size();++i){
cin >> iy;
y.push_back(iy);
}
cout << "Introduceti valoarea lui c:" << endl;
int c;
cin >> c;
double L = 0, upper, lower;
for(int i = 0;i != x.size();++i){
upper = 1,lower = 1;
for(int j = 0;j != x.size();++j){
if(i != j)
upper *= c - x[j];
if(x[i] != x[j])
lower *= x[i] - x[j];
}
up.push_back(upper);
lo.push_back(lower);
//cout << upper << " " << lower << endl;
}
cout << endl
<< "Lagrange polynomial:" << endl <<"L" << (n - 1) << "(x) = ";
for(int i = 0;i != x.size();++i){
L += y[i] * up[i]/lo[i];
cout << y[i] << " * ";
for(int j = 0;j != x.size();++j)
if(i != j){
cout << "x-" << x[j] << "/";
if(x[i] != x[j])
cout << x[i] << "-" << x[j] << " ";
}
cout << "+ ";
}
cout << endl << "F(" << c << ") = " << L << endl;
system("PAUSE");
return 0;
}

5. Rezultatul:
eps=5

Concluzia:
n cadrul acestei lucrri am elaborat programul ce construiete polinomul de interpolare Lagrange Ln
(x), calculeaz valorea funciei f(x) ntr-un punct dat utiliznd polinomul de interpolare Lagrange ct
i schema lui Aiken. n utilizarea zi de zi e mai rezonabil de folosit polinomul de interpolare Ln(x).