Sunteți pe pagina 1din 8

Universitatea Tehnică a Moldovei

Facultatea Calculatoare Informatică și Microelectronică


Departamentul Ingineria Software și Automatică

RAPORT

la lucrarea de laborator nr. 3

Varianta-15

Tema: INTERPOLAREA FUNCŢIILOR CU AJUTORUL POLINOMULUI


LAGRANGE

A efectuat: Negru Tatiana gr.TI-224

A verificat: Strună Vadim

Chişinău,2023
Mersul lucrării:

1. Scopul lucrării;
2. Problema data spre rezolvare;
3. Descrierea problemei de interpolare;
4. Rezolvare matematic;
5. Codul;
6. Rezultatul la consolă;
7. Răspunsul exercițiului;
8. Concluzia;
9. Bibliografia.

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);

Problema data spre rezolvare:

1.

2. Descrierea problemei de interpolare

Fie dată funcţia y=f(x) dată sub forma unei tabele de valori:

x x0 x1 ... xn
y y0 y1 ... yn

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


Există numeroase procedee de interpolare pentru găsirea unor valori
intermediare ale lui f(x) pentru x≠xi , i=0,1,…,n De foarte multe ori pentru aproximarea funcţiilor prin
interpolare se utilizează polinoamele algebrice

Pn(x)= αnxn + αn-1xn-1 + …+ α1x+α0.

Aceasta se datorează faptului că funcţia f(x) poate fi aproximată foarte bine cu ajutorul curbelor a
căror reprezentare analitică sunt polinoame (teorema lui Weierstrass). Pe de altă parte, valoarea
polinomului se calculează uşor (cu ajutorul schemei lui Horner) nu apar dificultăţi şi la integrarea sau
derivarea polinoamelor. Pentru ca un polinom Pn(x) de grad ≤ n să interpoleze funcţia dată, trebuie ca
valorile sale în nodurile x0, x1, x2,…, xn să coincidă cu valorile funcţiei, adică:

Pn(x)=yi, i=0,1,…,n (1)

Se demonstrează că condiţiile de interpolare (1) determină un polinom unic, care se poate


exprima sub forma

Polinomul Ln(x) se numeşte polinomul de interpolare al lui Lagrange

Exemplu. Să se calculeze polinomul de interpolare a lui Lagrange ce aproximează funcţia definită cu ajutorul
următorului tabel de valori:

x -1 0 2
y -8 -1 1

Putem construi polinomul de gradul doi şi anume:

(x − 0)(x − 2) (x +1)(x − 2) (x +1)(x − 0)


L2=−8 (−1− 0)(−1− 2) + (−1) (0 +1)(0 − 2) +1 (2 +1)(2 − 0) = -2x2+5x-1.

Polinomul de interpolare a lui Lagrange coincide cu funcţia f(x) în nodurile de interpolare. Pentru
celelalte puncte cantitatea

Rn(x)=f(x)-Ln(x)

reprezintă eroarea care se comite în calculul lui f(x) prin formula f(x)≈ Ln(x). Dacă funcţia f(x) este
continuă împreună cu primele n+1 derivate, atunci:

f (n−1) (ξ )

Rn (x) = (n +1)! ωn+1 (x) ,

unde ωn+1(x)= (x-x0)(x-x1)…(x-xn), iar ξ este un punct din intervalul [x0, x1]. Cu ajutorul formulei (2)
se obţine egalitatea aproximativă

Rm(x) ≈ Lm+1(x)-Lm(x)

Ultima relaţie poate fi utilizată la calculul funcţiei f(x) într-un punct dat x≠xi cu exactitatea dorită
ε>0. Pentru aceasta se calculează succesiv polinoamele L1(x),L2(x),…,Lm(x), folosind schema lui Aitken;
de asemenea se determină şi mărimile

ε1 = L2 (x) − L1 (x) , ε 2 = L3 (x) − L2 (x) ,...,ε m = Lm+1 (x) − Lm (x) ,...

Dacă pentru un indice m, m<n are loc inegalitatea εm<ε, atunci STOP; avem

calculată valoarea funcţiei f(x) (egală cu Lm(x)) cu eroarea dată. În caz contrar (εm≥ε, ∀m) se determină
cel mai mic m pentru care
εm= min{εi}
1≤i≤n-1
şi se consideră f(x)≈Lm(x).
Un procedeu efectiv de calcul a valorii unui polinom îl constituie schema lui
Horner. Pentru stabilirea schemei lui Horner se transcrie polinomul Pm(x) astfel:

Pn(x) = a0+x(a1+x(a2+…+x(an-1+xan)…))

Deci putem afla valoarea acestui polinom în punctul x, calculând succesiv mărimile

Bn=an
Bn-1=an-1+xbn=an-1+xan
Bn-2=an-2+xbn-1=an-2+x(an-1+xan)
……………………………………….
B=a0+xb1=a+x(a1+a2+x(an-1+xan)…)=Pn(x).

