Lagrangeov polinom

poruka: 4
|
čitano: 4.502
|
moderatori: Lazarus Long, XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
17 godina
offline
Lagrangeov polinom

Prije svega želim reći da ovo nije još jedno žicanje gotovog programa nego molba za pomoć pri shvaćanju zadatka.

 

Učim se programirati u C++ te koristim knjigu Demistificirani C++ (Julijan Šribar, Boris Motik) btw knjiga je zakon, iskreno preporučam. Uglavnom u knjizi je zadan zadatak da pomoću nizova napravim program za interpolaciju Lagrangeovim polinomon. Imam generalnu ideju čemu služi ta interpolacija ali nerazumijem Lagrangeovu interpolacijusku formulu, pa bih molio da mi netko to pojasni.

 

http://en.wikipedia.org/wiki/Lagrange_polynomial

 

 

 

Bob Rock "ALI NJIH JE DVOJE A MI SMO SAMI"
Poruka je uređivana zadnji put čet 9.10.2008 20:46 (momak).
 
0 0 hvala 0
16 godina
neaktivan
offline
RE: Lagrangeov polinom

Stvar je prilično jednostavna - samo treba pročitati izraze (ako znaš matematičke simbole).

 

Recimo da imaš tri točke kroz koje bi želio povući interpolacijski polinom (u Lagrangeovom obliku) - (x0,y0), (x1,y1) i   (x2,y2).

 

Prvo odrediš bazne polinome l0, l1 i l2 kao umnožak izraza

 

        (x-xi)
lj(x)= ---------
        (xj-xi)

 

pri čemu i ide od 0 do 2 i ne smije biti jednak j. Dakle:

 

l0(x)=(x-x1)/(x0-x1)*(x-x2)/(x0-x2)
l1(x)=(x-x0)/(x1-x0)*(x-x2)/(x1-x2)
l2(x)=(x-x0)/(x2-x0)*(x-x1)/(x2-x1)

 

Uoči da je u l0 j=0, a i se mijenja od 1 do 2; u l1 j=1, a i poprima vrijednosti 0 i 2; te u trećem slučaju j=2, a i je 0 i 1.

 

Interpolacijski polinom L(x) je linearna kombinacija (zbroj) umnožaka baznog polinoma i pripadajuće vrijednosti funkcije (y koordinate):

 

L(x)=y0*l0+y1*l1+y2*l2
    =y0*[(x-x1)/(x0-x1)*(x-x2)/(x0-x2)]+y1*[(x-x0)/(x1-x0)*(x-x2)/(x1-x2)]+y2*[(x-x0)/(x2-x0)*(x-x1)/(x2-x1)]

 

Ukoliko uvrstiš vrijednosti točaka i zatim izračunaš L(x) za proizvoljni niz x-eva možeš iscrtati graf interpolacijske funkcije.

 

Inače, za primjenu je pogodnija baricentrična interpolacija (baricentar - centar mase), budući da se složenost (vrijeme računanja) povećava linearno sa povećanjem broja točaka za koje je potrebno odrediti bazne polinome, u odnosu na pojedinačno računanje baznih polinoma (prikazano gore) gdje se složenost povećava kvadratno.

 

Poruka je uređivana zadnji put ned 12.10.2008 11:52 (hrx).
17 godina
offline
Lagrangeov polinom

Hrx hvala puno, sad mi je sve puno jasnije...

I mislim da imaš jednu malu grešku u postu, bilo bi dobro da je ispraviš ak će nekog drugog zanimat ova tema.

 

"Uoči da je u l0 j=0, a i se mijenja od 1 do 2; u l1 j=1, a i poprima vrijednosti 0 i 2; te u trećem slučaju j=2, a i je 1 i 2"

 

pozz

 

EDIT: Evo programčića koji unosi određeni broj točaka neke funkcije te pomoću tih podataka određuje f(x) za neki zadani x:

 

 

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{   const int nmax = 2;
    float x[nmax] = {};
    float y[nmax] = {};
   
    for (int i = 0; i < nmax; i++) {
        cout << "Enter x" << i << ": ";
        cin  >> x[i];
        cout << "Enter y" << i << ": ";
        cin  >> y[i];
        }
   
    float X; float l[nmax] = {}; float L = 0;
    cout << "Enter X: ";
    cin >> X;
   
    for (int i = 0; i < nmax; i++) {
        l[i] = 1;
        for (int j = 0; j < nmax; j++) {
            if (i != j) {
                  l[i] *= (X - x[j])/(x[i] - x[j]);
                  }
            }
        }
       
    for (int i = 0; i < nmax; i++) {
        L += y[i] * l[i];
        }
    cout << "f(x) = " << L << endl;
       
    system("PAUSE");
    return EXIT_SUCCESS;
}

Bob Rock "ALI NJIH JE DVOJE A MI SMO SAMI"
Poruka je uređivana zadnji put ned 12.10.2008 11:02 (momak).
 
1 0 hvala 0
16 godina
neaktivan
offline
RE: Lagrangeov polinom

Lapsus calami - ispravljeno. Hvala.

1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice