روش اسپلاین درجه سه

Cubic Spline Interpolation
چندجمله ای درونیاب اسپلاین درجه سه با متلب MATLAB
معرفی

با داشتن تابع f در بازه ی delim{[}{a,b}{]} و یک مجموعه ی نقطه ی a = x0 <x1 <...<xn = b، یک درونیاب اسپلاین درجه سه، S، برای f، تابعی است که در شرایط زیر صدق کند:

(1) برای گره های j =0, 1,...,n-1، S(x) یک چندجمله ای درجه سه است که با S_j(x) و در بازه ی بین دو گره تعریف می شود.

(2) مقدار تابع درونیاب در هر گره برابر با خود تابع است:

 S(x_j)= f(x_j)

(3) مقدار دو تابع درونیاب متوالی در یک گره مشترک برابر است:

 S_{j+1}(x_{j+1})= S_j(x_{j+1})

(4) مشتق اول دو تابع درونیاب متوالی در یک گره مشترک برابر است:

 S prime _{j+1}(x_{j+1})= S prime _j (x_{j+1})

(5) مشتق دوم دو تابع درونیاب متوالی در یک گره مشترک برابر است:

 S prime prime _{j+1}(x_{j+1})= S prime prime _j (x_{j+1})

(6) یکی از شرایط مرزی زیر در دو انتهای منحنی باید ارضا گردد:

شرایط مرزی آزاد یا طبیعی (Free):

S prime prime(x_0)= S prime prime(x_n)=0

شرایط مرزی درگیر یا گیردار (Clamped):

S prime (x_0)= f prime(x_0) ~~& ~~ S prime (x_n)= f prime(x_n)

عموما شرایط مرزی گیردار (Clamped) نتایج دقیق تری ارائه می دهند چرا که اطلاعات بیشتری را از تابع اولیه دریافت می کنند.

اکنون با توجه به شرایط بیان شده به استخراج تابع درونیاب اسپلاین درجه سه می پردازیم.

از شرط (1) می دانیم که تابع درونیاب از نوع چندجمله ای درجه سه است:

S_j(x)= a_j + b_j (x-x_j )+ c_j(x-x_j )^2 + d_j(x-x_j )^3

 ضرایب این چند جمله ای مجهول هستند که اکنون با استفاده از سایر شرایط به محاسبه ی آن ها می پردازیم. از شرط (2) ضرایب a_j قابل محاسبه هستند. برای j=0, 1,...,n-1 داریم:

S_j(x_j )= a_j = f(x_j )

 با اعمال شرط (3) بدست می آوریم:

a_{j+1} = S_{j+1}(x_{j+1})= S_j (x_{j+1})= a_j +b_j (x_{j+1}-x_j )+c_j (x_{j+1}-x_j )^2+d_j (x_{j+1}-x_j)^3

با توجه به اینکه عبارت x_{j+1}-x_j در رابطه ی فوق تکرار می شود، برای نمایش ساده تر نامگذاری زیر را انجام می دهیم:

h_j=x_{j+1}-x_j

بنابراین داریم:

a_{j+1} = a_j + b_j h_j + c_j h^2 _{j} + d_j h^3 _{j}

 با کمی اعمال جبری در رابطه ی فوق به رابطه ی زیر در هر بازه ی بین دو نقطه یعنی j=1, 2,...,n-1 می رسیم:

h_{j-1}c_{j-1}+2(h_{j-1} + h_j)c_j + h_j c_{j+1} = {3/h_j} (a_{j+1} -a_j ) - {3/h_{j-1}}(a_j-a_{j-1})

که در رابطه ی فوق تنها ضرایب c_j مجهول هستند و با نوشتن این رابطه به ازای j=1, 2,...,n-1 (یعنی برای هر بازه) یک دستگاه معادله تشکیل می شود که با حل آن ضرایب c_j محاسبه می گردند. برای محاسبه ی ضرایب c_j در نقاط ابتدایی و انتهایی بازه بسته به اینکه چه شرایط مرزی ای مورد نظر باشد عمل می کنیم. اگر شرایط مرزی از نوع آزاد باشد از شرط (6) به دست می آوریم:

c_0 = c_n = 0

و اگر شرایط مرزی گیردار (Clamped) باشد باید دو معادله ی زیر را که از شرط (6) برای شرایط مرزی گیردار استخراج شده اند به دستگاه معادلاتمان برای یافتن همه ی ضرایب c_j اضافه نماییم:

2h_0 c_0 + h_0 c_1 ={3/h_0}(a_1 -a_0) -3f prime (x_0)

h_{n-1} c_{n-1} + 2h_{n-1} c_n = 3f prime (x_n) - {3/h_{n-1}} (a_n -a_{n-1})

اکنون که ضرایب c_j محاسبه گردیده اند، ضرایب b_j و d_j را از روابط زیر محاسبه می نماییم:

b_j = {1/h_j} (a_{j+1} - a_j ) - {h_j/3} (2c_j + c_{j+1})

d_j = {c_{j+1} - c_j}/{3 h_j}

اکنون که تمامی ضرایب اسپلاین درجه سه محاسبه شدند به راحتی می توان توابع اسپلاین را با استفاده از رابطه ی زیر که در ابتدا بیان شد بدست آورد:

S_j(x)= a_j + b_j (x-x_j )+ c_j(x-x_j )^2 + d_j(x-x_j )^3

ذکر این نکته لازم است که برای هر بازه ی بین دو نقطه ی متوالی یک تابع اسپلاین بدست می آید که با رسم آن ها به صورت متوالی کل تابع تقریب در کل بازه بدست می آید.

    برنامه نویسی با MATLAB

    در اینجا با استفاده از نرم افزار متلب (MATLAB) برنامه ای جهت محاسبه و رسم  چندجمله ای درونیاب اسپلاین درجه سه ارائه گردیده است. دو کد برای این منظور در یک فایل فشرده ارائه گردیده است:

    1. کد صریح (explicit) که در خروجی روند حل کامل مسئله را به همراه رسم نمودار و پاسخ نهایی نمایش می دهد

    2. کد غیرصریح (معمولی) که تنها پاسخ نهایی را به همراه رسم نمودار نمایش می دهد

    لازم به ذکر است که برنامه های ارائه شده قادر به حل تمامی مثال های قابل حل با این روش عددی و همچنین با دو شرط مرزی آزاد و گیردار (Clamped and Free) می باشند.

    ورودی ها و خروجی ها

    ورودی:

    1. طول از مبداء نقاط داده ی ورودی به شکل (حداقل سه نقطه) [x3 , x2 , x1,…]
    2. عرض از مبداء نقاط داده ی ورودی به شکل (حداقل سه نقطه) [f3 , f2 , f1,…]
    3. تعیین نوع شرایط مرزی انتهایی آزاد و یا گیردار با انتخاب یک حالت که در ورودی برنامه از کاربر خواسته می شود

    خروجی:

    1. چندجمله ای درونیاب اسپلاین به همراه روند کامل حل
    2. محاسبه ی ضرایب چندجمله ای درونیاب اسپلاین
    3. رسم نمودار

    تصاویر اجرای برنامه

    مشاهده ی ورودی و خروجی برنامه در یک مثال نمونه - صفحه 1

    مشاهده ی ورودی و خروجی برنامه در یک مثال نمونه - صفحه 2

    مشاهده ی ورودی و خروجی برنامه در یک مثال نمونه - صفحه 3

    این برنامه با نسخه های متلب/MATLAB سال های 2010-2013 تست شده است. در صورت استفاده از نسخه ی سال های دیگر لایبریکا تضمین کننده ی اجرای صحیح برنامه نمی باشد.