Această schemă necesită cel mult 2n operaţii aritmetice .

Rezolvare Matematic

Din cauza că sunt multe calcule în care te poți încurca nu am finisat rezolvarea.Dar cu ajutorul
unui program în limbajul C++ putem face cu mult mai simplu.

Codul :
#include <iostream>
#include <vector>
#include <cmath>

using namespace std;

double lagrange_interpolation(const vector<double>& x, const vector<double>& y, double xi) {


double result = 0.0;

for (size_t i = 0; i < x.size(); ++i) {


double term = y[i];
for (size_t j = 0; j < x.size(); ++j) {
if (j != i) {
term *= (xi - x[j]) / (x[i] - x[j]);
}
}
result += term;
}

return result;
}

int main() {
// Citirea datelor de intrare
size_t n;
cout << "Introduceti numarul de puncte: ";
cin >> n;

vector<double> x(n);
vector<double> y(n);

cout << "Introduceti valorile lui x: \n";


for (size_t i = 0; i < n; ++i) {
cout << "x[" << i << "]= ";
cin >> x[i];

cout << "y[" << i << "]= ";


cin >> y[i];
}

// 1) Construirea polinomului Lagrange Ln(x)


// Nu este necesară implementarea separată a polinomului, deoarece aceasta este inclusă în funcția de
interpolare

// 2) Calculul valorii funcției f(x) într-un punct x=alpha


double alpha;
cout << "Introduceti valoarea pentru x=alpha: ";
cin >> alpha;

double result_interpolation = lagrange_interpolation(x, y, alpha);


cout << "Valoarea f(x) pentru x=" << alpha << " este: " << result_interpolation << "\n";

// 3) Aproximarea valorii funcției f(x) pentru x=alpha cu eroarea ε= 10^(-4)


double epsilon = 1e-4;
size_t m = n; // m trebuie să fie mai mic decât n pentru a obține o aproximare cu o precizie mai mare
while (true) {
vector<double> xm(x.begin(), x.begin() + m);
vector<double> ym(y.begin(), y.begin() + m);

double result_high_precision = lagrange_interpolation(xm, ym, alpha);


double error = abs(result_high_precision - result_interpolation);

if (error < epsilon) {


cout << "Aproximarea cu eroarea ε=10^(-4) pentru x=" << alpha << " este: " << result_high_precision
<< "\n";
break;
}

// Mărește m pentru o aproximare mai bună


m++;
}

// 4) Compararea și explicarea rezultatelor


// De obicei, cu cât m este mai aproape de n, cu atât aproximarea este mai precisă, dar creșterea m poate
duce la instabilitate numerică

return 0;
}

Rezultatul:

Răspunsul Varianta15 este : -3.55091


Concluzie:

Interpolarea funcțiilor este o tehnică esențială în analiza numerică, iar polinomul Lagrange
reprezintă o metodă frecvent utilizată pentru această scop. Această lucrare de laborator s-a
concentrat pe implementarea și înțelegerea practică a polinomului Lagrange în limbajul de
programare C++.
Am studiat conceptele cheie ale polinomului Lagrange și modul în care poate fi utilizat
pentru a interpola funcții pe baza unui set de puncte cunoscute.
Implementare în C++: Am dezvoltat un program C++ care ilustrează aplicarea polinomului
Lagrange pentru interpolarea funcțiilor.
Importanța alegerii nodurilor de interpolare: Am evidențiat importanța alegerei adecvate a
nodurilor de interpolare și modul în care aceasta poate influența rezultatele.
Lucrarea de laborator a oferit o experiență practică în utilizarea polinomului Lagrange
pentru interpolarea funcțiilor în limbajul de programare C++. Acest proces nu numai că
consolidează înțelegerea conceptelor teoretice, dar furnizează și un instrument valoros pentru
rezolvarea problemelor practice. Cu toate acestea, este esențial să evaluăm metoda în contextul
specific al fiecărei probleme pentru a asigura o interpretare corespunzătoare a rezultatelor și o
alegere rațională a metodelor de interpolare.

Bibliografie:

Platforma else:

https://else.fcim.utm.md/pluginfile.php/106968/mod_resource/content/2/Exemplu%20de%20lucrare
%20Nr.%203.pdf;

https://else.fcim.utm.md/pluginfile.php/106966/mod_resource/content/2/Prelegerea%20nr.
%201011%20Aproximarea%20func%C5%A3iilor%20%28Patiuc%20V.%29.pdf;

https://else.fcim.utm.md/pluginfile.php/106965/mod_resource/content/2/Prelegerea%20nr.%2010-
11%20%28Moraru%20V.%29.pdf.

Youtube:

https://www.youtube.com/watch?v=WCGKqJrf4N4;

https://www.youtube.com/watch?v=yKUuHO091lo.

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