Sunteți pe pagina 1din 5

Universitatea Tehnic a Moldovei

FCIM
Catedra Informatica Aplicativ

RAPORT
la lucrarea de laborator nr. 3
la Metode Numerice
Tema:
Interpolarea funciilor

A efectuat:

st. gr. C-141 Calpacci Maxim

A verificat:

conf. univ. Tutunaru Eleonora

Chiinu 2015

Polinomul Lagrange
Acest polinom de interpolare se utilizeaz pe larg atunci cnd discretizarea
intervalului [a, b] de interpolare n subdomeni elemetare este neuniform, adic au o
lungime diferit.
1. Scopul lucrrii:
Pentru funcia f :[a,b]
0

R se cunosc valorile y = f(x ), i=0,1,, n n punctele

distincte a = x , x , , x = b.
a. S se construiasc polinomul de interpolare Lagrange Ln(x) ce aproximeaz
funcia dat.
b. S se calculeze valoarea funciei f(x) ntr-un punct x = utiliznd polinomul de
n

interpolare Lagrange L (x).


2. Sarcina
(Ca exemplu, au fost luate date din ndrumar)
x
y

4.253
2.4678

5.786
3.3260

6.876
4.6534

7.011
5.5134
x = = 7.25

3. Listing-ul
#include
#include
#include
#include
#include

<iostream>
<stdio.h>
<conio.h>
<stdlib.h>
<math.h>

using namespace std;


int i, j, k, nr, m, n1;
float C[20], B[20], A[20], r;
float rezult;
int num;
int main()
{
float x[20];
float y[20];

8.343
6.4752

9.256
7.3765

9.987
8.5737

int exit1 = 0;
int n;
float a;
int aleg;
cout << "\n -------------";
cout << "\n LAB Nr. 3 ";
cout << "\n -------------";
cout << "\n";
cout << "\n Introduceti numarul de noduri de interpolare: ";
cin >> n;
retry:
cout << "\n Introduceti elementele tabloului absciselor nodurilor (x):\n\n";
cout << " > ";
for (int i = 0; i < n; i++)
cin >> x[i];
for (i = 0; i < n; i++)
for (int j = 0; j < n; j++)
{
if (i != j)
{
if (x[i] == x[j])
{
cout << "\n ! Unele dintre valori ale lui X coincid !";
goto retry;
}
}

cout << "\n Introduceti elementele tabloului valorilor functiei in aceste puncte (y):\n\n";
cout << " > ";
for (int i = 0; i < n; i++)
cin >> y[i];
cout << "\n Introduceti punctul in care doriti sa se efectueze interpolarea: ";
cin >> a;
int op;
nr = n;
--nr;
C[0] = 1;
for (i = 0; i <= nr; i++)
{
C[i + 1] = C[i];
for (j = i; j >= 1; j--)
C[j] = C[j - 1] - C[j] * x[i];
C[0] = -C[0] * x[i];
}
for (i = 0; i <= nr; i++)
A[i] = 0;
B[nr] = C[nr + 1];

for (i = 0; i <= nr; i++)


{
r = 1;
for (j = 0; j <= nr; j++)
if (i != j)
r = r*(x[i] - x[j]);
for (k = nr - 1; k >= 0; k--)
B[k] = C[k + 1] + x[i] * B[k + 1];
for (k = 0; k <= nr; k++)
A[k] = A[k] + y[i] * B[k] / r;
}
cout << endl;
cout << "\n Polinomul de interpolare Lagrange:" << endl;
cout << "\n > Ln(x) = " << A[nr] << "X" << nr;
i = nr - 1;
for (k = nr - 1; k > 0; k--)
{
printf(" %+1.4fX%d", A[k], i);
if (k == nr - 4) printf("\n\t");
i--;
}
printf(" %+1.4f", A[0]);
cout << endl;
_getch();
rezult = A[n];
for (i = 1; i <= n; i++)
{
rezult = a*rezult + A[n - i];
}
cout << endl;
cout << " > Valoarea functiei f(x) in punctul dat x = " << rezult;
cout << endl;
rezult = 0;
_getch();
delete[] A;
_getch();
}

Rezultatul:

4. Concluzie
n urm acestei lucrri de laborator, am nsuit mai mult informaie referitor la
interpolarea funciilor, i anume la tema Polinomul Lagrange. n cadrul efecturii
programului, am atras atenia la unele criterii de calculare a polinomului, i anume c
printre valorile absciselor nodurilor (x) nu trebuie s avem valori egale.

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