طريقة التوازي طريقة التوازي
قيم الموضوع
(1 تصويت)
  
 

مصطلحات
العربية: طريقة التقسيم الثنائي
الإنجليزية: Parallel Method
الفرنسية: Méthode de la parallèle

المبدأ

أوجد   بحيث  f() = 0

ننشئ متتالية {xn}، بحيث تكون الكرة xn+1 تتقاطع مع المحور الأفقي لمستقيم موازية لاتجاه ثابت (ذي الميل  ) ومار من النقطة (xnf(xn)) .


الخوارزم

تهيئ: ليكن x0 مجاور لـ .

الكرة:  


مثال

نعتبر المعادلة :  f(x) = (x+3)/(x-1) - x + 2 = 0

هذه المعادلة تقبل جذرين هما :  2 +   و  2 -

حساب رقمي للجذر السالب، نعتبر نقطة الانطلاق x0 = 0 .

الكرتان الأوليتان

نعتبر (كمثال) لـ :.1/ f '(x0)

f '(x) = (-4)/(x-1)2 - 1
f '(x0) = (-4)/(0-1)2 - 1 = -5
= -1/5

f(x0) = f(0) = (0+3)/(0-1) - 0 + 2 = -1

 f(x0) = 0 - (-1/5)(-1) = -1/5

x1 = x0 -

f(x1) = f(-1/5) = (-1/5+3)/(-1/5-1) - (-1/5) + 2 = -2/15

 f(x1) = -1/5 - (-1/5)(-2/15) = -17/75

x2 = x1 -


البرمجة

#include <math.h>
#include <conio.h>
#define ITERMAX 51
double eq_f(double x) { return((x+3.0)/(x-1.0)-x+2.0); }
double eq_fp(double x) { return(-4.0/((x-1.0)*(x-1.0))-1.0); }
void eq_parallele(double x,double eps,double t[ITERMAX]);
main() { int i; double x,eps,vr_rac,er0,er1,c; double t[ITERMAX]; clrscr(); vr_rac=2.0-sqrt(5.0); printf("Méthode de la parallèle\n"); x=0;eps=1e-16; er0=fabs(x-vr_rac); eq_parallele(x,eps,t); for(i=1;i<ITERMAX;i++) if (t[i]!=0) { er1=fabs(t[i]-vr_rac); printf("x%2d = %.17e err = %.3e",i,t[i],er1); if (er0!=0) { c=er1/er0; printf(" rap = %.3e",c); } printf("\n"); er0=er1; } }

نتيجة البرنامج

في كل كرة البرنامج يظهر قيمة الكرة والإرتياب (أي الفرق بين الكرة والقيمة الحقيقية)

  • تحسب القيمة rap باعتبار الفرق بين خطأ الكرة الحالية وخطأ الكرة السابقة.

x 1 = -2.0000000000000001e-01    err = 3.61e-02    rap = 1.53e-01
x 2 = -2.2666666666666668e-01    err = 9.40e-03    rap = 2.61e-01
x 3 = -2.3350724637681161e-01    err = 2.56e-03    rap = 2.72e-01
x 4 = -2.3536299232656444e-01    err = 7.05e-04    rap = 2.75e-01
x 5 = -2.3587333504468183e-01    err = 1.95e-04    rap = 2.76e-01
x 6 = -2.3601419569949003e-01    err = 5.38e-05    rap = 2.76e-01
x 7 = -2.3605311380111046e-01    err = 1.49e-05    rap = 2.76e-01
x 8 = -2.3606386936810284e-01    err = 4.11e-06    rap = 2.76e-01
x 9 = -2.3606684204726663e-01    err = 1.14e-06    rap = 2.76e-01
x10 = -2.3606766366897697e-01    err = 3.14e-07    rap = 2.76e-01
x11 = -2.3606789075912812e-01    err = 8.67e-08    rap = 2.76e-01
x12 = -2.3606795352526366e-01    err = 2.40e-08    rap = 2.76e-01
x13 = -2.3606797087339393e-01    err = 6.63e-09    rap = 2.76e-01
x14 = -2.3606797566829896e-01    err = 1.83e-09    rap = 2.76e-01
x15 = -2.3606797699357812e-01    err = 5.06e-10    rap = 2.76e-01
x16 = -2.3606797735987625e-01    err = 1.40e-10    rap = 2.76e-01
x17 = -2.3606797746111857e-01    err = 3.87e-11    rap = 2.76e-01
x18 = -2.3606797748910127e-01    err = 1.07e-11    rap = 2.76e-01
x19 = -2.3606797749683550e-01    err = 2.95e-12    rap = 2.76e-01
x20 = -2.3606797749897318e-01    err = 8.17e-13    rap = 2.76e-01
x21 = -2.3606797749956401e-01    err = 2.26e-13    rap = 2.76e-01
x22 = -2.3606797749972733e-01    err = 6.24e-14    rap = 2.76e-01
x23 = -2.3606797749977246e-01    err = 1.72e-14    rap = 2.76e-01
x24 = -2.3606797749978492e-01    err = 4.77e-15    rap = 2.77e-01
x25 = -2.3606797749978839e-01    err = 1.30e-15    rap = 2.73e-01
x26 = -2.3606797749978933e-01    err = 3.61e-16    rap = 2.77e-01
x27 = -2.3606797749978958e-01    err = 1.11e-16    rap = 3.08e-01
x28 = -2.3606797749978967e-01    err = 2.78e-17    rap = 2.50e-01

الدالة الرئيسية eq_parallele

معايير هذه الدالة هي كالتالي:

x: يمثل القيمة البدئية x0 المخصصة لانطلاق عمل الخوارزم.
eps : الدقة المطلوبة
t : جدول ذي الدرجة ITERMAX.

تستدعي الدالة الرئيسة دالتين أخرتين هما كالتالي:
 double eq_f(double x)
 double eq_fp(double x)
 يجب أن تعرفا معا في البرنامج الأساسي، حيث eq_f تمثل الدالة الرياضية f و eq_fp تمثل مشتقتها.

تُرجع الدالة في الجدول t التكرارات المتتالية للخوارزم الثنائي.

الثابتة الصحيحة ITERMAX تساوي العدد القصوي للتكرارات المطلوبة (+1).
void eq_parallele(double x,double eps,double t[ITERMAX])
{
double y,err,der;
int n,stop;
for(n=0;n<ITERMAX;n++)
t[n]=0;
n=0;
err=2*eps;
stop=0;
der=eq_fp(x);
while ((fabs(err) > eps) && (stop==0) && (n < ITERMAX-1))
{
n++;
if(der!=0)
{
y=x-eq_f(x)/der;
err=y-x;
x=y;
t[n]=x;
}
else stop=1;
}
}
مقالات أخرى من نفس الفئة « طريقة نيوتن رابسون طريقة ستفنسن »

أضف تعليقا


إصنعها يريد أن يتأكد أنك لست روبوتا، لذلك أحسب ما يلي:

كود امني
تحديث