تفاضل تقسیم شده – به زبان ساده

۶۱۴ بازدید
آخرین به‌روزرسانی: ۱۳ اردیبهشت ۱۴۰۲
زمان مطالعه: ۱۴ دقیقه
دانلود PDF مقاله
تفاضل تقسیم شده – به زبان سادهتفاضل تقسیم شده – به زبان ساده

وقتی فقط مجموعه‌ای از نمونه‌های یک تابع در دسترس باشد، «تفاضل تقسیم شده» (Divided Differences) همتای مشتق یک تابع پیوسته خواهد بود. همان‌طور که می‌دانیم، مشتق‌های تابع مشتق‌پذیر y=f(x)y = f ( x ) به صورت زیر تعریف می‌شوند:

997696

f(x)=ddxf(x)=limδx0f(x+δx)f(x)δx,          f(n)(x)=dndxnf(x)=limδx0f(n1)(x+δx)f(n1)(x)δxf' ( x ) = \frac { d } { d x } f ( x ) = \lim _ { \delta x \rightarrow 0 } \frac { f ( x + \delta x ) - f ( x ) } { \delta x } , \; \; \; \; \; f ^ { ( n ) } ( x ) = \frac { d ^ n } { d x ^ n } f ( x ) = \lim_ { \delta x \rightarrow 0 } \frac { f ^ { ( n - 1 ) } ( x + \delta x ) - f ^ { ( n - 1 ) } ( x) } { \delta x }

که در آن، f(x)f ( x ) را می‌توان به عنوان مشتق صفرم تابع در نظر گرفت.

وقتی فقط یک مجموعه نمونه n+1n + 1تایی (x0,y0),,(xn,yn)(x_0,\,y_0), \cdots, (x_n,\,y_n) از تابع در دسترس باشد که در آن، y=f(x)y = f ( x ) با yk=f(xk)y _ k = f ( x _ k ) نمایش داده می‌شود، تفاضل‌های تقسیم شده به صورت بازگشتی بر اساس تفاضل تقسیم شده صفرم تعریف می‌شوند که خود مقدار تابع f[xk]=ykf [ x _ k ] = y _ k (k=0,,nk = 0 , \cdots , n) است. به طور خاص، mmاُمین تفاضل تقسیم شده رو به جلو در نقطه xkx _ k بر اساس یک مجموعه m+1m + 1تایی نقطه پیاپی xkx _ k، ... و xk+mx _ { k + m } تعریف می‌شود:

  • تفاضل تقسیم شده اول بر اساس دو نقطه xkx _ k و xk+1x _ { k + 1 } به ازای k=0,,n1k = 0 , \cdots , n - 1:

$$ \begin {eqnarray}<br /> f [ x _ k , x _ { k + 1 } ] & = & \frac { f ( x _ { k + 1 } ) - f ( x _ k ) } { x _ { k + 1 } - x _ k }<br /> \nonumber \\<br /> & = & \frac { f ( x _ { k + 1 } ) } { x _ { k + 1 } - x _ k } + \frac { f ( x _ k ) } { x _ k - x _ { k + 1 } }<br /> \nonumber<br /> \end {eqnarray} $$

  • تفاضل تقسیم شده دوم بر اساس نقاط xkx _ k، xk+1x _ { k + 1 } و xk+1x _ { k + 1} برای k=0,,n2k = 0 , \cdots , n - 2:

$$ \begin {eqnarray}<br /> f [ x _ k , x _ { k + 1} , x _ { k+ 2} ] &= & \frac { f [ x _ { k + 1 } , x _ { k + 2 } ] - f [ x _k , x _ { k + 1 } ] } { x _ { k + 2 } - x _ k }<br /> = \frac { I} { x _ { k + 2 } - x _k },<br /> \nonumber \\<br /> & = & \frac { f ( x _ k ) } { ( x _ k - x _ { k + 1 } ) ( x _ k - x _ { k + 2 } ) }<br /> + \frac { f ( x _ { k + 1 } ) } { ( x _ { k + 1 } - x _ k ) ( x _ { k + 1 } - x _ { k + 2 } ) }<br /> + \frac { f ( x _ { k + 2 } ) } { ( x _ { k + 2 } - x _ k ) ( x _ { k + 2 } - x _{ k + 1 } ) }<br /> \nonumber<br /> \end {eqnarray} $$

در عبارت بالا، II به صورت زیر است:

I=f(xk+2)f(xk+1)xk+2xk+1f(xk+1)f(xk)xk+1xk\large I = \frac { f ( x _ { k + 2 } ) - f ( x _ { k + 1 } ) } { x _ { k + 2 } - x _ { k + 1 } } - \frac { f ( x _ { k + 1 } ) - f( x _ k ) }{ x _ { k + 1 } -x _ k }

  • تفاضل تقسیم شده سوم بر اساس نقاط xkx _ k، ... و xk+3x _ { k + 3 } برای k=0,,n3k = 0 , \cdots , n - 3:

$$ \begin {eqnarray}<br /> f [ x _ k , x _ { k + 1 } , x_ { k + 2 } , x _ { k +3 } ] & = & \frac { f [ x _ { k + 1 } , x _ { k + 2 } , x _ { k + 3 } ] -f [ x _ k , x _ { k + 1 } , x _ { k + 2 } ] } { x _ { k + 3 } -x _ k }<br /> \nonumber \\<br /> & = & \frac {II} { x _ { k + 3 } - x _ k }<br /> \nonumber \\<br /> & = & \frac { f ( x _ k ) } { ( x _ k - x _ { k + 1 } ) ( x _ k- x _ { k + 2 } ) ( x _ k - x _ { k + 3 } ) }<br /> + \frac { f( x _ { k + 1 } ) } { ( x _ { k + 1 } - x _ k ) ( x _ { k + 1 }- x _ { k + 2 } ) ( x _ { k + 1 } - x _ { k + 3 } ) }<br /> \nonumber \\<br /> & & + \frac { f ( x _ { k + 2 } ) } { ( x _ { k + 2 } - x _ k ) ( x _ { k + 2 } - x _ { k + 1 } ) ( x _ { k + 2 } - x _ { k + 3 } ) }<br /> + \frac { f ( x _ { k + 3 } ) } { ( x _ { k + 3 } - x _ k )( x _ { k + 3 } - x _ { k + 1 } ) ( x _ { k + 3 } - x _ { k + 2 } ) }<br /> \nonumber<br /> \end {eqnarray} $$

در عبارت بالا، IIII برابر است با:

II=f(xk+3)f(xk+2)xk+3xk+2f(xk+2)f(xk+1)xk+2xk+1xk+3xk+1f(xk+2)f(xk+1)xk+2xk+1f(xk+1)f(xk)xk+1xkxk+2xk\large II = \frac { \frac { f ( x _ { k + 3 } ) - f ( x _ { k + 2 } ) } { x _ { k + 3 } - x _ { k + 2 } } - \frac { f ( x _ { k + 2 } ) - f (x _ { k + 1 } ) } { x _ { k + 2} - x_ { k + 1 } } } { x _ { k + 3 } - x _ { k + 1 } } - \frac { \frac { f ( x _ { k + 2 } ) - f ( x _ { k + 1 } ) } {x _ { k + 2 } - x _ { k + 1 } } - \frac { f ( x_ {k + 1 } ) - f ( x _ k ) } { x _ { k + 1 } - x _ k } } { x _ { k + 2 } - x _ k }

  • mmاُمین تفاضل تقسیم شده بر اساس m+1m + 1 نقطه xkx _ k، ... و xk+mx _ { k + m } برای k=0,,n3k = 0 , \cdots , n - 3:

$$ \begin {eqnarray}<br /> f [ x _ k , \cdots , x _ { k + m } ] & = & \frac { f [ x _ { k + 1 } , \cdots , x _ { k + m } ] - f [ x _ k , \cdots , x _ { k + m- 1 } ] } { x _ { k + m } - x _ k }<br /> \nonumber \\<br /> & = & \sum _ { j = 0 } ^ m \frac { f ( x _ { k + j } ) }{ \prod _ { i = 0 , \; i \ne j } ^ m ( x _ { k + j } - x _ { k + i } ) }<br /> \nonumber<br /> \end {eqnarray} $$

عبارت اول از هریک از تفاضل‌های تقسیم شده بالا از تعریف بازگشتی تبعیت می‌کنند که می‌توان آن را به فرم بسط داده شده نیز تبدیل کرد.

فرم بسط داده شده تفاضل‌های تقسیم شده که یک تفاضل تقسیم شده mmاُم را مشخص می‌کند، مجموعی از m+1m + 1 جمله مستقل است که هر کدام از آن‌ها متناظر با یکی از نقطه‌های xk+jx _ { k + j } (j=0,...,mj = 0 , ... , m) است. به عبارت دیگر، ترتیب مشخص این m+1m + 1 نقطه در تفاضل تقسیم شده f[xk,...,xk+m]f [ x _ k , ... , x _ { k + m } ] موضوع مهمی نیست. برای مثال، اگر دو نقطه اول تفاضل دوم را تعویض کنیم، چیزی تغییر نمی‌کند: f[x0,x1,x2]=f[x1,x0,x2]f [ x _ 0 , x _ 1 , x _ 2 ] = f [ x _ 1 , x _ 0 , x _ 2 ].

جدول زیر، چند تفاضل تقسیم شده نخست را برای k=0k = 0 نشان می‌دهد.

چهارمسومدوماولصفرمxx
f[x0]=f(x0)f[x_0]=f(x_0)x0x _ 0
f[x0,x1]f[x_0,x_1]f[x1]=f(x1)f[x_1]=f(x_1)x1x _ 1
f[x0,x1,x2]f[x_0,x_1,x_2]f[x1,x2]f[x_1,x_2]f[x2]=f(x2)f[x_2]=f(x_2)x2x _ 2
f[x0,x1,x2,x3]f[x_0,x_1,x_2,x_3]f[x1,x2,x3]f[x_1,x_2,x_3]f[x2,x3]f[x_2,x_3]f[x3]=f(x3)f[x_3]=f(x_3)x3x _ 3
f[x0,x1,x2,x3,x4]f[x_0,x_1,x_2,x_3,x_4]f[x1,x2,x3,x4]f[x_1,x_2,x_3,x_4]f[x2,x3,x4]f[x_2,x_3,x_4]f[x3,x4]f[x_3,x_4]f[x4]=f(x4)f[x_4]=f(x_4)x4x _ 4

در اینجا، تفاضل‌های تقسیم شده صفرم f[xi]=yif [ x _ i ] = y _ i برای i=0,...,ni = 0 , ... , n هستند و سایر تفاضل‌های تقسیم شده غیر از صفرم را می‌توان از دو همسایه چپ و بالا سمت چپ به دست آورد:

f[xi,,xj]=f[xi+1,,xj]f[xi,,xj1]xjxi,          (j>i)f [ x _ i , \cdots , x _ j ] = \frac { f [ x _ { i + 1 } , \cdots , x _ j ] - f [ x _ i , \cdots , x _ { j - 1 } ] } { x _ j- x _ i } , \; \; \; \; \; ( j > i )

برای مثال، عنصر پایین سمت راست تفاضل تقسیم شده چهارم بر اساس دو تفاضل سوم f[x1,x2,x3,x4]f [ x _ 1 , x _ 2 , x _ 3 , x _ 4 ] در سمت چپ و f[x0,x1,x2,x3]f [ x _ 0 , x _ 1 , x _ 2 , x _ 3 ] در سمت چپ بالا به صورت زیر از همسایه‌هایش به دست می‌آید:

f[x0,x1,x2,x3,x4]=f[x1,x2,x3,x4]f[x0,x1,x2,x3]x4x0f [ x _ 0 , x _ 1 , x _ 2 , x _3 , x _ 4 ] = \frac { f [ x _1 , x _ 2 , x _ 3, x _ 4 ]- f [ x _0 , x _ 1 , x _ 2, x _3 ] } { x_ 4 - x _ 0 }

از آنجا که نقاط اضافه (xi,yi)( x _ i , y _ i ) در دسترس هستند، تفاضل‌های تقسیم شده مرتبه بالاتر را می‌توان به صورت بازگشتی از قبلی‌ها به دست آورد.

پیاده‌سازی تفاضل تقسیم شده

برای مثال، فرض کنید ورودی‌ها به صورت جدول زیر داده شده‌اند:

1111996655xx
1616141413131212y=f(x)y = f ( x )

با توجه به آنچه در بخش قبل گفتیم، خروجی جدول زیر است:

f[xi,xj,xk,xl]f [ x _ i , x _j , x _ k , x _ l ]f[xi,xj,xk]f [ x _ i , x _ j , x _ k ]f[xi,xj]f [ x _ i , x _ j ]y=f(x)y = f ( x ) xx
121255
11
1/6- 1 / 6131366
1/201 / 201/31/3
2/152 / 15141499
11
16161111

و مقدار ff در ۷ برابر با ۱۳٫۴۷ به دست خواهد آمد.

کد پیاده‌سازی تفاضل تقسیم شده این مثال در زبان‌های برنامه‌نویسی مختلف در ادامه ارائه شده است.

پیاده‌سازی تفاضل تقسیم شده در ++C

پیاده‌سازی تفاضل تقسیم شده در Java

پیاده‌سازی تفاضل تقسیم شده در Python

پیاده‌سازی تفاضل تقسیم شده در #C

پیاده‌سازی تفاضل تقسیم شده در PHP

اگر این مطلب برایتان مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

^^

بر اساس رای ۱ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
GeeksforGeeksNumerical Methods
دانلود PDF مقاله
نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *