Sari la conținut

Interpolare liniară

De la Wikipedia, enciclopedia liberă
Fiind date punctele roșii (x0, y0) și (x1, y1), linia albastră este interpolarea liniară dintre ele, iar valoarea y în x poate fi determinată prin interpolare liniară

În matematică interpolarea liniară este o metodă de aproximare a unei curbe folosind polinoame de gradul întâi pentru a obține noi valori ale curbei în intervalele dintre un set discret de puncte în care valorile curbei sunt cunoscute.

Interpolarea liniară a fost utilizată încă din antichitate pentru completarea golurilor din tabele. Fie un tabel care prezintă populația unei țări în 1970, 1980, 1990 și 2000 și că se dorește estimarea populației din 1994. Interpolarea liniară este o modalitate ușoară de a face acest lucru. Se crede că metoda a fost utilizată în Imperiul Seleucid (ultimele trei secole î.Hr.) și de către astronomul și matematicianul grec Hiparh (secolul al II-lea î.Hr.). O descriere a interpolării liniare poate fi găsită în textul de matematică antic chinez numit Cele nouă capitole despre arta matematică (în chineză: 九章算術),[1] datând din 200 î.Hr. până la 100 d.Hr. și în Almageste (din secolul al II-lea) de Ptolemeu.

Interpolare liniară între două puncte cunoscute

[modificare | modificare sursă]
Valoarea punctului verde înmulțită cu distanța orizontală dintre punctele roșu și albastru este egală cu suma dintre valoarea punctului roșu înmulțită cu distanța orizontală dintre punctule verde și albastru și valoarea punctului albastru înmulțită cu distanța orizontală dintre punctule verde și roșu

Dacă cele două puncte cunoscute au coordonatele și funcția de interpolare liniară este dreapta care trece prin aceste puncte. Pentru o valoare în intervalul valoarea de-a lungul dreptei este dată din ecuația pantelor

care poate fi obținută geometric din figura din dreapta. Este un caz particular de interpolare polinomială cu

Rezolvarea acestei ecuații pentru y, care este valoarea necunoscută în x, dă:

care este formula pentru interpolarea liniară în intervalul În afara acestui interval formula este o extrapolare liniară.

Această formulă poate fi înțeleasă și ca o medie ponderată. Ponderile sunt invers proporționale cu distanțele de la punctele cunoscute la punctul necunoscut; punctul mai apropiat are o influență mai mare decât punctul mai îndepărtat. Astfel, ponderile sunt și care sunt distanțe normalizate între punctul necunoscut și fiecare dintre punctele cunoscute. Deoarece suma acestor ponderi este 1,

rezultând formula de interpolare liniară de mai sus.

Interpolare într-un set de date

[modificare | modificare sursă]
Interpolarea liniară într-un set de date (punctele roșii) constă din porțiuni de drepte de interpolare (liniile albastre)

Interpolarea liniară într-un set de date (x0, y0), (x1, y1), ..., (xn, yn) este definită ca o funcție liniară pe porțiuni, rezultată din concatenarea segmentelor dintre fiecare pereche de puncte succesive. Aceasta are ca rezultat o funcție continuă, cu o derivată în general discontinuă, deci de clasa de derivabilitate

Interpolarea liniară ca aproximare

[modificare | modificare sursă]

Interpolarea liniară este adesea utilizată pentru a aproxima o valoare a unei funcții, f, folosind două valori cunoscute ale acelei funcții în alte puncte. Eroarea acestei aproximări este definită drept:

unde p reprezintă polinomul de interpolare liniară definit mai sus:

Se poate demonstra folosind teorema lui Rolle că dacă f are o derivată de ordinul al doilea continuă, atunci eroarea este mărginită de:

Adică, aproximarea dintre două puncte ale unei funcții date se înrăutățește odată cu derivata de ordinul al doilea a funcției aproximate. Acest lucru este corect și din punct de vedere intuitiv: cu cât funcția este mai „curbă”, cu atât aproximările făcute cu interpolare liniară simplă devin mai proaste.

