Masala yechimi algoritmning
B l o k - s x ye m a s i
#include
#include
using namespace std;
float f(float x)
{return 2*x+1; }
int main()
{ float a,b,c,e;
cin>>a>>b>>e;
while(f(a)*f(b)>0)
cin>>a>>b;
do{c=(a+b)/2.;
if(f(a)*f(c)<0){
b=c;}
else a=c;
if(f(a)==0)cout<if(f(b)==0)cout<}while(fabs(b-a)>=e);
c=(a+b)/2.;
cout<return 0;
}
Ketma-ket yaqinlashish (Iteratsiya) usulining ishchi algoritmi.
Algebraik va transcendent tenglamalarni yechish uchun oddiy iteratsiya usuli f(x)0 tenglamani x=(x) , bu yerda |' (x)|<1 ko’rinishga keltirib yechishga asoslangandir, ya’ni: xn= (x n -1) , n=1,2,....
x0-yechimning boshlang’ich qiymati. Tenglama yechimini aniqlash |xn–xn-1| sharti bajarilguncha, rekkurent formula bo’yicha davom ettiriladi. Bu shartning bajarilishi tenglama yechimining e nisbiy aniqlikda aniqlanganligini bildiradi.
1-Masala. x3-10x+2=0 tenglamani 0.01 aniqlikda oddiy iterasiya usuli bilan yeching.
Yechish
Yechim yotgan oraliqni tanlash usuli bilan tanlab olamiz.
F(0)=2>0
F(1)=-7<0
Bo’lgani uchun yechimni [0;1] oraliqdan izlaymiz.
F(x)= x3-10x+2 funksiyani
x=(x) ko’rinishga keltirib olamiz. x= (x3+2)/10;
iteratsiya usulining yaqinlashish shartiga ko’ra |' (x)|<1
' (x)= ; ; shart bajariladi. Demak, iteratsion x= (x3+2)/10 yaqinlashuvchidir.
x0 boshlang’ich taqribiy qiymatga [0;1] oraliqdan ixtiyoriy qiymatni olish mumkin. masalan x0=0
iteratsion ko’rinishdagi formulaga
k=0 da x0=0 ni qo’yib hisoblasak,
=0.2
Bo’lgani uchun, keyingi qadamga o’tamiz.
k=1 da x1=0.2 ni qo’yib hisoblasak,
=0.2008
Bo’lgani uchun, yechim x=0.2008 deb olinadi.
Ayrim tenglamalarni x ga nisbatan ya’ni x=(x) ko’rinishga keltirish murakkabroqdir. Masalan, tenglamani x ga nisbatan yechish murakkabroqdir. Bu holatda quyidagicha yo’l tutiladi.
f(x)0 tenglamani har ikkala tomonini (–1/k) ga ko’paytiramiz va x ni qo’shamiz.
x=x+(-1/k)f(x), bu yerda k-ixtiyoriy son. Demak hosil bo’lgan formulani rekkurent formula sifatida olish mumkin.
xn = xn-1 +(-1/k)f(xn-1) ,
Bunda ham yaqinlashish jarayoni berilgan aniqlikkacha davom ettiriladi.
2-Masala.
tenglamani oddiy iteratsiya usulida yeching
F(x)= funksiyani
x=(x) ko’rinishga keltirib olamiz. x= x+ ;
x0 boshlang’ich taqribiy qiymatga (0;1) oraliqdan ixtiyoriy qiymatni olish mumkin. masalan x0=0.5
Formula bo’yicha
shart bajarilguncha hisoblanadi.
Iteratsiya usuli blok sxemasi
Tenglamarni oddiy iteratsiya usulida yechishning dasturi
#include
#include
using namespace std;
float f(float x)
{
return (exp(x)-2)/10.;
}
int main(){
float x, x0, e,a,b;
int n,i;
cout<<"birinchi yaqinlashish nuqtani kiriting";
cin>>x0;
cout<<"aniqligi";
cin>>e;
cout<<"iterasiyalar soni"; cin>>n;
x=x0;
for(i=1;i<=n;i++){
a=f(x);
if(fabs(x-a)<=0) break;
x=a;
}
cout<<"iterasiyalar soni="<
cout<<"noma'lum had="<
return 0;}
Mustahkamlash uchun masalalar
Quyidagi tenglamalarni oraliqni ikkiga bo’lish usulida 0.01 aniqlikda yeching
1) x3-3x2+5x+1=0
2) x3-20x+5=0
3) 2x3-x-5=0
Quyidagi tenglamalarni oddiy iteratsiya usulida 0.01 aniqlikda yeching
1>0>1>
Do'stlaringiz bilan baham: |