درونیابی لاگرانژ

Lagrange Interpolating Polynomial
دانلود-برنامه-درونیابی-لاگرانژ-کدنویسی-با-متلب-MATLAB
معرفی

چندجمله ای درونیاب لاگرانژ، چندجمله ای P(x) از درجه ی حداکثر (n-1) است که از میان تعداد n  نقطه ی (x_1, f(x_1)), (x_2, f(x_2)),..., (x_n, f(x_n)) عبور می کند و به صورت زیر محاسبه می گردد:

P(x)=sum{j=1}{n}{P_j(x)}

 که در آن

P_j(x)=y_j prod{k=1; k!=j}{n}{~}{x-x_k}/{x_j-x_k}

که در صورت بسط رابطه ی فوق خواهیم داشت:

P(x) = {(x-x_2)(x-x_3)...(x-x_n)}/{(x_1-x_2)(x_1-x_3)...(x_1-x_n)}y_1+{(x-x_1)(x-x_3)...(x-x_n)}/{(x_2-x_1)(x_2-x_3)...(x_2-x_n)}y_2

+...+{(x-x_1)(x-x_2)...(x-x_{n-1})}/{(x_n-x_1)(x_n-x_2)...(x_n-x_{n-1})}y_n

رابطه ی فوق معمولا در کتب مرجع به شکل زیر نیز نوشته می شود:

P(x) = L_1{y_1} + L_2{y_2} +... +L_n{y_n}

که L_1,L_2,...,L_n در رابطه ی فوق توابع ضریب چندجمله ای (Coefficient polynomials) لاگرانژ نامیده می شوند.

چندجمله ای لاگرانژ ابتدا در سال 1779 توسط Waring منتشر شد، سپس در سال 1783 توسط Euler دوباره کشف شد و در نهایت در 1795 توسط Lagrange منتشر و به نام او شهرت یافت.

هنگامی که از چندجمله ای درونیاب لاگرانژ استفاده می کنیم،  باید مصالحه ای بین داشتن یک منحنی برازش دقیق و یا یک منحنی برازش نرم انجام داد. استفاده از نقاط داده ی بیشتر در برازش به وسیله ی تابع چند جمله ای لاگرانژ، منجر به افزایش درجه ی چندجمله ای می گردد و در نتیجه نوسان بیشتری در تابع درونیاب حاصل مشاهده می گردد. در نتیجه درجه ی بالاتر تابع درونیابی منجر به کاهش دقت تابع در نقاط میانی دو نقطه می شود، هرچند نقاط داده ی ابتدایی دقیق باشند (تصویر زیر را مشاهده کنید).

 

به عنوان مثال برای n=3 تابع لاگرانژ به صورت زیر بدست می آید:

 P(x) = {(x-x_2)(x-x_3)}/{(x_1-x_2)(x_1-x_3)}y_1+{(x-x_1)(x-x_3)}/{(x_2-x_1)(x_2-x_3)}y_2+{(x-x_1)(x-x_2)}/{(x_3-x_1)(x_3-x_2)}y_3

ذکر این نکته لازم است که تابع P(x) از نقاط (x_i,y_i) عبور می کند (یا نقاط (x_i,y_i) در داخل تابع صدق می کنند) بطوریکه برای مثال n=3 می توان نشان داد:

P(x_1) = {(x_1-x_2)(x_1-x_3)}/{(x_1-x_2)(x_1-x_3)}y_1+{(x_1-x_1)(x_1-x_3)}/{(x_2-x_1)(x_2-x_3)}y_2+{(x_1-x_1)(x_1-x_2)}/{(x_3-x_1)(x_3-x_2)}y_3=y_1

P(x_2) = {(x_2-x_2)(x_2-x_3)}/{(x_1-x_2)(x_1-x_3)}y_1+{(x_2-x_1)(x_2-x_3)}/{(x_2-x_1)(x_2-x_3)}y_2+{(x_2-x_1)(x_2-x_2)}/{(x_3-x_1)(x_3-x_2)}y_3=y_2

P(x_3) = {(x_3-x_2)(x_3-x_3)}/{(x_1-x_2)(x_1-x_3)}y_1+{(x_3-x_1)(x_3-x_3)}/{(x_2-x_1)(x_2-x_3)}y_2+{(x_3-x_1)(x_3-x_2)}/{(x_3-x_1)(x_3-x_2)}y_3=y_3

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

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

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

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

    لازم به ذکر است که برنامه های ارائه شده قادر به حل تمامی مثال های قابل حل با این روش عددی و دریافت هر تعداد ورودی مورد نظر کاربران گرامی بوده و به صورت کاملا عمومی (general) کدنویسی شده اند.

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

    ورودی:

    1. طول از مبداء نقاط داده ی ورودی به شکل [x3,x2,x1,…]
    2. عرض از مبداء نقاط داده ی ورودی به شکل [y3,y2,y1,…]

    خروجی:

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

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

    مشاهده ی ورودی و خروجی برنامه در یک مثال نمونه

    نمودار خروجی رسم شده برای مثال نمونه

    مشاهده ی ورودی و خروجی برنامه ی غیر صریح

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