أنت هنا:برمجها»التحليل الرقمي»المعادلات اللاخطية»طريقة نيوتن رابسون
طريقة نيوتن-رابسون طريقة نيوتن-رابسون
قيم الموضوع
(0 أصوات)
 
 

مصطلحات
العربية: طريقة التقسيم الثنائي
الإنجليزية: Newton-Raphson Method
الفرنسية: Méthode de Newton-Raphson

 


المبدأ

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

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


الخوارزم

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

الكرة: 


مثال

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

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

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

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

  

f '(x) = (-4)/(x-1)2 - 1

f(x0) = f(0) = (0+3)/(0-1) - 0 + 2 = -1
f '(x0) = (-4)/(0-1)2 - 1 = -5
x1 = x0 - f(x0)/f '(x0) = 0 - (-1)/(-5) = -1/5

f(x1) = f(-1/5) = (-1/5+3)/(-1/5-1) - (-1/5) + 2 = -2/15
f '(x1) = (-4)/(-1/5-1)2 - 1 = -34/9
x2 = x1 - f(x1)/f '(x1) = -1/5 - (-2/15)/(-34/9) = -4/17


البرمجة

#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_newton(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 Newton\n"); x=0;eps=1e-16; er0=fabs(x-vr_rac); eq_newton(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/pow(er0,2); printf(" rap = %.3e",c); } printf("\n"); er0=er1; } }

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

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

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

x 1 = -2.0000000000000001e-01    err = 3.61e-02    rap = 6.47e-01
x 2 = -2.3529411764705882e-01    err = 7.74e-04    rap = 5.95e-01
x 3 = -2.3606762680025048e-01    err = 3.51e-07    rap = 5.86e-01
x 4 = -2.3606797749971770e-01    err = 7.20e-14    rap = 5.85e-01
x 5 = -2.3606797749978969e-01    err = 0.00e+00    rap = 0.00e+00
x 6 = -2.3606797749978969e-01    err = 0.00e+00

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

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

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


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

 double eq_f(double x)

double eq_fp(double x)

يجب أن تعرفا معا في البرنامج الأساسي، حيث eq_f تمثل الدالة الرياضية f و eq_fp تمثل مشتقتها.

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

الثابتة الصحيحة ITERMAX تساوي العدد القصوي للتكرارات المطلوبة (+1).

void eq_newton(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;
while ((fabs(err) > eps) && (stop==0) && (n < ITERMAX-1))
{
n++;
der=eq_fp(x);
if(der!=0)
{
y=x-eq_f(x)/der;
err=y-x;
x=y;
t[n]=x;
}
else stop=1;
}
}

أضف تعليقا


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

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