Uploaded by xhesika gjyla

Detyre kursi ne analize numerike

advertisement
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:
Download