تفاضل تقسیم شده – به زبان ساده
وقتی فقط مجموعهای از نمونههای یک تابع در دسترس باشد، «تفاضل تقسیم شده» (Divided Differences) همتای مشتق یک تابع پیوسته خواهد بود. همانطور که میدانیم، مشتقهای تابع مشتقپذیر به صورت زیر تعریف میشوند:
که در آن، را میتوان به عنوان مشتق صفرم تابع در نظر گرفت.
وقتی فقط یک مجموعه نمونه تایی از تابع در دسترس باشد که در آن، با نمایش داده میشود، تفاضلهای تقسیم شده به صورت بازگشتی بر اساس تفاضل تقسیم شده صفرم تعریف میشوند که خود مقدار تابع () است. به طور خاص، اُمین تفاضل تقسیم شده رو به جلو در نقطه بر اساس یک مجموعه تایی نقطه پیاپی ، ... و تعریف میشود:
- تفاضل تقسیم شده اول بر اساس دو نقطه و به ازای :
$$ \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} $$
- تفاضل تقسیم شده دوم بر اساس نقاط ، و برای :
$$ \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} $$
در عبارت بالا، به صورت زیر است:
- تفاضل تقسیم شده سوم بر اساس نقاط ، ... و برای :
$$ \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} $$
در عبارت بالا، برابر است با:
- اُمین تفاضل تقسیم شده بر اساس نقطه ، ... و برای :
$$ \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} $$
عبارت اول از هریک از تفاضلهای تقسیم شده بالا از تعریف بازگشتی تبعیت میکنند که میتوان آن را به فرم بسط داده شده نیز تبدیل کرد.
فرم بسط داده شده تفاضلهای تقسیم شده که یک تفاضل تقسیم شده اُم را مشخص میکند، مجموعی از جمله مستقل است که هر کدام از آنها متناظر با یکی از نقطههای () است. به عبارت دیگر، ترتیب مشخص این نقطه در تفاضل تقسیم شده موضوع مهمی نیست. برای مثال، اگر دو نقطه اول تفاضل دوم را تعویض کنیم، چیزی تغییر نمیکند: .
جدول زیر، چند تفاضل تقسیم شده نخست را برای نشان میدهد.
چهارم | سوم | دوم | اول | صفرم | |
در اینجا، تفاضلهای تقسیم شده صفرم برای هستند و سایر تفاضلهای تقسیم شده غیر از صفرم را میتوان از دو همسایه چپ و بالا سمت چپ به دست آورد:
برای مثال، عنصر پایین سمت راست تفاضل تقسیم شده چهارم بر اساس دو تفاضل سوم در سمت چپ و در سمت چپ بالا به صورت زیر از همسایههایش به دست میآید:
از آنجا که نقاط اضافه در دسترس هستند، تفاضلهای تقسیم شده مرتبه بالاتر را میتوان به صورت بازگشتی از قبلیها به دست آورد.
پیادهسازی تفاضل تقسیم شده
برای مثال، فرض کنید ورودیها به صورت جدول زیر داده شدهاند:
با توجه به آنچه در بخش قبل گفتیم، خروجی جدول زیر است:
و مقدار در ۷ برابر با ۱۳٫۴۷ به دست خواهد آمد.
کد پیادهسازی تفاضل تقسیم شده این مثال در زبانهای برنامهنویسی مختلف در ادامه ارائه شده است.
پیادهسازی تفاضل تقسیم شده در ++C
پیادهسازی تفاضل تقسیم شده در Java
پیادهسازی تفاضل تقسیم شده در Python
پیادهسازی تفاضل تقسیم شده در #C
پیادهسازی تفاضل تقسیم شده در PHP
اگر این مطلب برایتان مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای محاسبات عددی
- آموزش محاسبات عددی (مرور و حل مساله)
- مجموعه آموزشهای دروس ریاضیات
- آموزش محاسبات عددی با MATLAB
- روش ژاکوبی — به زبان ساده
- برازش منحنی (Curve Fitting) — به زبان ساده
- تقریب خطی — به زبان ساده
^^