طريقة القاطعة طريقة القاطعة
قيم الموضوع
(0 أصوات)
 
 
  

مصطلحات
العربية: طريقة القاطعة
الإنجليزية: Secant Method
الفرنسية: Méthode de Sécante

المبدأ

ننشئ متتالية{xn}، باستعمال الصيغة المحصل عليها باستبدال طريقة نيوتن_رفسن f '(xn) بالمقاربة ، ميل القاطعة يمر بالنقط(xn-1f(xn-1))  و(xnf(xn))


الخوارزم

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

الكرة:  

   النهاية إذن  )


مثال

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

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

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

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

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

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


البرمجة

#include <math.h>
#include <conio.h>
#define ITERMAX 51

double eq_f(double x) { return((x+3.0)/(x-1.0)-x+2.0); }
void eq_secante(double x,double y,double eps,double t[ITERMAX]);
main() { int i; double x,y,eps,vr_rac,er0,er1,c,r; double t[ITERMAX]; clrscr(); vr_rac=2.0-sqrt(5.0); printf("Méthode de la Sécante\n"); x=0;y=-1;eps=1e-16; r=(1+sqrt(5))/2; er0=fabs(x-vr_rac); eq_secante(x,y,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/pow(er0,r); printf(" rap = %.3e",c); } printf("\n"); er0=er1; } }

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

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

تحسب القيمة rap باعتبار الفرق بين خطأ الكرة الحالية وخطأ الكرة السابقة مرفوعة إلى الدقة  (1+)/2 = 1.618

x 1 = -1.0000000000000000e+00    err = 7.64e-01    rap = 7.90e+00
x 2 = -3.3333333333333331e-01    err = 9.73e-02    rap = 1.50e-01
x 3 = -2.0000000000000001e-01    err = 3.61e-02    rap = 1.57e+00
x 4 = -2.3809523809523811e-01    err = 2.03e-03    rap = 4.38e-01
x 5 = -2.3611111111111110e-01    err = 4.31e-05    rap = 9.82e-01
x 6 = -2.3606792633341306e-01    err = 5.12e-08    rap = 5.92e-01
x 7 = -2.3606797750108169e-01    err = 1.29e-12    rap = 8.10e-01
x 8 = -2.3606797749978969e-01    err = 0.00e+00    rap = 0.00e+00

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

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

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

تستدعي الدالة الرئيسة دالة أخرى هي كالتالي:

 double eq_f(double x)

 التي يجب أن تعرف في البرنامج الأساسي وهي تمثل الدالة الرياضية f.
ترجع الدالة في الجدول t التكرارات المتتالية للخوارزم الثنائي.
الثابتة الصحيحة ITERMAX تساوي العدد القصوي للتكرارات المطلوبة (+1).

void eq_secante(double x,double y,double eps,double t[ITERMAX]) 
{
double z,fx,fy,err,der;
int n,stop;

for(n=0;n<ITERMAX;n++)
t[n]=0;

n=0;
err=2*eps;
stop=0;
fx=eq_f(x);
while ((fabs(err) > eps) && (stop==0) && (n < ITERMAX-1))
{
n++;
fy=eq_f(y);
der=fy-fx;
if(der!=0)
{
z=y-fy*(y-x)/der;
x=y;
y=z;
fx=fy;
err=y-x;
t[n]=x;
}
else
stop=1;
}
}

أضف تعليقا


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

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