درون یابی خطی — به زبان ساده (+ دانلود فیلم آموزش رایگان)

۱۵۳۶۷ بازدید
آخرین به‌روزرسانی: ۲۹ مهر ۱۴۰۲
زمان مطالعه: ۶۲ دقیقه
درون یابی خطی — به زبان ساده (+ دانلود فیلم آموزش رایگان)

در آموزش‌های پیشین مجله فرادرس، با برخی از روش‌های درون‌یابی، از قبیل درون‌یابی چندجمله‌ای، لاگرانژ، هرمیت و اسپلاین آشنا شدیم. در این آموزش، درون یابی خطی را معرفی خواهیم کرد.

محتوای این مطلب جهت یادگیری بهتر و سریع‌تر آن، در انتهای متن به صورت ویدیویی نیز ارائه شده است.

«تابع درون‌یابی» (Interpolation Function) تابعی است که دقیقاً از یک مجموعه نقطه داده عبور می‌کند. توابع درون‌یاب داده‌های جدولی به فرم زیر را درون‌یابی می‌کنند.

$$ \begin {array} { | c | c | }
\hline x & { \sin ( x ) } \\
\hline 0 . 0 & { 0 . 0 0 0 0 0 0 } \\
\hline 0 . 5 & { 0 . 4 7 9 4 2 6 } \\
\hline 1 . 0 & { 0 . 8 4 1 4 7 1 } \\
\hline 1 . 5 & { 0 . 9 9 7 4 9 5 } \\
\hline 2 . 0 & { 0 . 9 0 9 2 9 7 } \\
\hline 2 . 5 & { 0 . 5 9 8 4 7 2 } \\
\hline
\end {array} $$

در جدول داده‌ها، تابع تنها در تعداد محدودی نقطه یا مجموعه گسسته‌ای از مقادیر متغیر مستقل مشخص شده است. می‌توان از درون‌یابی برای یافتن مقادیر تابعی در سایر مقادیر متغیرهای مستقل، مثلاً $$ \sin (0.63253)$$ استفاده کرد. در روش‌های عددی نیز، مشابه داده‌های جدولی، مقادیر تابع تنها در تعداد گسسته‌ای از نقاط مشخص است. با استفاده از درون‌یابی می‌توانیم تابع را در هر نقطه یا از فضا توصیف کنیم یا حداقل تقریب بزنیم. از درون‌یابی برای مواردی چون درون‌یابی مقادیر با محاسبات، انتگرال‌گیری عددی، مشتق‌گیری عددی و روش اجزای محدود استفاده می‌کنیم.

یک دانشجو نشسته در کتابخانه در حال مطالعه و فکر کردن (تصویر تزئینی مطلب درونیابی خطی)

از درون‌یابی معمولاً برای به دست آوردن یک توصیف تابعی از داده‌های اندازه‌گیری شده استفاده نمی‌شود، زیرا خطاهای داده‌ها ممکن است منجر به یک نمایش ضعیف از تابع شود.

درون یابی خطی

به طور ساده، می‌توان گفت که «درون یابی خطی» (Linear Interpolation) عبور دادن یک خط راست بین دو نقطه داده است.

درون یابی خطی

در شکل بالا، $$ f ( x) $$ تابع دقیق یا اصلی است که مقادیر آن تنها در تعدادی نقطه گسسته معلوم است. $$ g ( x ) $$ نیز تقریب درون‌یابی شده برای $$ f ( x )$$ است. $$ x _ 0 $$ و $$ x _ 1 $$ نقطه داده‌های هستند که به آن‌ها نقاط یا گره‌های درون‌یابی نیز می‌گویند.

به عبارت دیگر، به فرم جدولی می‌توانیم بنویسم:

$$ \begin {array} { l l }
{ x _ { o } } & { f \left ( x _ { o } \right ) } \\
{ x } & { g ( x ) } \\
{ x _ { 1 } } & { f \left ( x _ { 1 } \right ) }
\end {array} $$

اگر $$ g ( x ) $$ یک تابع خطی باشد، داریم:

$$ g ( x ) = A x + B \;\;\;\;\; ( 1 ) $$

برای عبور دادن خط از نقاط $$ ( x _ 0 , f ( x _ 0 )) $$ و $$ ( x _ 1 , f (x _ 1 )) $$، باید داشته باشیم:

$$ \begin {array} { l }
{ g \left ( x _ { 0 } \right ) = f \left ( x _ { 0 } \right ) \quad \Rightarrow \quad A x _ { 0 } + B = f \left ( x _ { 0 } \right ) }\;\;\;\;\; ( 2) \\
{ g \left ( x _ { 1 } \right ) = f \left ( x _ { 1 } \right ) \quad \Rightarrow \quad A x _ { 1 } + B = f \left ( x _ { 1 } \right ) }\;\;\;\;\; ( 3 ) \end {array} $$

همان‌طور که می‌بینیم، یک دستگاه معادلات خطی با دو معادله و دو مجهول داریم. حال باید $$ A $$ و $$ B $$ را محاسبه کنیم.

با استفاده از معادله (۲)، می‌توان نوشت:

$$ B = f ( x _ 0 ) - A x _ 0 $$

با جایگذاری این عبارت در (۳)، خواهیم داشت:

$$ A x _ 1 + f ( x _ 0 ) - A x _ 0 = f ( x _ 1 ) $$

$$ \begin {aligned}
& A = \frac { f \left ( x _ { 1 } \right ) - f \left ( x _ { 0 } \right ) } { x _ { 1 } - x _ { } } \\
& B = \frac { f \left ( x _ { 0 } \right ) x _ { 1 } - f \left ( x _ { 1 } \right ) x _ { 0 } } { x _ { 1 } - x _ { 0 } }
\end {aligned} $$

حال که $$ A $$ و $$ B $$ را به دست آوردیم، آن‌ها را در (۱) قرار می‌دهیم و خواهیم داشت:

$$ \boxed { g ( x ) = f \left ( x _ { 0 } \right ) \frac { \left ( x _ { 1 } - x \right ) } { \left ( x _ { 1 } -x _ { 0 } \right ) } + f \left ( x _ { 1 } \right ) \frac { \left ( x - x _ { 0 } \right ) } { \left ( x _ { 1 } - x _ { 0 } \right ) } } $$

این همان فرمول درون یابی خطی است.

دو دانشجو در حال قدم زدن در محوطه دانشگاه

مثال ۱

مقادیر $$ x _ 0 $$ و $$ x _ 1 $$ و $$ f ( x _ 0 ) $$ و $$ f ( x _ 1 )$$ به صورت زیر داده شده‌اند. با استفاده از درون یابی خطی مقدار $$g(0. 632)$$ را به دست آورید.

$$ \begin {array} { | c | c | }
\hline x & { f ( x ) = \sin x } \\
\hline x _ { 0 } = 0 .5 & { f \left ( x _ { 0 } \right ) = 0 . 4 7 9 4 2 5 5 4 } \\
\hline 0 . 6 3 2 & { g ( 0 . 6 3 2 ) = ? } \\
\hline x _ { 1 = 1 . 0 } & { f \left ( x _ { 1 } \right ) = 0 . 8 4 1 4 7 0 9 9 } \\
\hline \end {array} $$

با استفاده از فرمول درون یابی خطی که به دست آوردیم، داریم:

$$ g ( 0 . 6 3 2 ) = 0 . 4 7 9 4 2 5 \frac { ( 1 . 0 - 0 . 6 3 2 ) } { ( 1. 0- 0 . 5 ) }+ 0 . 8 4 1 47 0 9 9 \frac { ( 0 .6 3 2 - 0 . 5 ) }{ ( 1 . 0- 0 . 5 ) } $$

بنابراین، $$ g ( 0. 6 3 2 ) = 0.57500 $$ است.

خطای درون یابی خطی

خطای درون یابی خطی به صورت زیر تعریف می‌شود:

$$ e ( x ) \equiv f ( x ) -  g ( x ) $$

