Академический Документы
Профессиональный Документы
Культура Документы
RAPORT
La lucrarea de laborator Nr.3
Tutunaru E.
Chiinu 201
1. Scopul lucrarii:
Pentru funcia f :[a,b]
,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
Ln ( x ) yi
i 0
j 0
j i
x xj
xi x j
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).