Sunteți pe pagina 1din 5

Universitatea Tehnică a Moldovei

Facultatea Calculatoare Informatică și Microelectronică


Departamentul Ingineria Software și Automatică

RAPORT
la lucrarea de laborator nr.3

Metode si modele de calcul

Tema: INTERPOLAREA FUNCŢIILOR CU AJUTORUL


POLINOMULUI LAGRANGE

A efectuat: Prepelita Valentin,CR-222

A verificat: Struna V.

Chişinău 2023
1. Scopul lucrǎrii

Pentru funcţia f:[a, b]→R se cunosc valorile y0, y1, y2,…,yn în nodurile distincte
x0, x1, x2,…, xn, adică yi=f(xi), i=0,1,2,…,n.
1) Să se construiască polinomul de interpolare Lagrange Ln(x) ce aproximează
funcţia dată.
2) Să se calculeze valoarea funcţiei f(x) într-un punct x=α utilizând polinomul
de interpolare Lagrange Ln(x).
3) Să se aproximeze valoarea funcţiei f(x) pentru x=α cu eroarea ε= 10-4 (sau cu
cea mai bună exactitate posibilă), calculînd polinomul de interpolare Lagrange
Lm(x), unde m<n.
4) Să se compare şi să se explice rezultatele obţinute în 2) şi 3).

Codul programelor si rezultatele compilarii:


Valoarea functiei in punctul α folosind polinomul Lagrange
#include <iostream>
#include <vector>
int main() {
double x = -5.026;
int n = 6;
double sum = 0;
// presupunem că avem vectorii x_n și y_n definiti
std::vector<double> x_n = { -5.354, -4.218, -3.497, -2.198, -1.765, 0.876, 1.675 };
std::vector<double> y_n = { 9.14352, 6.87601, 3.76501, 0.76591, 2.67981, 4.90912,
6.45671 };
for (int i = 0; i <= n; i++) {
double R = 1;
for (int j = 0; j <= n; j++) {
if (i != j) {
R = R * (x - x_n[j]) / (x_n[i] - x_n[j]);
}
}
sum = sum + y_n[i] * R;
}
std::cout << "x = " << x << ", Ln(x) = " << sum << std::endl;
return 0;
}

Aproximarea functiei cu eroarea 10-4 calculand polinomul de interpolare Lagrange


#include<iostream>
#include<vector>
#include<cmath>
double lagrangeInterpolation(std::vector<double> y, std::vector<double> x, double xi, int
m) {
double result = 0; // Initialize result
for (int i=0; i<m; i++)
{
// Compute individual terms of above formula
double term = y[i];
for (int j=0;j<m;j++)
{
if (j!=i)
term = term*(xi - x[j])/double(x[i] - x[j]);
}
// Add current term to result
result += term;
}
return result;
}
int main() {
std::vector<double> x = {-5.354, -4.218, -3.497, -2.198, -1.765, 0.876, 1.675}; //
replace with your x values
std::vector<double> y = {9.14352, 6.87601, 3.76501, 0.76591, 2.67981, 4.90912,
6.45671}; // replace with your y values
double xi = -5.026; // replace with your alpha
int m = 6; // replace with your m value
double epsilon = pow(10, -4); // error tolerance
double previous_result = lagrangeInterpolation(y, x, xi, m);
double current_result;
while (true) {
m++;
current_result = lagrangeInterpolation(y, x, xi, m);
if (abs(current_result - previous_result) < epsilon) {
break;
}
previous_result = current_result;
}
std::cout << "The interpolation result is: " << current_result << " with m = " << m
<< std::endl;
return 0;
}

Metoda 2) Metoda 3)

α=-5,026 α=-5,026
Ln(x)=7.90628 Ln(x)=7.90628

Concluzii
Din rezultatele obținute, se poate observa că polinomul de interpolare Lagrange Ln(x) și polinomul
de interpolare Lagrange Lm(x), unde m<n, au oferit aceeași valoare pentru funcția f(x) la x=α, cu
α=-5,026. Ambele metode au returnat valoarea 7.90628.

Acest lucru sugerează că, deși am utilizat un număr mai mic de puncte pentru a construi polinomul
Lm(x) (m=6), am reușit să obținem o aproximare la fel de bună a funcției f(x) ca și în cazul în care
am folosit toate punctele disponibile pentru a construi polinomul Ln(x). Acest lucru este posibil
datorită faptului că polinomul de interpolare Lagrange este un estimator bun al funcției f(x), chiar
și atunci când nu folosim toate punctele disponibile.

În plus, am reușit să obținem această aproximare cu o eroare mai mică decât ε=10^-4, ceea ce
indică faptul că am atins cea mai bună exactitate posibilă cu numărul de puncte pe care le-am
folosit.
Aceste rezultate demonstrează eficiența polinomului de interpolare Lagrange ca metodă de
aproximare a funcțiilor. Cu toate acestea, este important de menționat că aceste rezultate pot varia
în funcție de funcția specifică și de setul de puncte utilizat. Prin urmare, este întotdeauna util să
experimentăm cu diferite seturi de puncte și să comparăm rezultatele pentru a găsi cea mai bună
metodă de aproximare pentru o anumită situație.

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