Topshiriq
Variant №1: Berilgan integralni Simpson hamda Monte-Karlo usulida [a;b] oraliqda hisoblang. Oraliqni bo’linish soni N hamda sinovlar soni M ko’rsatilgan.
f(x)
|
[a;b]
|
N
|
M
|
|
[0;1]
|
12
|
100
|
Blok-sxemasi:
Funksiya grafigi:
Quyida shu misolning C++ dastur kodi va natijasi keltirilgan.
Dastur:
#include
#include
#include
using namespace std;
float function(float x){
return sin(x+3)*log(pow(x,2)+3*x+1);
}
int main(){
int N, M, m, m1=0, m2=0;
float a, b, h, f_max, f_min, P1, P2, S=0, MK=0;
cout<<"Funksiya: f(x) = sin(x+3)*ln(x^2+3*x+1)\n";
cout<<"\na = "; cin>>a;
cout<<"\nb = "; cin>>b;
cout<<"\nN = "; cin>>N;
cout<<"\nM = "; cin>>M;
cout<<"\n\nIntegralni Simpson usulida hisoblaymiz:\n";
if (N%2==0){
h=(b-a)/N;
m=N/2;
for(int i=1; i<=m; i++){
S+=function(a+(2*i-2)*h)+4*function(a+(2*i-1)*h)+function(a+2*i*h);
}
S*=h/3;
cout<<"\nh = "< cout<<"\n\nm = "< cout<<"\n\nIntegral = "< }
else cout<<"\nN juft son bo'lishi kerak!";
cout<<"\n\n\nIntegralni Monte-Karlo usulida hisoblaymiz:";
f_min=function(a+(b-a)*(float)rand()/RAND_MAX);
f_max=function(a+(b-a)*(float)rand()/RAND_MAX);
if (f_max!=0 && f_min!=0){
for(float j=a; j<=b; j+=(b-a)/M){
float f_ins=function(j);
if (f_ins>f_max) f_max=f_ins;
else if (f_ins }
cout<<"\n\nf_max = "< cout<<"\n\nf_min = "< if (f_max>0 && f_min>=0) f_min=0;
else if (f_max<=0 && f_min<0) f_max=0;
}
for(int i=1; i<=M; i++){
float x=a+(b-a)*(float)rand()/RAND_MAX;
float y=f_min+(f_max-f_min)*(float)rand()/RAND_MAX;
if (y>=0 && y<=function(x)) m1++;
else if (y<=0 && y>=function(x)) m2++;
}
P1=(float)m1/M;
P2=(float)m2/M;
MK=P1*f_max*(b-a)+P2*f_min*(b-a);
cout<<"\n\nm = "< cout<<"\n\nn = "< cout<<"\n\nIntegral = "<
return 0;
}
Natija:___Tenglamalarni_yechishda_Nyuton_(urinmalar)_va_vatarlar_usullari._Yaqinlashish_tezligi._Nazariy_qism'>Natija:
Tenglamalarni yechishda Nyuton (urinmalar) va vatarlar usullari. Yaqinlashish tezligi.
Nazariy qism
f(x) = 0 tenglama berilgan. Biror [a;b] oraliqda f(a) ‧ f(b) < 0 bo’lsin. [a;b] oraliqdagi (b,f(b)) nuqtadan urinma o’tkazamiz:
…… (1)
Nyuton (urinmalar) usuli yordamida [a;b] oraliqda (2) aniqlikda taqribiy ildizlarini topish algoritm blok sxemasi:
f(x) = 0 tenglama berilgan. Biror [a;b] oraliqda f(a) ‧ f(b) < 0 bo’lsin. [a;b] oraliqdagi (a,f(a)) va (b,f(b)) nuqtalardan vatar o’tkazamiz:
……
(3)
Vatarlar usuli yordamida [a;b] oraliqda (4) aniqlikda taqribiy ildizlarini topish algoritm blok sxemasi:
Topshiriq
Variant №1: Vatarlar va urinmalar usullari yordamida quyidagi tenglamalar taqribiy ildizlarini ε = 0,001 aniqlikda hisoblang:
a) b)
Yechish:
a) Funksiya grafigi:
‒ Vatarlar usuli.
Ma’lumki, funksiya [0,1;1] oraliqda teoremalarning hamma shartlarini bajaradi.
Funksiyaning 2-darajali hosilasi: .
va dan bo’lgani uchun deb olamiz.
va ni e’tiborga olib, birinchi yaqinlashish x1 ni hisoblaymiz:
.
Yaqinlashish shartini tekshiramiz:
bo’lgani uchun x2 ni topamiz:
; ;
.
bo’lgani uchun x3 ni topamiz:
; ;
.
Yana bo’lgani uchun x4 ni topamiz:
; ;
.
Yaqinlashish sharti bajarilganligi uchun taqribiy yechim deb ni olish mumkin.
Quyida shu misolning C++ dastur kodi va natijasi keltirilgan.
Dastur:
#include
#include
using namespace std;
float f(float x){
return log(x)+pow((x+1),3);
}
int main(){
float a, b, x0, x, e, i;
cout<<"a = "; cin>>a;
cout<<"\nb = "; cin>>b;
cout<<"\ne = "; cin>>e;
float c=a-f(a)*((b-a)/(f(b)-f(a)));
if(f(a)*f(c)<0){
x0=b;
i=a;
}
else {
x0=a;
i=b;
}
x=x0-(x0-i)*f(x0)/(f(x0)-f(i));
while(abs(x-x0)>=e){
x0=x;
x=x0-(x0-i)*f(x0)/(f(x0)-f(i));
};
cout<<"\nTenglama yechimi = "< return 0;
}
Natija:___b_)_Funksiya_grafigi:__‒_Vatarlar_usuli.'>Natija:
‒ Urinmalar usuli.
funksiya [0;1] oraliqda yuqoridagi shartni qanoatlantiradi.
Funksiya hosilasi: .
Funksiyaning 2-darajali hosilasi: .
va dan bo’lgani uchun deb olamiz.
va ni e’tiborga olib, birinchi yaqinlashish x1 ni hisoblaymiz:
.
Yaqinlashish shartini tekshiramiz:
bo’lgani uchun x2 ni topamiz:
; ;
.
bo’lgani uchun x3 ni topamiz:
; ;
.
Yana bo’lgani uchun x4 ni topamiz:
; ;
.
Yaqinlashish sharti bajarilganligi uchun tenglamaning = 0,001 aniqlikdagi taqribiy yechimi bo’ladi.
Quyida shu misolning C++ dastur kodi va natijasi keltirilgan.
Dastur:
#include
#include
using namespace std;
float f(float x){
return log(x)+pow((x+1),3);
}
float f1(float x){
return 1/x+3*pow((x+1),2);
}
int main(){
float a, b, x0, x, e;
cout<<"a = "; cin>>a;
cout<<"\nb = "; cin>>b;
cout<<"\ne = "; cin>>e;
float c=a-f(a)*((b-a)/(f(b)-f(a)));
if(f(a)*f(c)<0) x0=a;
else x0=b;
x=x0-f(x0)/f1(x0);
while(abs(x-x0)>=e){
x0=x;
x=x0-f(x0)/f1(x0);
};
cout<<"\nTenglama yechimi = "< return 0;
}
Natija:
b) Funksiya grafigi:
‒ Vatarlar usuli.
Ma’lumki, funksiya [-3;-2] oraliqda teoremalarning hamma shartlarini bajaradi.
Funksiyaning 2-darajali hosilasi: .
va dan bo’lgani uchun deb olamiz.
va ni e’tiborga olib, birinchi yaqinlashish x1 ni hisoblaymiz:
.
Yaqinlashish shartini tekshiramiz:
bo’lgani uchun x2 ni topamiz:
; ;
.
bo’lgani uchun x3 ni topamiz:
; ;
.
bo’lgani uchun x4 ni topamiz:
; ;
.
bo’lgani uchun x5 ni topamiz:
; ;
.
bo’lgani uchun x6 ni topamiz:
; ;
.
Yana bo’lgani uchun x7 ni topamiz:
; ;
.
Yaqinlashish sharti bajarilganligi uchun taqribiy yechim deb ni olish mumkin.
Quyida shu misolning C++ dastur kodi va natijasi keltirilgan.
Dastur:
#include
#include
using namespace std;
float f(float x){
return pow(x,3)+2*pow(x,2)+2;
}
int main(){
float a, b, x0, x, e, i;
cout<<"a = "; cin>>a;
cout<<"\nb = "; cin>>b;
cout<<"\ne = "; cin>>e;
float c=a-f(a)*((b-a)/(f(b)-f(a)));
if(f(a)*f(c)<0){
x0=b;
i=a;
}
else {
x0=a;
i=b;
}
x=x0-(x0-i)*f(x0)/(f(x0)-f(i));
while(abs(x-x0)>=e){
x0=x;
x=x0-(x0-i)*f(x0)/(f(x0)-f(i));
};
cout<<"\nTenglama yechimi = "< return 0;
}
Natija:
‒ Urinmalar usuli.
funksiya [-3;-2] oraliqda yuqoridagi shartni qanoatlantiradi.
Funksiya hosilasi: .
Funksiyaning 2-darajali hosilasi: .
va dan bo’lgani uchun deb olamiz.
va ni e’tiborga olib, birinchi yaqinlashish x1 ni hisoblaymiz:
.
Yaqinlashish shartini tekshiramiz:
bo’lgani uchun x2 ni topamiz:
; ;
.
bo’lgani uchun x3 ni topamiz:
; ;
.
Yana bo’lgani uchun x4 ni topamiz:
; ;
.
Yaqinlashish sharti bajarilganligi uchun tenglamaning = 0,001 aniqlikdagi taqribiy yechimi bo’ladi.
Quyida shu misolning C++ dastur kodi va natijasi keltirilgan.
Dastur:
#include
#include
using namespace std;
float f(float x){
return pow(x,3)+2*pow(x,2)+2;
}
float f1(float x){
return 3*pow(x,2)+4*x;
}
int main(){
float a, b, x0, x, e;
cout<<"a = "; cin>>a;
cout<<"\nb = "; cin>>b;
cout<<"\ne = "; cin>>e;
float c=a-f(a)*((b-a)/(f(b)-f(a)));
if(f(a)*f(c)<0) x0=a;
else x0=b;
x=x0-f(x0)/f1(x0);
while(abs(x-x0)>=e){
x0=x;
x=x0-f(x0)/f1(x0);};
cout<<"\nTenglama yechimi = "< return 0;
}
Natija:
XULOSA
Algebraik tenglamalar ildizlarini taqribiy hisoblash usullaridan aniqlik darajasi boshqa usullarga nisbatan kattaroq bo’lgan usuli urinmalar usulidir. Urinmalar usulini Nyuton usuli deb ham ataydilar.
Bu usul qo’llanganda tenglamaning boshlangich yechimi x0 tanlab olinadi va ketma–ket yaqinlashishlar
formula bilan hisoblanadi.
Vatarlar usuli qo’llanganda ketma–ket yaqinlashishlar
formula bilan hisoblanadi.
Nyuton usulidan foydalanishda paydo bo’ladigan qiyinchilik, bu boshlang'ich yaqinlashishni tanlashdir. U yechilayotgan tenglama ildizining yaqin atrofida bo'lishi kerak. Shuning uchun, ba'zida aralash algoritmni qo'llash maqsadga muvofiqdir.
Tenglamaning taqribiy yechimlarini vatarlar va urinmalar usuli bilan topganda aniq yechimga ikki chekkadan yaqinlashib kelinadi. Shuning uchun ikkala usulni bir vaqtning o’zida qo’llash natijasida maqsadga tezroq erishish mumkin. Bu usulni kombinatsiyalangan usul deb atashadi.
Do'stlaringiz bilan baham: |