Integrimi numerik Metoda e Simpsonit ( Kuadratura e Simpsonit ) Le të na jetë dhënë për tu njehsuar numerikisht
ku a dhe b janë numra te fundëm.
Njehsimin e këtij integrali do ta bëjmë më metoda të përafërta të integrimit numerik. Me metoda te tilla kuptojmë metodat që e sjellin llogaritjen e integralit të caktuar në llogaritjen e një shume të trajtës . Këto metoda bazohen në formulën e përafërt: 1. Formula të tilla quhen kuadratura. Numrat ci quhen pesha të kuadraturës ndërsa pikat xi të cilat bëjnë pjesë në segmentin [a;b] quhen nyje të kuadraturës. Peshat ci dhe nyjet xi duhet t’i zgjedhim në mënyrë të tillë që kuadratura të jetë e vlefshme për një klasë sa më të gjerë funksionesh. Për përftimin e kuadraturave të tipit 1, përdoret gjerësisht aparati i interpolimit I cili lejon krahas përftimit të një kuadrature konkrete të merret dhe një vlerësim për gabimin e saj. Nqs funksionin e dhënë f(x) e përafrojmë me një polinom interpolues Ln(x), atëherë do të kemi : 2. Integrali i parë në anën e djathtë të barazimit 2 do të na japi kuadraturën e kërkuar, ndërsa integrali i dytë do të na japi gabimin e saj. Një prej kuadraturave është metoda e Simpsonit ose kuadratura e Simpsonit. Le të shohim në mënyrë specifike se ku konsiston kjo metodë. Kuadratura e Simpsonit Përafrojmë funksionin nën integral me polinomin interpolues të Lagranzhit L2(x) të ndërtuar sipas nyjeve x0=a , x1= =c , x2=b. L2(x)=l0(x)f(x0)+l1(x)f(x1)+l2(x)f(x2)= L2(x)=
f(a)+
f(
)+
f(x0)+ f(b)
f(x)=L2(x)+E2(x) = Pas integrimit të L2(x) dhe E2(x), si përfundim do të marrim: [ f(a) + 4f(
) + f(b) ] –
(c)
f(x1)+
f(x2)
Kuadratura e thjeshtë e Simpsonit
Gabimi i kuadraturës
Në këtë mënyrë përftojmë rregullin e thjeshtë ose kuadraturën e thjeshtë të Simpsonit e cila është: 3.
[ f(a) + 4f(
f(b) ]
Gabimi i metodës jepet nga: 4. E2(x) = -
(c) = -
ku h =
Në praktikë, në vend të kuadraturës së thjeshtë , për të rritur saktësinë përdoret rregulli I përbërë i Simpsonit i cili konsiston si më poshtë: Intervalin e integrimit e ndajmë a
në
2n-pjesë
të
barabarta
me
anën
e
Zbatojmë në secilin prej intervaleve ]xi ; xi+1 [ rregullin e thjeshtë të Simpsonit. i=0,2,4, . . . . , 2n-2 [ f0 + 4f1 + f2 ] +
[ f2 + 4f3 + f4 ] . . .
[ f2n-2 + f2n-1 + f2n ] ____________________________________________________________ 5. [ f0 +4(f1+f3+f5+….+f2n-1) + 2(f2+f4+f6+….+f2n-1) + f2n ] Rregulli i përbërë i Simpsonit Gabimi jepet nga : En= -
(c) = -
h=
(c)=max| [a,b]
(c) (x)|
a
nyjeve
Algoritmet Zgjidhja e tre kërkesave te ushtrimit do të realizohet duke u mbështetur tek algoritmet e paraqitura me poshtë: I. Përafrimin e integralit I=
do ta shënojmë me XI:
Hyrje: a, b, n, f(x) Dalje: XI Hapi 1: Njehëso h= Hapi 2: Njehëso: XI0=f(a) Hapi 3: Njehëso: XI1=f(b) Hapi 4: XI2 = 0 XI3 =0 Hapi 5: Per i=1,…,2n-1 kryej hapat 6 dhe 7 Hapi 6: x=a + i*h Hapi 7: Nese i tek Njehëso: XI2 = XI2 + f(x) Perndryshe njehëso: XI3= XI3 + f(x) Hapi 8: Njehëso : XI =h/3(XI 0+4 XI2 + 2 XI3 + XI 1) Hapi 9: Dalje ( XI ) Ndal II. Gabimi En: Hyrje: a, b, n, f(x) Dalje: En Hapi 1: Njehëso: h= Hapi 2: Njehëso: f(4)(x) Hapi 3: Përcakto c që f(4)(c)=max| f(4)(x)| në segmentin [a,b] Hapi 4: Njehëso En =Hapi 5: Dalje (En) Ndal
f(4)(c)
III. Gjetja e vlerës n, kur njohim gabimin Hyrje: a, b, En, f(x) Dalje: n Hapi 1: Njehëso: h= Hapi 2: Njehëso: f(4)(x) Hapi 3: Përcakto c që f(4)(c)=max| f(4)(x)| në segmentin [a,b] Hapi 4: Njehëso n =Hapi 5: Dalje (n) Ndal
Zgjidhja analitike a) I. Vlera e përafërt e integralit te caktuar Dimë nga rregulli i përbërë i Simpsonit që: [ f0 +4(f1+f3+f5+….+f2n-1) + 2(f2+f4+f6+….+f2n-1) + f2n ] n=8
h=
=
=
f0=f(a)=f(1) = 1 ln1 = 0 f1=f(a+h)= (1+1/16) ln( 1+1/16) = 0.0644 f2=f(x1+h)= (17/16 + 1/16) ln(17/16 + 1/16)= 0.1325 f3=f(x2+h)= (19/16) ln(19/16) = 0.2041 Në të njëjtën mënyrë, duke përdorur formulën fi = f(x1+1+h) marrim vlerën e funksioneve deri tek f16 pasi kemi n=8. Pra kemi: f4 = 0.2789 f5 = 0.3569 f6 = 0.4379 f7 = 0.5218 f8 = 0.6082 f9 = 0.6973 f10 = 0.7889 f11 = 0.8830 f12 = 0.9793 f13 = 1.0779 f14 = 1.1786 f15 =f(x14+h) = (31/16) ln(31/16) = 1.2815 f16= f(b) = f(x15+h) = (32/16) ln(32/16) = 1.3862 Si përfundim marrim: = [ 0 + 4(0.0644+0.2041+0.3569+0.5218+0.6973+0.8830+1.0779+1.2815) + 2(0.1325+0.2789+0.4379+0.6082+0.7889+0.9793+1.1786) + 1.3862 ] =
( 4•5.0869 + 2•4.4043 + 1.3862 ) =
II. Përcaktimi i gabimit:
( 20.3476 + 8.8086 + 1.3826 )= 0.6363
En =f(4)(c) En = 8.4•10-8• f(4)(c) (x lnx )(4) =
ku ku
Funksion zbritës.
Marrim c=a = 2 En = -
2 = - 16.8•10-8
III. Gjetja e n, për gabimin En=10-5
b)
cosx dx
I. Vlera e përafërt e integralit te caktuar n=8
h=
=
f0 = f(a)=f(0)= 0 cos0 = 0 f1 = f(a+h)= (0+π/16)2 cos (0+π/16) = 0.0378 f2 = 0.1425 f3 = 0.2885 f4 = 0.4361 f5 =0.5355 f6 =1.5310 f7 =0.3685 f8 =0 f9 =-0.6092 f10 =-1.4752 f11 =-2.5917 f12 =-3.9256 f13 =-5.4174 f14 =-6.9812 f15 =-8.5078
a
f16 =f(b)=f(π)=π2 cosπ=-9.8696 Pra kemi që : cosx dx = [ 0 +4(0.0378+0.2885+0.5355+0.3685-0.6092 -2.5917-5.4174-8.5078) +2(0.1425+0.4361+1.5310-1.4752-3.9256-6.9812) -9.8696] cosx dx = -6.2856 II. Përcaktimi i gabimit: En =-
f(4)(c)
ku
a
dhe f(4)(c)=max| f(4)(x)| [a,b]
(x2 cosx)(4) = (x2-8)cosx+4sinx En=-1.63•10-4 III. Gjetja e n, për gabimin En=10-5
c) I. Vlera e përafërt e integralit te caktuar n=8 f0 = f(a)=f(3)= f1 = f(a+h) = f2 =0.3904 f3 =0.3678 f4 =0.3481
h=
= = 0.4472 = 04165
f5 =0.3308 f6 =0.3152 f7 =0.3013 f8 =0.2887 f9 =0.2772 f10 =0.2667 f11 =0.2570 f12 =0.2481 f13 =0.2398 f14 =0.2321 f15 =f(x14+h)=0.2249 f16 =f(b)=f(5)=0.2182 Si përfundim marrim : = [ 0.4472 +4•(0.4156+0.3678+0.3308+0.3013+0.2772+0.2570+0.2398+0.2249) +2•(0.3904+0.3481+0.3152+0.2887+0.2667+0.2481+0.2321) +0.2182 ] =
(0.4472+4•2.4153+2•2.0893+0.2182) = 0.6043
II. Përcaktimi i gabimit: En =-
f(4)(c)
ku
a
f(4)(c)= En=-9.06*10^-6 III. Gjetja e n, për gabimin En=10-5
dhe f(4)(c)=max| f(4)(x)| [a,b]
Kodi për zgjidhjen e ushtrimeve ne gjuhën C #include #include #include float pikaa(float a,float b, int n); float pikab(float a, float b, float n); float pikac(float a, float b, float n); double gabimia(float a,float b, int n); double gabimib(float a,float b, int n); double gabimic(float a,float b, int n); void perfundim(void); const double pi=M_PI; int main() { int i,a1=0,a2=0,a3=0; for(i=0;i<16;i++){ printf(" %2c",'*'); } printf("\n"); printf(" * Integrimi numerik me metoden e Simsonit *\n"); for(i=0;i<16;i++){ printf(" %2c",'*'); } printf("\n\n\n"); float a,b; char varianti=0; printf(" Varianti a: f(x)=x*lnx \n Varianti b: f(x)=x^2*cosx\n Varianti c: f(x)=1/sqr(x^24)\n\n"); printf("Jepni variantin qe doni te integroni ( ctrl+z per te perfunduar ):\n"); int n=8; scanf("%c",&varianti); while(varianti!=EOF) { switch (varianti){ case 'a': case 'A': printf("\nVarianti a: f(x)=x*lnx\n"); printf("\n\nIntegrali i kerkuar ne kufijt nga %d ne %d eshte %.8lf\n",1,2,pikaa(1,2,8)); printf("Vlera e gabimit per kete integral eshte %.8lf\n",gabimia(1,2,8)); printf("Vlera e integralit bashk me gabim eshte %.8lf\n\n",pikaa(1,2,8)gabimia(1,2,8)); a1++;
break; case 'b': case 'B': printf("\nVarianti b: f(x)=x^2*cosx\n"); printf("\n\nIntegrali i kerkuar ne kufijt nga %d ne %f eshte %.8lf\n",0,pi,pikab(0,pi,8)); printf("Vlera e gabimit per kete integral eshte %.8lf\n",gabimib(0,pi,8)); printf("Vlera e integralit bashk me gabim eshte %.8lf\n\n",pikab(0,pi,8)gabimib(0,pi,8)); a2++; break; case 'c': case 'C': printf("\nVarianti c: f(x)=1/sqr(x^2-4)\n"); printf("\n\nIntegrali i kerkuar ne kufijt nga %d ne %d eshte %.8lf\n",3,5,pikac(3,5,8)); printf("Vlera e gabimit per kete integral eshte %.8lf\n",gabimic(3,5,8)); printf("Vlera e integralit bashk me gabim eshte %.8lf\n\n",pikac(3,5,8)gabimic(3,5,8)); a3++; break; case '\n': case '\t': case ' ': case 13: break; default: break; } if(a1>=1&&a2>=1&&a3>=1){ perfundim(); return 0; } for(int i=0;i<75;i++){ printf("-"); } printf("\n\nJu lutem jepni variantin qe doni te integroni (a,b apo c) ( ctrl+z per te perfunduar ):\n"); scanf("%c",&varianti); varianti=getchar(); } printf("\n\nPunuan:\n"); char emrat[7][50]={"Fatmir Nikolli","Joana Gjoni","Kristian Gjergji","Xhulio Kondakciu","\nPranoi:","Margarita Qirko","\n\nShtypni enter per te dale"}; int k=0; long long koha=time(NULL); koha++;
while(k<7){ if(koha==time(NULL)){ koha++; printf("%s",emrat[k]); k++; printf("\n"); } } int m=getchar(); return 0; } /*Funksionet e integraleve*/ float pikaa(float a, float b, int n) { float h; float shuma=0; h=(b-a)/(2*n); float x; for(x=a;x
shuma=shuma+(h/3)*(sqrt(1/(pow(x,2)-4)) + 4*sqrt(1/(pow(x+h,2)-4)))+ sqrt(1/(pow(x+2*h,2)-4)); } return shuma; } /*Funksionet e Gabimeve*/ double gabimia(float a,float b, int n){ float h=(b-a)/(2*n); double g; g=n*pow(h,5)*2/90; return g; } double gabimib(float a,float b, int n){ float h=(b-a)/(2*n); double g; g=n*pow(h,5)*(-pow(pi,2)+12)/90; return g; } double gabimic(float a,float b, int n){ float h=(b-a)/(2*n); double g; g=n*pow(h,5)*(3.34)/90; return g; }
/* Perfundimi */
void perfundim (void){ printf("\n\nPunuan:\n"); char emrat[7][50]={"Fatmir Nikolli","Joana Gjoni","Kristian Gjergji","Xhulio Kondakciu","\nPranoi:","Margarita Qirko","\n\nShtypni enter per te dale."}; int k=0; long long koha=time(NULL); koha++; while(k<7){ if(koha==time(NULL)){ koha++; printf("%s",emrat[k]); k++; printf("\n"); } }
char m; scanf("%ch",&m); return; }