Close
Duke shfaqur rezultatin -19 deri 0 prej 2
  1. #1
    i/e regjistruar
    Anėtarėsuar
    16-11-2005
    Postime
    8,691

    Polinomet e Interpolimit Newtonian, ē'fare jane?

    Pershendetje forumista,
    kam nje hall,
    me duhet te shkruaj kod ne C, te llogaris Polinomet e Interpolimit Newtonian.

    Ne fakt formulen e kam pare,
    e gjeta ne internet, por nuk arrij ta kuptoj mire.

    Mund te me thoje njeri diēka mbi keto polinome, perse sherbejne, pse perdoren , dhe shkurtimisht shpjegimin e formules?
    Me duhet sonte patjeter, se ne fakt nuk e dua per vete, prandaj nuk e kam idene se ē'eshte ky lloj polinomi.
    gjeta kete faqe ne te cilen jepet dhe polinomi i Newton,
    formula eshte e qarte, por kur flet per pikat, e ka fjalen per pika me koordinata x,y apo vetem koordinata x.
    funksioni ne output jep nje seri pikash, apo nje vlere reale?

    Reputacion sa te mund kush me ndihmon .

  2. #2
    i/e regjistruar
    Anėtarėsuar
    16-11-2005
    Postime
    8,691
    Lere se me ne fund arrita ta kuptoj.
    Nuk i dihet se mbase do mund ti duhet dikujt tjeter kodi ne C per polinomet Newtoniane te cilat sherbejne per te llogaritur vlera te nje funksioni te panjohur duke u nisur nga nje seri pikash (x,y) ku vlera e funksionit per x eshte y.

    me poshte kodi ne C me shpjegimet perkatese:
    Kodi:
    #include 
    
    /**
    ky funksion eshte pikerisht implementimi i algoritmit te diferencave te ndara
    funksioni eshte i shprehur ne menyre rikursive, 
    [x0,x1,..,xn;F]=([x1,x1,..,xn;F] - [x0,x1,..,xn-1;F])/(xn-x0)
    
    rasti limit qe i jep fund rekursionit eshte 
    [x0;F]=f(x0)=y0
    
    */
    double dif_ndarje(double pikat[][2], int start, int end){
        if(end == start){
            return (pikat[end][1]);
        }else{
            return (dif_ndarje(pikat,start+1,end) - dif_ndarje(pikat,start,end-1))/(pikat[end][0] - pikat[start][0]);
        }
        
    }
    
    /**
    ky nen funksion qe thirret nga funksioni polinomi_newton ben llogaritjen e 
    (koordinatax - x[start])*(koordinatax - x[start+1])*..*(koordinatax - x[end])
    ne menyre iterative, pra duke perdorur nje cikel
    */
    double dif_shumezim(double koordinatax,double pikat[][2], int start, int end){
        double prodhimi=1.0;
        int i;
        for(i=start; i<=end; i++){
            prodhimi *= (koordinatax - (pikat[i][0]));
        }
        return prodhimi;
    }
    
    /**
    grada e polinomit tregon numrin elementeve te pare qe merren ne konsiderate,
    koordinatax eshte vlera e x-it per te cilen na duhet te llogarisim vleren y
    pikat jane ēiftet e vlerave te njohura x dhe y
    funksioni eshte rekursiv, 
    polinomi me grade n P(n) = P(n-1) + (x-x0)(x-x1)...(x-xn-1) * [x0,x1,..,xn;F]
    ku (x-x0)(x-x1)...(x-xn-1) eshte shumezimi i diferencave nga pika x,
    dhe [x0,x1,..,xn;F] eshte diferenca e ndarjeve nga pika x0 tek xn
    
    rasti limit i ketij funksioni qe i jep fund rekursionit eshte kur grada=0
    ne kete rast vlera e funksionit eshte thjesht vlera F(x0) 
    keto dy nenfunksione jane deklaruar si dif_shumezim dhe dif_ndarje.
    */
    double polinomi_newton(int grada, double koordinatax,double pikat[][2]){
        double ds,dn,pol;
        if(grada==0){
            return pikat[0][1];
        }else{
            pol=polinomi_newton(grada-1, koordinatax, pikat);
            ds=dif_shumezim(koordinatax,pikat,0,grada-1);
            dn=dif_ndarje(pikat,0,grada);
            return (ds * dn + pol);
        }
    }
            
    int main(){
        //deklarojme matricen e pikave, ku ē'do rresht i matrices 
        //perfaqeson nje pike (x,y)
        //per te marre vleren e koordinates "x" se pikes se "i"-te vlera=pikat[i][0]
        //per te marre vleren e koordinates "y" se pikes se "i"-te vlera=pikat[i][1]
        //array of array ka dimensione 5x2, 5 pika me nga 2 koordinata
        double pikat[5][2]={
            {-1,0.1},
            {-0.75,-0.0718125},
            {-0.5,0.02475},
            {-0.25,0.3349375},
            {0,1.101}
            };
            
        
        //array i meposhtem mban pikat per te cilat duam te gjejme vlerat F(x)
        double x[3]={0.33333,-0.4,-0.1};
        double rezultati;
        int i;
            
        //per ē'do pike te dhene tek kerkesa, pra F(x)
        printf("Llogarisim vlerat per pikat ne kerkese:\n");
        for(i=0;i<3;i++){
            //llogarisim vleren 
            //vizualizojme rezultatin ne ekran
            //vini re qe grada eshte nr_pikave-1
            printf("F(%f)=%f\n",x[i],polinomi_newton(4,x[i],pikat));
        }
        
        //bejme testin qe ē'do pike e dhene ne fillim merr te njejten vlere ose 
        //vlere te perafert me kete funksion
        printf("Testojme funksionin duke rillogaritur vlerat e pikave nga te cilat u llogarit polinomi i newton, duhet te jene te njejta:\n");
        for(i=0;i<5;i++){
            printf("F(%f)=%f == %f\n",pikat[i][0],pikat[i][1],polinomi_newton(4,pikat[i][0],pikat));
        }
        return 0;
    }
    Formula tek cila u bazova ndodhet ne kete faqe:
    http://www.mat.uniroma3.it/users/ferretti/corso/node7.html

Tema tė Ngjashme

  1. Punim seminarik " shprehjet racionale algjebrike " ( polinomet )
    Nga Tetova's boy nė forumin Mentori akademik
    Pėrgjigje: 2
    Postimi i Fundit: 31-12-2008, 12:36

Regullat e Postimit

  • Ju nuk mund tė hapni tema tė reja.
  • Ju nuk mund tė postoni nė tema.
  • Ju nuk mund tė bashkėngjitni skedarė.
  • Ju nuk mund tė ndryshoni postimet tuaja.
  •