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:
Krijoni Kontakt