که اختلاف بین تابع دقیق $$ f ( x ) $$ و تابع درون‌یاب یا تقریب‌زننده $$ g ( x ) $$ است. در نقاط درون‌یابی $$ x _ 0 $$ و $$ x _ 1 $$، خطا، به ترتیب، $$ e ( x _ 0 ) = 0 $$ و $$ e ( x _ 1 ) = 0 $$ است. دلیل صفر بودن خطا در این نقاط آن است که طبق تعریف، گفتیم $$ g ( x _ 0 ) = f ( x _ 0 ) $$ و $$ g ( x _ 1 ) = f ( x _ 1 ) $$ است.

محاسبه $$ \large e ( x ) $$

خطای $$ e ( x ) $$ را می‌توان به سادگی و طی گام‌های زیر به دست آورد.

گام ۱: بسط سری تیلور $$ f ( x ) $$ را حول $$ x _ 0 $$ می‌نویسیم:

$$ f ( x ) = f \left ( x _ { 0 } \right ) + \left.\left ( x - x _ {0 } \right ) \frac { d f } { d x } \right | _ { x = x _ { 0 } } + \left. \frac { \left ( x - x _ { 0 } \right ) ^ { 2 } } { 2 ! } \frac { d ^ { 2 } f } { d x ^ { 2 } } \right | _ { x = \xi } \quad \text {, } x _ { 0 } \leq \xi \leq x \;\;\;\;\; ( 4 ) $$

جمله سوم، باقیمانده واقعی است و همه جملات دیگر در سری را نشان می‌دهد، زیرا در $$ x = \xi $$ تعیین می‌شود.

گام ۲: عبارت $$ \left.\frac { d f } { d x } \right | _ { x = x _ { 0 } } $$ را برحسب $$ f ( x _ 0 ) $$ و $$ f ( x _ 1 ) $$ می‌نویسیم. با قرار دادن $$ x = x _ 1 $$ در (۴) به این هدف می‌رسیم:

$$ f \left ( x _ { 1 } \right ) = f \left ( x _ { 0 } \right ) + \left . \left ( x _ { 1 } - x _ { 0 } \right ) \frac { d f } { d x } \right | _ { x = x _ { 0 } } + \left . \frac { \left ( x_ { 1 } - x _ { 0 } \right ) ^ { 2 } } { 2 ! } \frac { d ^ { 2 } f } { d x ^ { 2 } } \right | _ { x = \xi } \;\;\;\;\; (5)$$

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

$$ \left . \frac { d f } { d x } \right | _ { x = x _ { 0 } } = \frac { f \left ( x _ { 1 } \right ) } { \left ( x _{ 1 } -x _ { 0 } \right ) } - \frac { f \left ( x _ { 0 } \right ) } { \left ( x _ { 1 } -x _ { 0 } \right ) } - \left . \frac { \left ( x _ { 1 } -x _ { 0 } \right ) ^ { 2 } } { 2 ! } \cdot \frac { 1 } { \left ( x _ { 1 } - x _ { 0 } \right ) } \frac { d ^ { 2 } f } { d x ^ { 2 } } \right | _ { x = \xi } \;\;\;\;\; ( 6 ) $$

و در نتیجه:

$$ \left . \frac { d f } { d x } \right | _ { x = x _ { 0 } } = \frac { f \left ( x _ { 1 } \right ) } { \left ( x _ { 1 } - x _ { 0 } \right ) } - \frac { f \left ( x _ { 0 } \right ) } { \left ( x _ { 1 } - x _ { 0 } \right ) } - \left . \frac { \left ( x _ { 1 } - x _ { 0 } \right ) } { 2 } \frac { d ^ { 2 } f } { d x ^ { 2 } } \right | _ { x = \xi } \;\;\;\;\; ( 7 ) $$

فرمول اخیر یک تقریب گسسته برای مشتق اول است.

گام ۳: معادله (۷) را در فرم (۴) سری تیلور $$ f ( x ) $$ قرار می‌دهیم. در نتیجه، توصیفی برای $$ f ( x ) $$ برحسب مقادیر گسسته $$ f ( x _ 0 )$$ و $$ f ( x _ 1 ) $$ به دست می‌آوریم:

