|
Azərbaycan Hava Yolları
|
bet | 11/35 | Sana | 06.12.2023 | Hajmi | 2,93 Mb. | | #112648 | Turi | Dərs |
Bog'liq C fakepathKOMPUTER MUHENDISLIYINDE EDEDI USULLAR 01 06 (2) (1)1.2.4. Sadə iterasiya metodu
Bu üsulun əsas üstün cəhəti onun müxtəlif hesablama məsələlərinin həllində istifadə edilməsində və ümumiliyindədir. Ona görə də iterasiya metodu ən dəyərli metodlardan sayılır. Bu metodun ümumi sxemi aşağıdakı kimidir.
Tutaq ki, f(x)=0 tənliyi verilib. Bu tənliyi sadə iterasiya metodu ilə həll etmək üçün onu əvvəlcə x=g(x) şəklinə çeriririk və fərz edirik ki, g(x) funksiyası x=g(x) tənliyinin kökünün müəyyən ətrafında kəsilməzdir. Köklərin tapılması üçün başlanğıc verilənlər kimi x0 başlanğıc qiyməti və dəqiqliyi məlum olmalıdır. Növbəti x1 yaxınlaşması x1=g(x0) düsturu ilə hesablanır. Sonra x0 yaxınlaşması x1 qiymətini alır və proses x0 və x1 qiymətlərinin fərqinin modulu -dan böyük olana qədər davam etdirilir. Qeyd edək ki, həllin alınması üçün |g'(x0)|<1 şərti ödənməlidir.
Bir nümunəyə baxaq.
Nümunə. x=(x-0,1)4+0,1 tənliyinin kökünü iterasiya üsulu ilə tapmaq lazımdır.
Qeyd edək ki, bu metod kökün tapılmasını həmişə təmin etmir. Çünki və x0<1,1 olarsa, x=0,1 kökünün ətrafında |g'(x)| = |4(x-0,1)3 |<1 şərti ödənir və tənliyin kökü tapılır.
Əgər başlanğıc nöqtə olaraq 1,1 götürsək, onda bu nöqtənin ətrafında |g'(x)| >1 və hər bir addımdan sonra kökdən uzaqlaşma baş verir. Ona görə də |g'(x)| >1 olan halda x=g(x) tənliyinin kökünü tapmaq üçün tənliyi x=h(x) şəklinə çevirmək lazımdır. Burada h(x) funksiyası g(x) funksiyasının tərsidir.
Bu məsələnin proqram kodu aşağıdakı kimi olar.
#include
#include
#include
#include "math.h"
using namespace std;
int main ()
{
double X0, X1, Eps, dX, P;
printf ("x0="); // X0= yazisinin ekrana chixarilmasi.
scanf ("%f", &X0); // X0 dəyişəninə klaviaturadan daxil edilmiş qiymətin yazilmasi.
printf ("eps="); // dəqiqliyin ekrana çixarilmasi.
scanf ("%f", &Eps); // Eps-ə klaviaturadan daxil edilmiş qiymətin yazilmasi.
P=fabs(4*pow(X0-0.1,3));
if (P<1)
//Verilmiş ilkin funksiyanin istifade olunmasi
do
{
X1=pow(X0-0.1, 4)+0.1;
dX=fabs(X0-X1);
X0=X1;
}
while(dX>Eps);
else if (P>1)
//ters funksiyanin istifade olunmasi
do
{
X1=pow(X0-0.1,0.25)+0.1 ;
dX=fabs(X0-X1);
X0=X1;
}
while(dX>Eps);
printf("X0 = %lf\n",X0);
return 0;
}
1>1>
|
| |