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

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

المبدأ

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

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

لهدا نبدل ميل المماس f(xn, yn) بـ القيمة المصححة في وسط المجال [xn, 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 f(x0+(h/2), y0+(h/2) f(x0, y0))
    = y0 - h( y0 -(h/2)y02 )2
    = 1 - (1/10)(1-(1/20)12)2
    = 3639/4000

x2 = 2/10
y2 = y1 + h f(x1+(h/2), y1+(h/2) f(x1, y1))
    = y1 - h ( y1 -(h/2)y12 )2
    = 3639/4000 - (1/10)(3639/4000-(1/20)(3639/4000)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_tangente_amelioree(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 améliorée\n");
 for(n=10;n<=10000;n*=10)
 {
  nmax=ed_tangente_amelioree(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

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

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

h =  0.1000
    xn              yn            الارتياب
  0.0000  1.0000000000000000e+00  0.00e+00
  0.1000  9.0975000000000006e-01  6.59e-04
  0.2000  8.3434374561872360e-01  1.01e-03
  0.3000  7.7041776079476987e-01  1.19e-03
  0.4000  7.1554809944410103e-01  1.26e-03
  0.5000  6.6794532411677843e-01  1.28e-03
  0.6000  6.2626051029611207e-01  1.26e-03
  0.7000  5.8945803964048626e-01  1.22e-03
  0.8000  5.5672991484754586e-01  1.17e-03
  0.9000  5.2743665240683268e-01  1.12e-03
  1.0000  5.0106563581429009e-01  1.07e-03
     نسبة = 1.07e-01
h =  0.0100
     xn              yn           الارتياب
  0.0000  1.0000000000000000e+00  0.00e+00
  0.1000  9.0909663426283682e-01  5.73e-06
  0.2000  8.3334214754473601e-01  8.81e-06
  0.3000  7.6924116268653298e-01  1.04e-05
  0.4000  7.1429680471874069e-01  1.11e-05
  0.5000  6.6667793341463788e-01  1.13e-05
  0.6000  6.2501113639096484e-01  1.11e-05
  0.7000  5.8824612272614063e-01  1.08e-05
  0.8000  5.5556597816773001e-01  1.04e-05
  0.9000  5.2632575684848548e-01  9.97e-06
  1.0000  5.0000949324076738e-01  9.49e-06
     نسبة = 9.49e-02
h =  0.0010
     xn              yn            الارتياب
  0.0000  1.0000000000000000e+00  0.00e+00
  0.1000  9.0909096552923185e-01  5.64e-08
  0.2000  8.3333342027161306e-01  8.69e-08
  0.3000  7.6923087179426586e-01  1.03e-07
  0.4000  7.1428582377147642e-01  1.09e-07
  0.5000  6.6666677793223084e-01  1.11e-07
  0.6000  6.2500011001218381e-01  1.10e-07
  0.7000  5.8823540111855599e-01  1.07e-07
  0.8000  5.5555565856969691e-01  1.03e-07
  0.9000  5.2631588800981521e-01  9.85e-08
  1.0000  5.0000009386729316e-01  9.39e-08
    نسبة = 9.39e-02
h =  0.0001
     xn              yn            الارتياب
  0.0000  1.0000000000000000e+00  0.00e+00
  0.1000  9.0909090965448325e-01  5.64e-10
  0.2000  8.3333333420152000e-01  8.68e-10
  0.3000  7.6923077025504372e-01  1.02e-09
  0.4000  7.1428571537916319e-01  1.09e-09
  0.5000  6.6666666777792982e-01  1.11e-09
  0.6000  6.2500000109877951e-01  1.10e-09
  0.7000  5.8823529518638029e-01  1.07e-09
  0.8000  5.5555555658449340e-01  1.03e-09
  0.9000  5.2631579045791688e-01  9.84e-10
  1.0000  5.0000000093761643e-01  9.38e-10
    نسبة = 9.38e-02

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

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

 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_tangente_amelioree(double a,double b,double y,long n,double res[101][2]) 
{ double x,h,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++)
{
y += h*ed_f(x+h/2,y+h/2*ed_f(x,y));
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 : حدي المجال [a, b]
    n : عدد المجالات الصغيرة (ذات الطول h)
    nmax : العدد الأقصى للقيم المحتفظ بها
    res : جدول يحفظ القيم (xn, yn)
    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]));
}
}
}
مقالات أخرى من نفس الفئة « طريقة أولير طريقة أولير كوشي »

أضف تعليقا


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

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