$$ f ( x ) = f \left ( x _ { 0 } \right ) + \left ( x - x _ { 0 } \right ) \left[ \frac { f \left ( x _ { 1 } \right ) } { \left ( x _ { 1 } -x _ { 0 } \right ) } - \frac { f \left ( x _ { 0 } \right ) } { \left ( x _ { 1 } - x _ { 0 } \right ) } -\left. \frac { \left ( x _ { 1 } -x _ { 0 } \right ) } { 2 } \frac { d ^ { 2 } f } { d x ^ { 2 } } \right | _ { x = \xi } \right ] + \left. \frac { \left ( x - x _ { 0 } \right ) ^ { 2 } } { 2 } \frac { d ^ { 2 } f } { d x ^ { 2 } } \right | _ { x = \xi } \;\;\;\;\; ( 8 ) $$

در نتیجه:

$$ f ( x ) = f \left ( x _ { 0 } \right ) + \frac { \left ( x -x _ { 0 } \right ) } { \left ( x_ { 1 } - x _ { 0 } \right ) } f \left ( x _ { 1 } \right ) - \frac { \left ( x - x _ { 0 } \right ) } { \left ( x _ { 1 } - x _ { 0 } \right ) } f \left ( x _ { 0 } \right ) + \left . \left [ \frac { \left ( x - x _ { 0 } \right ) \left ( - x _ { 1 } + x _ { 0 } \right ) } { 2 } + \frac { \left ( x - x _ { 0 } \right ) ^ { 2 } } { 2 } \right ] \frac { d ^ { 2 } f } { d x ^ { 2 } } \right | _ { x = \xi } \;\;\;\;\; (9)$$

یک دانشجو ایستاده در کنار تخته سفیدی که یک مثال درونیابی خطی را نمایش می دهد

بنابراین:

$$ f ( x ) = \left ( x _ { 1 } - x _ { 0 } - x + x _ { 0 } \right ) \frac { f \left ( x _ { 0 } \right ) } { \left ( x _ { 1 } - x _ { 0 } \right ) } + \left ( x - x _ { 0 } \right ) \frac { f \left ( x _ { 1 } \right ) } { \left ( x _ { 1 } - x _ { 0 } \right ) } + \left . \left ( - x _ { 1 } + x _ { 0 } + x - x _ { 0 } \right ) \frac { \left ( x - x _ { 0 } \right ) } { 2 } \frac { d ^ { 2 } f } { d x ^ { 2 } } \right | _ { x = \xi }  \;\;\;\;\; ( 10 ) $$

و در نهایت، داریم:

$$ f ( x ) = f \left ( x _ { 0 } \right ) \left [ \frac { x _ { 1 } - x } { x _ { 1 } - x _ { 0 } } \right ] + f \left ( x _ { 1 } \right ) \left [ \frac { x - x _ { 0 } } { x _ { 1 } - x _ { 0 } } \right ] + \left . \frac { \left ( x - x _ { 0 } \right ) \left ( x - x _ { 1 } \right ) } { 2 } \frac { d ^ { 2 } f } { d x ^ { 2 } } \right | _ { x = \xi } \;\;\;\;\; ( 11 ) $$

دو بخش اول رابطه (۱۱) همان فرمول درون یابی خطی است و بخش دیگر نیز در واقع خطا را نشان می‌دهد. بنابراین:

$$ \begin {aligned}
e ( x ) & \equiv f ( x ) - g ( x ) \\
e ( x ) & = f \left ( x _ { 0 } \right ) \left [ \frac { x _ { 1 } - x } { x _ { 1 } - x _ { 0 } } \right ] + f \left ( x _ { 1 } \right ) \left [ \frac { x - x _ { 0 } } { x _ { 1 } -x _ { 0 } } \right ] + \left . \frac { \left ( x - x _ { 0 } \right ) \left ( x -x _ { 1 } \right ) } { 2 } \frac { d ^{ 2 } f } { d x ^ { 2 } } \right | _ { x = \xi }
- f \left ( x _ { 0 } \right ) \left [ \frac { x _ { 1} - x } { x_ { 1 } - x _ { 0 } } \right ] - f \left ( x _ { 1 } \right ) \left [ \frac { x - x _ { 0 } } { x _ { 1 } - x _ { 0 } } \right ]
\end {aligned} $$

در نتیجه:

$$ e ( x ) = \left . \frac { \left ( x - x _ { 0 } \right ) \left ( x - x_ { 1 } \right ) } { 2 } \frac { d ^ { 2 } f } { d x ^ { 2 } } \right | _ { x = \xi } \quad x _ { 0 } \leq \xi \leq x _ { 1 } $$

اگر فرض کنیم بازه $$ [ x _ 0 , x _ 1 ] $$ کوچک است، آنگاه مشتق دوم در بازه تغییری نمی‌کند.

$$ \begin {aligned}
& \left . \left . \left . \left . \frac { d ^ { 2 } f } { d x ^ { 2 } } \right | _ { x = \xi } \cong \frac { d ^ { 2 } f } { d x ^ { 2 } } \right | _ { x = x _ { 0 } } \cong \frac { d ^ { 2 } f } { d x ^ { 2 } } \right | _ { x = x _ { 1 } } \cong \frac { d ^ { 2 } f } { d x ^ { 2 } } \right | _ { x = x _ { m } }
\text {, } \quad x _ { m } \equiv \frac { x _ { 0 } + x _ { 1 } } { 2 }
\end {aligned} $$

بنابراین، معمولاً جمله مشتق در عبارت خطا را با استفاده از نقطه میانی در بازه محاسبه می‌کنیم:

$$ \left . e ( x ) \cong \frac { 1 } { 2 } \left ( x -x _ { 0 } \right ) \left ( x - x _ { 1 } \right ) \frac { d ^ { 2 } f } { d x ^ { 2 } } \right | _ { x = x _ { m } } $$

یک مسئله دیگر این است که معمولاً مشتق دوم را در نقطه میانی $$ x _ m $$ نمی‌دانیم. البته با استفاده از فرمول تفاضل‌گیری محدود می‌توانیم این مشتق را با داشتن مقادیر تابعی در نقاط درون‌یابی تقریب بزنیم.

حداکثر خطا در روش درون یابی خطی در نقطه میانی رخ می‌دهد ( که در آن، $$ ( x - x _ 0 ) ( x - x _ 1 ) $$ بزرگ‌ترین است):

$$ \left . \max | e ( x ) | _ { x _ { 0 } < x _ { 1 } } \cong \frac { 1 } { 2 } \left ( x _ { m } - x _ { 0 } \right ) \left ( x _ { m } - x _ { 1 } \right ) \frac { d ^ { 2 } f } { d x ^ { 2 } } \right | _ { x = x _ {m } } $$

با تعریف $$ h \equiv x _ 1 - x _ 0 $$ و $$ \frac { h } { 2 } = x _ m - x _ 0 $$ و $$ \frac { h } { 2 } = x _ 1 - x _ m $$، خواهیم داشت:

$$ \max | e ( x ) | _ { x _ { 0 } < x < x _ { 1 } } = \left . \frac { h ^ {2 } } { 8 } \frac { d ^ { 2 } f } { d x^ { 2 } } \right | _ { x _ { m } } $$

در عبارت خطای درون یابی خطی یک چندجمله‌ای و یک مشتق وجود دارد. حداکثر خطا تقریباً در نقطه میانی بین $$ x _ 0 $$ و $$ x _ 1 $$ رخ می‌دهد. خطا با افرایش فاصله $$ h$$ افزایش می‌یابد. همچنین، وقتی $$ f ^ {(2)} ( x ) $$ زیاد شود، خطا نیز بیشتر می‌شود.

مثال ۲

خطای درون یابی خطی مثال ۱ را محاسبه کنید.

حل: همان‌طور که دیدم:

$$ g ( 0.632 ) = 0.57500 $$

خطا به صورت زیر تقریب زده می‌شود:

$$ \left . e ( x ) \cong \frac { 1 } { 2 } \left ( x -x _ { 0 } \right ) \left ( x - x _ { 1 } \right ) \frac { d ^ { 2 } f } { d x ^ { 2 } } \right | _ { x = x _ { m } } $$

از آنجا که $$ x = 0.750 $$ نقطه میانی در بازه $$ [ 0.5 , 1.0 ] $$ است، داریم:

$$ \begin {aligned}
& \left . e ( 0 . 6 3 2 ) \cong \frac { 1 } { 2 } ( 0 . 6 3 2- 0. 5 ) (0 . 6 3 2 - 1 . 0 ) \frac { d ^ { 2 } f } { d x ^ {2 } } \right | _ { x = 0 . 7 5 0 } \\
& e ( 0 . 6 3 2 ) \cong - \left . 0 . 0 2 4 2 8 8 \frac { d ^ { 2 } f } { d x^ { 2 } } \right | _ { x = 0 . 7 5 }
\end {aligned} $$

مقدار $$ \left. \frac { d ^ { 2 } f } { d x^ { 2 } } \right | _ { x = 0 . 7 5 } $$ را با استفاده از روش تحلیلی محاسبه می‌کنیم:

$$ \left. \frac { d ^ { 2 } f } { d x^ { 2 } } \right | _ { x = 0 . 7 5 } = - \sin ( 0.750 ) = - 0.68164 $$

اکنون با جایگذاری مقدار $$ \left. \frac { d ^ { 2 } f } { d x^ { 2 } } \right | _ { x = 0 . 7 5 } $$، می‌توانیم خطا را تخمین بزنیم:

$$ e( 0 . 6 3 2) \cong ( - 0 . 0 2 42 88 ) ( - 0. 68 1 6 4 ) = 0 . 0 1 6 5 5 5 $$

حال برای مقایسه، خطای واقعی (تفاضل جواب واقعی و جواب جواب تخمینی) را محاسبه می‌کنیم:

$$ E ( x ) = \sin ( x ) - g ( x ) $$

$$ E ( 0.632) = \sin ( 0 .632) - 0.57500 = 0.01576 $$

می‌بینیم که خطای تخمینی $$ e ( x ) $$ تقریب مناسبی از خطای واقعی $$ E ( x ) $$ است.

چند دانشجو نشسته در جلسه امتحان در حال نوشتن

درون یابی خطی در متلب

همان‌طور که گفتیم، فرمول درون یابی خطی به صورت زیر است:

$$ y = y _ 1 + \frac { ( y _ 2 - y _ 1 ) ( x - x _ 1 ) } { ( x _ 2 - x _1)} $$

کد متلب این روش را می‌توان به سادگی به صورت زیر نوشت:

1function y = interp1(x1, y1, x2, y2, x)
2% Calculate corresponding y-coordinate
3y = y1 + (y2-y1)/(x2-x1) * (x-x1);
4end

برای مثال، فرض کنید دو نقطه $$ ( 60 , 15.56 ) $$ و $$ (90 , 32.22)$$ را داریم و می‌خواهیم مقدار $$ y$$ متناظر با $$ x = 73 $$ را به دست آوریم. به راحتی، کد زیر را اجرا می‌کنیم:

1y = interp1(60, 15.56, 90, 32.22, 73)

که جواب آن برابر است با:

y =    22.7793

فیلم‌ های آموزش درون یابی خطی — به زبان ساده (+ دانلود فیلم آموزش رایگان)

فیلم آموزشی درون یابی خطی

دانلود ویدیو

فیلم آموزشی خطای درون یابی خطی

دانلود ویدیو

فیلم آموزشی درون یابی خطی در متلب

دانلود ویدیو
بر اساس رای ۲۴ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
Computational Methods
۳ دیدگاه برای «درون یابی خطی — به زبان ساده (+ دانلود فیلم آموزش رایگان)»

سلام ،
ببخشید چجوری میشه از نمودار رسم شده مقادیر xو y آن را بدست آورد ؟
)درمورد دستور plot گشتم اما هرکاری میکنم نمی تونه از روی خطوط بدست آمده مقادیر xو y خطوط را بدست بیاورم )

سلام.
می‌توانید از راهنمای زبان یا نرم‌افزاری که استفاده می‌کنید، کمک بگیرید. برای مثال، در متلب می‌توانید از دستورهای زیر استفاده کنید:
h = findobj(gca,'Type','line')
;x=get(h,'Xdata') ;y=get(h,'Ydata')
شاد و پیروز باشید.

نظر شما چیست؟

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