Operația de bază a interpolării liniare între două valori este utilizată în mod obișnuit în grafica digitală. Operațiile de interpolare liniară sunt încorporate în hardware-ul tuturor procesoarelor grafice moderne. Acestea sunt adesea folosite ca elemente constitutive pentru operații mai complexe: de exemplu, o interpolare biliniară poate fi realizată prin trei interpolări liniare. Deoarece această operație este ieftină, este o modalitate bună de a implementa tabele precise de funcții netede, cu căutare rapidă, fără a avea prea multe intrări în tabel.

Interpolări uni- și bidimensionale.
Punctele negru și roșii/galbene/verzi/albastre corespund punctului interpolat, respectiv celor învecinate. Înălțimile lor față de planul de bază corespund valorilor lor.

Dacă o funcție din clasa de derivabilitate C0 este insuficientă, de exemplu, dacă procesul care a produs punctele de date este cunoscut a fi mai neted decât C0, se poate înlocui interpolarea liniară cu o interpolare spline sau cu una polinomială.

Multivariabilă

[modificare | modificare sursă]
Exemplu de interpolare biliniară într-un pătrat unitate cu valorile z 0, 1, 1 și 0,5. Valorile interpolate între ele sunt reprezentate prin culoare.
O funcție liniară pe porțiuni în două dimensiuni (sus) și zonele convexe pe care este liniară (jos)

Interpolarea liniară, așa cum este descrisă aici, este pentru puncte situate spațial într-un plan. Pentru puncte situate în spațiu, extensia interpolării liniare se numește „interpolare biliniară”, respectiv „triliniară”. De observat că aceste interpolări nu mai sunt funcții liniare ale coordonatelor spațiale, ci mai degrabă produse ale funcțiilor liniare. Acest lucru este ilustrat de exemplul evident neliniar de interpolare biliniară din figura de mai jos. Alte extensii ale interpolării liniare pot fi aplicate altor tipuri de rețele, cum ar fi rețelele triunghiulare și tetraedrice, inclusiv suprafețele Bézier⁠(d). Acestea pot fi definite ca funcții liniare pe porțiuni în dimensiuni superioare (v. următoarea figură de mai jos).

Suportul în limbajele de programare

[modificare | modificare sursă]

Multe biblioteci și limbaje de umbrire au o funcție care furnizează o interpolare între două valori (v0, v1) pentru un parametru t în intervalul unitate închis [0, 1]. Semnăturile dintre funcțiile „lerp” (din engleză Linear intERPolation) sunt implementate în mod variat, în ambele forme (v0, v1, t) și (t, v0, v1).

// Imprecise method, which does not guarantee v = v1 when t = 1, due to floating-point arithmetic error.
// This method is monotonic. This form may be used when the hardware has a native fused multiply-add instruction.
float lerp(float v0, float v1, float t) {
  return v0 + t * (v1 - v0);
}

// Precise method, which guarantees v = v1 when t = 1. This method is monotonic only when v0 * v1 < 0.
// Lerping between same values might not produce the same value
float lerp(float v0, float v1, float t) {
  return (1 - t) * v0 + t * v1;
}

Această funcție „lerp” este utilizată în mod obișnuit pentru combinarea (variația) lui „alfa” (parametrul t este „valoarea alfa”), iar formula poate fi generalizată pentru a combina mai multe componente ale unui vector (cum ar fi axele spațiale x, y, z sau componentele de culoare r, g, b) în paralel.

  1. en Joseph Needham (). Science and Civilisation in China: Volume 3, Mathematics and the Sciences of the Heavens and the Earth. Cambridge University Press. pp. 147–. ISBN 978-0-521-05801-8.

Lectură suplimentară

[modificare | modificare sursă]

Legături externe

[modificare | modificare sursă]