UNIVERSITETI POLITEKNIK I TIRANES FAKULTETI I TEKNOLOGJISE DHE INFORMACIONIT DETYRË KURSI Tema: Ekzekutimi në një gjuhë programimi i një prej metodave numerike Lënda: Analizë Numerike Klasa: Informatike 2-B Punuan: 1) RalfinaTusha 2) Kristina Bullari 3) Luis Kateshi 4) Xhesika Gjyla Pranoi: Brikena Xhaja Metoda e Simpsonit ( Kuadratura e Simpsonit) Pak histori Rregulli i Simpsonit, i quajtur pas Thomas Simpson megjithëse u përdor edhe nga Kepleri një shekull më parë, ishte një mënyrë për të përafruar integralet pa pasur nevojë te merremi me shumë drejtkëndësha të ngushtë (të cilët gjithashtu nënkuptojne shumë llogaritje dhjetore). E mira e saj është se, megjithëse drejtkëndëshat dhe trapezoidët funksionojnë më mirë për funksionet lineare, Rregulli i Simpsonit funksionon mjaft mirë në kurba.Rregulli i Simpsonit bazohet në faktin se duke pasur parasysh çdo tre pika, ne mund të gjejme ekuacionin e një kuadratiku përmes ketyre 3 pikave. Integrimi numerik b Le të na jetë dhënë për tu njehsuar numerikisht ∫a f(x)dx 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 ∑ni=0 ci f(xi). Këto metoda bazohen në formulën e përafërt: b ∫a f(x)dx ≈ ∑ni=0 ci f(xi) 1. Formula të tilla quhen kuadratura. Numrat c i 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 : b 2. b b b ∫ f(x)dx = ∫ [Ln(x) + En(x)]dx = ∫ Ln(x)dx + ∫ En(x)dx a a a a 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 a+b x0=a, x1= 2 = c, x2=b. (x−x1)(x−x2) (x−x0)(x−x2) (x−x0)(x−x1) L2(x)=l0(x)f(x0)+l1(x)f(x1)+l2(x)f(x2)= (x0−x1)(x0−x2) f(x0)+ (x1−x0)(x1−x2) f(x1)+(x2−x0)(x2−x1) f(x2) (x−b)(x−c) (x−a)(x−b) a+b L2(x)= (a−b)(a−c) f(a)+ (c−a)(c−b) f( 2 (x−a)(x−c) )+ (b−a)(b−c) f(b) f(x)= L2(x)+ E2(x) Pas integrimit te L2(x) dhe E2(x) si perfundim do te marrim: b ∫ f(x)dx = a b−a a+b b − a (4) [f(a) + 4f ( ) + f(b)] − f (c) 6 2 2880 Në këtë mënyrë përftojmë rregullin e thjeshtë ose kuadraturën e thjeshtë të Simpsonit e cila është: b 3. ∫a f(x)dx = b−a a+b 6 2 [ f(a) + 4f ( ) + f(b)] Gabimi i metodes jepet nga: (b−a)5 (4) f (c) 90∗25 4. E2(x)=- = h5 (4) f (c) 90 ku h = b−a 2 Rregulli i perbere i Simpsonit h b ∫a f(x)dx ≈ 3[ f 0 + 4 ( f 1 + f 3 + f 5 + … + f 2 n - 1 ) + 2 ( f 2 + f 4 + f 6 + … + f 2 n - 1 ) + f 2 n ] 5. Gabimi jepet nga: En=− h= (b−a)5 180n4 24 f(4)(c) = − b−a 2n nh5 (4) f (c 90 ku ku f(4)(c)=max | f(4)(x) | a<c<b [a,b] Algoritmet Zgjidhja e 3 kerkesave te ushtrimit do te realizohet duke u mbeshtetur tek agoritmet e paraqitura me poshte: 1.Perafrimin e integralit Hyrje: a,b,n,f(x) Dalje: XI 𝐛 I=∫𝐚 𝐟(𝐱)𝐝𝐱 do ta shenojme me XI: Hapi 1: Njehso h= b−a 2n Hapi 2: Njehso XI0=f(a) Hapi 3: Njehso 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 njehso XI2=XI2+f(x) Perndryshe njehso XI3=XI3+f(x) Hapi 8: Njehso XI=h/3(XI0 + 4XI2+ 2XI3+XI1) Hapi 9: Dalje (XI) Ndal 2.Gabimi En: Hyrje: a,b,n,f(x) Dalje: En Hapi 1: Njehso h= b−a 2n (4) Hapi 2: Njehso f (x) Hapi 3 :Percakto c qe f(4)(c)=max | f(4)(x) | ne segmentin [a,b] Hapi 4:Njehso En=− nh5 (4) f (c) 90 Hapi 5:Dalje (En) Ndal 3.Gjetja e vleres n, kur njohim gabimin Hyrje: a,b,En,f(x) Dalje: n Hapi 1: Njehso h= b−a 2n Hapi 2: Njehso f(4)(x) Hapi 3 :Percakto c qe f(4)(c)=max | f(4)(x) | ne segmentin [a,b] En90 Hapi 4:Njehso n=− h5∗f(4) (c) Hapi 5:Dalje (n) Ndal Zgjidhja analitike 2 a) ∫1 x lnx dx 1.Vlera e perafert e integralit te caktuar Dime nga rregulli i perbere i Simpsonit qe: b ∫a f(x) dx≈h/3 [f0+4(f1+f3+f5+…+f2n-1)+2(f2+f4+f6+…+f2n-1)+f2n] n=8 h= b−a 2n = 2−1 2∗8 1 = 16 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 Ne te njejten menyre duke perdorur formulen fi=f(xi+1+h) marrim vleren 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=0.0779 f14=0.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 perfundim marrim: 2 1/16 ∫1 x lnx dx= 3 [0+4(0.0644+0.2041+0.3569+0.5218+0.6973+0.08830+1.0779+1.2815)+2(0.1325+ 0.2789+0.4379+0.4379+0.6082+0.7889+0.9793+1.1786)+1.3862] = 0.636 2.Percaktimi i gabimit En=− nh5 (4) f (c) 90 = 8.4*10-8* f(4)(c) (x lnx)(4)= 2 15 16 ku f(4)(c)=max | f(4)(x) | 2/13=2 Marrim c=a → 8∗ a<c<b → Funksion zbrites x3 En=− ku ∗ 2 = −16.8 ∗ 10-8 90 3.Gjetja e n, per gabimin En=10-5 nh5 (4) f (c) 90 E n= f(4)(c)=2 h= 𝑏−𝑎 2𝑛 10-5=n* = 2−1 = 2∗8 1 90∗165 1 16 ∗2 n=45*10-5*165 n≈472 Zgjidhja analitike 𝜋 𝑏) ∫ 𝑥 2 𝑐𝑜𝑠𝑥 𝑑𝑥 0 [a,b] 1.Vlera e perafert e integralit te caktuar Dime nga rregulli i perbere i Simpsonit qe: b−a n=8 π h= 2n = 16 b ∫a f(x) dx≈h/3 [f0+4(f1+f3+f5+…+f2n-1)+2(f2+f4+f6+…+f2n-1)+f2n] n=8 h= b−a 2n = 2−1 2∗8 1 = 16 f0=f(a)=f(0)=0*cos0=0 f1=f(a+h)=(0+π/16)2cos(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 f16=f(b)=f(π)=π2cosπ=-98696 Pra kemi qe: π π/16 ∫0 x 2 cosx dx= 3 [0+ 4(0.0378+0.2885+0.5355+0.3685-0.6092-2.5917-5.41748.5078)+2(0.1425+0.4361+1.5310-1.4752-3.9256-6.9812)-9.8696] = -6.2856 2.Percaktimi i gabimit En=− nh5 (4) f (c) 90 ku ku (x2 cosx)(4)= 2 a<c<b f(4)(c)=max | f(4)(x) | = (x2-8)cosx+4sinxx x3 En=−1.63 ∗ 10-4 3.Gjetja e n, per gabimin En=10-5 f(4)(c)=12-π2 h= b−a 2n = π−0 2∗8 π = 16 π5 10-5=n*90∗165 ∗ (12 − π2 ) 90∗165 ∗10−5 n= (12−π2 )∗π5 n≈2 Zgjidhja analitike 5 c) ∫3 𝑑𝑥 √𝑥 2−4 1. Vlera e perafert e integralit te caktuar n=8 b−a 1 h= 2n = 8 1 f0=f(a)=f(3)=√32 =0.4472 −4 f1=f(a+h)= f2= 0.3904 f3= 0.3678 f4=0.3481 f5=0.3308 f6=0.3152 f7=0.3013 1 =0.4165 √(3+1/8)2 −4 [a,b] 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 perfundim marrim: 5 ∫3 dx = √x2 −4 1/8 3 [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.2 887+0.2667+0.2481+0.2321)+0.2182] = 0.6043 2. Percaktimi i gabimit En=− nh5 (4) f (c) 90 ku ku 24∗(x4+12∗x2 +6) f(4)(c) = (x2 −4)4.5 En=−9.06 ∗ 10-6 3. Gjetja e n, per gabimin En=10-5 f(4)(c)=3.34 h= b−a 2n 10-5=n* n= = 5−2 2∗8 35 90∗165 90∗165 ∗10−5 n≈2 3.34∗35 3 = 16 ∗ 3.34 a<c<b f(4)(c)=max | f(4)(x) | [a,b] Kodi për zgjidhjen e ushtrimeve ne gjuhën C #include <stdio.h> #include <math.h> #include <time.h> 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^2-4)\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]={"Kristina Bullari","Luis Kateshi","Ralfina Tusha","Xhesika Gjyla","\n Pranoi: Brikena Xhaja"," ","\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<b;x=x+2*h){ shuma=shuma+(h/3)*(x*log(x) + 4*(x+h)*log(x+h)+ (x+2*h)*log(x+2*h)); } return shuma; } float pikab(float a, float b, float n) { float h; float shuma=0; h=(b-a)/(2*n); float x; for(x=a;x<b;x=x+2*h){ shuma=shuma+(h/3)*(pow(x,2)*cos(x) + 4*pow(x+h,2)*cos(x+h)+pow(x+2*h,2)*cos(x+2*h)); } return shuma; } float pikac(float a, float b, float n) { float h; float shuma=0; h=(b-a)/(2*n); float x; for(x=a;x<b;x=x+2*h){ 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]={"Kristina Bullari","Luis Kateshi","Ralfina Tusha","Xhesika Gjyla","\nPranoi: Brikena Xhaja"," ","\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; } TESTIMI I KODIT NE GJUHEN C: