مصطلحات
العربية: طريقة لاغرونج
الإنجليزية: Lagrange method
الفرنسية: Methode de Lagrange
المبدأ
Pn(x)لتكن حدودية معرفة كالتالي:
Pn(xi) = yi , i = 0,... n
نحسب حدودية الاستكمالPn(x) على الصيغة التأليفة الخطية لحدوديات لاغرونج.
الخوارزم
باعتبار أن: (حدودية لاغرونج)
مثال
نعتبر حدودية الاستكمال P(x) بحيث: P(0) = 0 و P(1)=3 و P(3)=5 و P(9/2)=4 و P(5)=3
احسب قيمةP(x) في 20 نقطة متباعدة بنفس المسافة من المجال [0, 5]
حسابP(2)
x0=0, x1=1, x2=3, x3=9/2, x4=5
y0=0, y1=3, y2=5, y3=4, y4=3
L0(2) = ((2-1)(2-3)(2-9/2)(2-5))/((0-1)(0-3)(0-9/2)(0-5)) = -1/9
L1(2) = ((2-0)(2-3)(2-9/2)(2-5))/((1-0)(1-3)(1-9/2)(1-5)) = 15/28
L2(2) = ((2-0)(2-1)(2-9/2)(2-5))/((3-0)(3-1)(3-9/2)(3-5)) = 5/6
L3(2) = ((2-0)(2-1)(2-3)(2-5))/((9/2-0)(9/2-1)(9/2-3)(9/2-5)) = -32/63
L4(2) = ((2-0)(2-1)(2-3)(2-9/2))/((5-0)(5-1)(5-3)(5-9/2)) = 1/4
P(2) = 0*(-1/9)+3*(15/28)+5*(5/6)+4*(-32/63)+3*(1/4) = 283/63
البرمجة
#include <math.h> #include <conio.h> #define NMAX 5
void it_coef_lagrange(int n,double x[NMAX],double f[NMAX],double d[NMAX]); double it_pol_lagrange(int n,double d[NMAX],double x[NMAX],double alpha);
main() { double alpha,ord; int j; double x[NMAX],f[NMAX]; double d[NMAX]; clrscr(); printf("Méthode de Lagrange\n"); x[0]=0;x[1]=1;x[2]=3;x[3]=4.5;x[4]=5; f[0]=0;f[1]=3;f[2]=5;f[3]=4;f[4]=3; it_coef_lagrange(4,x,f,d); for(j=0;j<=20;j++) { alpha=0.25*j; ord=it_pol_lagrange(4,d,x,alpha); printf("x =%6.2f y =%24.17e \n",alpha,ord); } }
نتيجة البرنامج
في كل عملية حسابية، يظهر البرنامج قيمة المتغير وقيمة ملائمة لحدودية الاستكمال.
x = 0.00 y = 0.0000000000000000e+00
x = 0.25 y = 9.3624751984126964e-01
x = 0.50 y = 1.7380952380952381e+00
x = 0.75 y = 2.4213169642857140e+00
x = 1.00 y = 3.0000000000000000e+00
x = 1.25 y = 3.4865451388888884e+00
x = 1.50 y = 3.8916666666666671e+00
x = 1.75 y = 4.2243923611111116e+00
x = 2.00 y = 4.4920634920634921e+00
x = 2.25 y = 4.7003348214285712e+00
x = 2.50 y = 4.8531746031746019e+00
x = 2.75 y = 4.9528645833333327e+00
x = 3.00 y = 5.0000000000000000e+00
x = 3.25 y = 4.9934895833333339e+00
x = 3.50 y = 4.9305555555555562e+00
x = 3.75 y = 4.8067336309523814e+00
x = 4.00 y = 4.6158730158730155e+00
x = 4.25 y = 4.3501364087301582e+00
x = 4.50 y = 4.0000000000000000e+00
x = 4.75 y = 3.5542534722222223e+00
x = 5.00 y = 3.0000000000000000e+00
الدالتين it_pol_lagrange و it_coef_lagrange
يجب إستدعاء هاتين الدالتين بشكل متتابع:
معايير الدالة it_coef_lagrange:
- n : عدد نقاط الإستكمال
x : جدول يحتوي على أفاصيل الإستكمال
f : جدول يحتوي على قيم f(x)i لنقاط الإستكمال
d : جدول يضم معاملات الحدودية في البداية
تكون النتائج في الجدول d بحيث يتم حساب معاملات الحدوديات بالقاعدة المرتبطة بـ n+1 قسمة مختلفة للمتغير المعطى من خلال المعيار x.
معايير الدالة it_pol_lagrange:
- n :عدد نقاط الإستكمال
d : جدول يحتوي على معاملات حدوديات القاعدة
x : جدول يحتوي على أفاصيل الإستكمال
alpha : قيمة المتغير
ترجع هذه الدالة، بخصوص القيمة المعطاة للمتغير، قيمة حدودية الإستكمال المحسوبة انطلاقا من عناصر جدول معاملات حدوديات القاعدة.
الثابتة الصحيحة NMAX تساوي العدد القصوي لنقاط الإستكمال.
void it_coef_lagrange(int n,double x[NMAX],double f[NMAX],double d[NMAX])
{
int i,j;
for(i=0;i<=n;i++)
{
d[i]=f[i];
for(j=0;j<=n;j++)
if(j!=i) d[i]/=x[i]-x[j];
}
}
double it_pol_lagrange(int n,double d[NMAX],double x[NMAX],double alpha)
{
int i,j;
double l,p;
p=0;
for(i=0;i<=n;i++)
{
l=d[i];
for(j=0;j<=n;j++)
if(j!=i) l*=alpha-x[j];
p+=l;
}
return(p);
}