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

مصطلحات
العربية: طريقة أولير كوشي
الإنجليزية: Euler Cauchy Method
الفرنسية: Méthode d'Euler Cauchy

المبدأ

حل رقميا  y'(x) = f(xy(x))  

بحيث

 x  [ab]   y(a) = y0

نجزئ مجال الاندماج [a, b] إلى N مجال ذي طول يساوي h = ،
محدودة بنقط التجزيء xn = a + nh , n = 0,... N .

لكل أفصول xn ،نحسب القيمة المقربةyn  للقيمة الصحيحةy(xn) لدالة y.

لهدا نبدل ميل المماس f(xn, yn) بمتوسط هدا الميل مع القيمة المصححة فيxn+1  في صيغة أولير.


الخوارزم


مثال

نعتبر مشكلة كوشي: 
مع y(0) = 1

الحل المضبوط هو : 

احسب رقميا قيمy(x)   لـ x = 0, 0.1, 0.2, ..., 1  بأخد  لـ N القوى المتتالية لـ 10.

الخطوتين الأولتين لـ N = 10

h = 1/10
x0 = 0 , y0 = 1

x1 = 1/10
y1 = y0 + (h/2)( f(x0, y0)+f(x0+h, y0+h f(x0, y0)))
     = y0 - (h/2)(y02+( y0 -hy02 )2)
     = 1 - (1/20)(12+(1-(1/10)12)2)
     = 1819/2000

x2 = 2/10
y2 = y1 + (h/2)( f(x1, y1)+f(x1+h, y1+h f(x1, y1)))
     = y1 - (h/2)(y12+( y1 -hy12 )2)
     = 1819/2000 - (1/20)((1819/2000)2+(1819/2000-(1/10)(1819/2000)2)2)


البرمجة

#include <math.h>
#include <conio.h>

double ed_f(double x,double y) { return(-y*y); }
double ed_solution(double x) { return(1.0/(1.0+x)); }
long ed_euler_cauchy(double a,double b,double y,long n,double res[101][2]); void ed_affichage(double a,double b,long n,long nmax,double res[101][2],int nbpts);
main() { int nbpts; long n,nmax; double a,b,y0; double res[101][2]; clrscr(); nbpts=10; a=0;b=1;y0=1; printf("Méthode d'Euler-Cauchy\n"); for(n=10;n<=10000;n*=10) { nmax=ed_euler_cauchy(a,b,y0,n,res); ed_affichage(a,b,n,nmax,res,nbpts); printf(" taux = %.3e\n", fabs(res[nmax][1]-ed_solution(res[nmax][0]))*n*n); } }

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

  • في كل خطوة البرنامج يظهر:

  • قيمة xn

  • قيمة yn

  • الارتياب (الفرق بين ynالمحسوبة والقيمة المضبوطةy(xn) )

ويظهر أيضا ،لكل قيمة h، نسبة التقارب، العلاقة بين الارتياب وh2 في نقطة اعتباطية من المجال (نختار x = 1 )

h =  0.1000
      xn              yn           الارتياب  
  0.0000  1.0000000000000000e+00  0.00e+00
  0.1000  9.0949999999999998e-01  4.09e-04
  0.2000  8.3396214846890249e-01  6.29e-04
  0.3000  7.6997115403838756e-01  7.40e-04
  0.4000  7.1507467430115557e-01  7.89e-04
  0.5000  6.6746716934952444e-01  8.01e-04
  0.6000  6.2579033562771691e-01  7.90e-04
  0.7000  5.8900298033961918e-01  7.68e-04
  0.8000  5.5629374665503883e-01  7.38e-04
  0.9000  5.2702111163636556e-01  7.05e-04
  1.0000  5.0067122128275432e-01  6.71e-04
      نسبة = 6.71e-02
h =  0.0100
      xn              yn           الارتياب  
  0.0000  1.0000000000000000e+00  0.00e+00
  0.1000  9.0909470137414994e-01  3.79e-06
  0.2000  8.3333917324553641e-01  5.84e-06
  0.3000  7.6923765696640956e-01  6.89e-06
  0.4000  7.1429306526662695e-01  7.35e-06
  0.5000  6.6667413571001111e-01  7.47e-06
  0.6000  6.2500738366174291e-01  7.38e-06
  0.7000  5.8824247460205625e-01  7.18e-06
  0.8000  5.5556246758329719e-01  6.91e-06
  0.9000  5.2632240025000077e-01  6.61e-06
  1.0000  5.0000629686925135e-01  6.30e-06
      نسبة = 6.30e-02
h =  0.0010
      xn              yn           الارتياب  
  0.0000  1.0000000000000000e+00  0.00e+00
  0.1000  9.0909094669249346e-01  3.76e-08
  0.2000  8.3333339125673489e-01  5.79e-08
  0.3000  7.6923083756607158e-01  6.83e-08
  0.4000  7.1428578723447389e-01  7.29e-08
  0.5000  6.6666674080246002e-01  7.41e-08
  0.6000  6.2500007330169050e-01  7.33e-08
  0.7000  5.8823536541378374e-01  7.13e-08
  0.8000  5.5555562419600368e-01  6.86e-08
  0.9000  5.2631585513098234e-01  6.57e-08
  1.0000  5.0000006254687424e-01  6.25e-08
      نسبة = 6.25e-02
h =  0.0001
      xn              yn           الارتياب  
  0.0000  1.0000000000000000e+00  0.00e+00
  0.1000  9.0909090946660254e-01  3.76e-10
  0.2000  8.3333333391208975e-01  5.79e-10
  0.3000  7.6923076991357764e-01  6.83e-10
  0.4000  7.1428571501463878e-01  7.29e-10
  0.5000  6.6666666740746761e-01  7.41e-10
  0.6000  6.2500000073247952e-01  7.32e-10
  0.7000  5.8823529483009662e-01  7.12e-10
  0.8000  5.5555555624147845e-01  6.86e-10
  0.9000  5.2631579012980312e-01  6.56e-10
  1.0000  5.0000000062504335e-01  6.25e-10
      نسبة = 6.25e-02

الدالة الرئيسية ed_euler_cauchy
 
معايير هذه الدالة هي كالتالي:
 a و b : حدي المجال [ab]
y : الشرط البدئي y0 = y(a) = y(x0)i
n : عدد المجالات الصغيرة (ذات الطول h)
res : جدول لحفظ القيم (xnyn)
 
 تستدعي الدالة الرئيسية الدالة التالية التي يجب تعريفها في البرنامج الرئيسي أيضا:
  double ed_f(double x,double y)
تمثل هذه الدالة الدالة الرياضية  f.
 يتم حساب القيم التقريبية لـ y(x)i من خلال طريقة أولير كوشي. وترجع بعدد القيم (xnyn) المحفوظة (أقصى حد هو 100). سيتم حفظ هذه القيم في الجدول res :حيث سيحتوي العمود 0 على قيم xn بينما سيمثل العمود 1 قيم yn المقابلة. 
long ed_euler_cauchy(double a,double b,double y,long n,double res[101][2])
{
double x,h,fxy,tol,xx,exx;
long i,j;
h=(b-a)/n;
tol=h/2;
x=a;
res[0][0]=a;
res[0][1]=y;
j=1;
for(i=1;i<=n;i++)
{
fxy=ed_f(x,y);
y += h*(fxy+ed_f(x+h,y+h*fxy))/2;
x += h;
xx=x-a;
exx=floor(100*xx+0.5)/100;
if(fabs(exx-xx)<tol)
{
res[j][0]=x;
res[j][1]=y;
j++;
}
}
return(j-1);
}

 دالة الإظهار ed_affichage

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

  • a و b : حدي المجال [ab]
    n : عدد المجالات الصغيرة (ذات الطول h)
    nmax : العدد الأقصى للقيم المحتفظ بها
    res : جدول يحفظ القيم (xnyn)
    nbpts : عدد القيم المسموح لها بالإظهار على الشاشة

وهي بدورها تستدعي الدالة التالية:

 double ed_solution(double x)

 التي يجب أن تعرف في البرنامج الرئيسي وتعطى الحل الحقيقي لـ  y.

ستقوم دالة الإظهار بإظهار جزئي للقيم (nbpts قيمة كأقصى حد) المحفوظة في الجدول res. وتظهر أيضا نسبة الخطأ، أي الفرق بينالقيمة الحقيقية y(xn)i للحل y(x)i والقيمة المقربة لـ yn.

void ed_affichage(double a,double b,long n,long nmax,double res[101][2],int nbpts)
{
double h,x;
long i;
h=(b-a)/n;
printf("h = %.4f\n",h);
printf(" xn yn Erreur\n");
if(nmax<nbpts)
for(i=0;i<=nmax;i++)
printf("%8.4f %.17e %.3e\n", res[i][0],res[i][1],fabs(ed_solution(res[i][0])-res[i][1]));
else
{
for(i=0;i<=nmax;i++)
{
x=floor(res[i][0]*nbpts+0.5)/nbpts;
if(fabs(x-res[i][0])<0.005)
printf("%8.4f %.17e %.3e\n", x,res[i][1],fabs(ed_solution(res[i][0])-res[i][1]));
}

}
}

أضف تعليقا


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

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