شما در حال مطالعه نسخه آفلاین یکی از مطالب «مجله فرادرس» هستید. لطفاً توجه داشته باشید، ممکن است برخی از قابلیتهای تعاملی مطالب، مانند امکان پاسخ به پرسشهای چهار گزینهای و مشاهده جواب صحیح آنها، نمایش نتیجه آزمونها، پاسخ تشریحی سوالات، پخش فایلهای صوتی و تصویری و غیره، در این نسخه در دسترس نباشند. برای دسترسی به نسخه آنلاین مطلب، استفاده از کلیه امکانات آن و داشتن تجربه کاربری بهتر اینجا کلیک کنید.
در آموزشهای قبلی مجله فرادرس، با درونیابی با استفاده از چندجملهای لاگرانژ آشنا شدیم. در این آموزش، درونیابی اسپلاین را معرفی میکنیم. در محاسبات عددی، «درون یابی اسپلاین» (Spline Interpolation) یک روش درونیابی است که در آن، درونیاب، نوع خاصی از یک چندجملهای تکهای است که یک «اسپلاین» (Spline) نامیده میشود. درون یابی اسپلاین اغلب نسبت به درون یابی چندجملهای ترجیح داده میشود، زیرا حتی وقتی از چندجملهایهایی با درجه پایین برای اسپلاین استفاده میشود، میتوان به خطای درونیابی کمی دست یافت. درون یابی اسپلاین از مسئله «پدیده رونگه» (Runge's Phenomenon) جلوگیری میکند. در پدیده رونگه، هنگام استفاده از چندجملهایهای مرتبه بالا در درونیابی، ممکن است بین نقاط نوسان رخ دهد.
اسپلاین در ابتدا اصطلاحی بود که برای خطکشهای کشسان به کار میرفت. این خطکشها قابلیت خم شدن برای عبور از تعدادی از نقاط از پیش تعریف شده (گره) داشتند.
از این اسپلاینها برای تهیه نقشههای فنی در ساخت کشتی استفاده میشد.
شکل ۱: درون یابی با اسپلاینهای مکعبی بین هشت نقطه
روش مدلسازی ریاضی شکل این خطکشهای کشسانِ ثابت با n+1 نقطه {(xi,yi):i=0,1,⋯,n}، در حقیقت، درونیابی بین همه زوج نقطههای (xi−1,yi−1) و (xi,yi) با استفاده از چندجملهای y=qi(x) است که در آن، i=1,2,⋯,n.
از آنجایی که شکل اسپلاین به گونهای است که خمش را (تحت قید عبور از همه نقاط) کمینه کند، y′ و y′′ در همه جا و همه نقاط پیوسته خواهند بود. به عبارت دیگر، خواهیم داشت:
این امر زمانی امکانپذیر است که چندجملهایها از درجه ۵ یا بالاتر باشند. روش کلاسیک برای استفاده از چندجملهای درجه ۳، اسپلاین مکعبی (Cubic Spline) نامیده میشود که در آن، مشتق اول پیوسته است، اما مشتق دوم خیر.
الگوریتم یافتن اسپلاین مکعبی درونیاب
در این بخش، ابتدا اسپلاین مکعبی را برای درونیابی دو نقطه بیان کرده و در ادامه، فرمول کلی آن را ارائه خواهیم کرد.
با قرار دادن x=x1 و x=x2، به ترتیب در معادلات (۵) و (۶) با استفاده از (۲)، مشتقهای اول q′(x1)=k1 و q′(x2)=k2 و مشتقهای دوم زیر را به دست خواهیم آورد:
اکنون اگر (xi,yi) را برای i=0,1,...,n و به عنوان n+1 نقطه در نظر بگیریم، تعداد n چندجملهای مرتبه سوم درونیاب y در بازه xi−1≤x≤xi برای i=1,...,n خواهیم داشت، به گونهای که qi′(xi)=qi+1′(xi) برای i=1,...,n−1 برقرار است:
qi=(1−t)yi−1+tyi+t(1−t)((1−t)ai+tbi)(9)
که در آن، i=1,2,...,n و t=xi−xi−1x−xi−1 است و در نتیجه، n چندجملهای خواهیم داشت که با یکدیگر تابعی مشتقپذیر در بازه x0≤x≤xn تعریف میکنند و برای i=1,...,n داریم:
اگر دنباله k0، k1، ... و kn به گونهای باشد که برای i=1,...,n−1 تساوی qi′′(xi)=qi+1′′(xi) برقرار باشد، آنگاه تابع حاصل یک مشتق دوم پیوسته نیز خواهد داشت.
پس میتوان به طور خلاصه گفت که الگوریتم روش درون یابی اسپلاین به صورت زیر است:
از معادلات (۷)، (۸)، (۱۰) و (۱۱) رابطه زیر را برای i=1,...,n−1 نتیجه میگیریم:
روابط (۱۵) در حقیقت n−1 معادله خطی برای n+1 مقدار k0، k1، ... و kn هستند.
در خطکشهای کشسان که مدل درون یابی اسپلاین هستند، سمت چپ یا چپترین گره یا همان نقطه و سمت راست یا راستترین گره خطکش میتواند آزادانه حرکت کند و به همین دلیل، با q′′=0 فرم یک خط مستقیم را به خود میگیرد. از آنجایی که q′′ باید یک تابع پیوسته از x باشد، برای اسپلاینهای طبیعی (Natural Splines) علاوه بر n−1 معادله خطی (۱۵)، باید داشته باشیم:
در نهایت، (۱۵) همراه با (۱۶) و (۱۷)، تعداد n+1 معادله خطی را تشکیل میدهند که به صورت یکتا n+1 پارامتر k0، k1، ... و kn را تعریف میکنند.
موارد دیگری نیز وجود دارند که میتوان آنها را نیز در نظر گرفت: «اسپلاین مقید» (Clamped Spline) که شیب را در انتهای اسپلاین مشخص میکند، و «اسپلاین غیرگرهای» (Not-a-knot Spline)، که در آن، مشتق سوم نیز در نقاط x1 و xN−1 باید پیوسته باشد. برای اسپلاین غیرگرهای، معادلات زیر را نیز داریم:
میخواهیم دو چندجملهای برای درونیابی سه نقطه (−1,0.5)، (0,0) و (3,3) با استفاده از روش درون یابی اسپلاین به دست آوریم. با نوشتن معادلات لازم، به دستگاه معادلات سهقطری زیر برای مقادیر k0، k1 و k2 میرسیم:
سید سراج حمیدی دانشآموخته مهندسی برق است و به ریاضیات و زبان و ادبیات فارسی علاقه دارد. او آموزشهای مهندسی برق، ریاضیات و ادبیات مجله فرادرس را مینویسد.
سلام و درود
چگونه میشود تابع را خودم به دلخواه وارد کنم
حمید
با سلام و ارادت ممنون از ارائه مطالب اسپلاین اگر جهت فهم بهتر موضوعات در خصوص نمودار ها یا خروجی شبیه ساز بصورت گرافیکی یا انیمیشن نیز کمک بگیرید بهتر خواهد بود خدا قوت
kian
سلام منظور از multi quadratic interpolation کدام روش درونیابی می باشد ؟ ممنون
erfan
سلام
جناب حمیدی من فانکشن را ران کردم در خط 23 ارور دریافت میکنم لطفا بررسی کنید ممنون
سید سراج حمیدی
سلام عرفان عزیز.
کدهای متلب پیش از انتشار آموزش اعتبارسنجی شدهاند و ایرادی ندارند.
برای اجرای صحیح کد، ابتدا تابع cubic_splin را ذخیره کنید. سپس پوشهای که تابع را در آنجا ذخیره کردهاید، بهعنوان Current Folder انتخاب کنید. پس از آن، کد مثال را اجرا کنید.
سالم و موفق باشید.
اشکان
سلام. وقت بخیر. بنده در حال استفاده از کد بالا و مجموعه معادلات آن هستم. خواهشمندم بفرمایید منبع مطالب بالا چه کتاب یا مقاله ایی است؟ با تشکر
رضا مقدری
سلام، وقت شما بخیر؛
منبع تمامی مقالات مجله فرادرس در صورتیکه ترجمه یا تالیف باشند، در انتهای آنها و بعد از بخش معرفی آموزشها و مطالب مرتبط ذکر شدهاند.
از اینکه با مجله فرادرس همراه هستید از شما سپاسگزاریم.
مهیار
سلام خسته نباشید .فکر می کنم یک جای برنامه ایراد داره چون ارور میده
سید سراج حمیدی
سلام.
برنامه بررسی شد و اشکالی در آن وجود ندارد.
موفق باشید.
شما در حال مطالعه نسخه آفلاین یکی از مطالب «مجله فرادرس» هستید. لطفاً توجه داشته باشید، ممکن است برخی از قابلیتهای تعاملی مطالب، مانند امکان پاسخ به پرسشهای چهار گزینهای و مشاهده جواب صحیح آنها، نمایش نتیجه آزمونها، پاسخ تشریحی سوالات، پخش فایلهای صوتی و تصویری و غیره، در این نسخه در دسترس نباشند. برای دسترسی به نسخه آنلاین مطلب، استفاده از کلیه امکانات آن و داشتن تجربه کاربری بهتر اینجا کلیک کنید.
سلام و درود
چگونه میشود تابع را خودم به دلخواه وارد کنم
با سلام و ارادت ممنون از ارائه مطالب اسپلاین اگر جهت فهم بهتر موضوعات در خصوص نمودار ها یا خروجی شبیه ساز بصورت گرافیکی یا انیمیشن نیز کمک بگیرید بهتر خواهد بود خدا قوت
سلام منظور از multi quadratic interpolation کدام روش درونیابی می باشد ؟ ممنون
سلام
جناب حمیدی من فانکشن را ران کردم در خط 23 ارور دریافت میکنم لطفا بررسی کنید ممنون
سلام عرفان عزیز.
کدهای متلب پیش از انتشار آموزش اعتبارسنجی شدهاند و ایرادی ندارند.
برای اجرای صحیح کد، ابتدا تابع cubic_splin را ذخیره کنید. سپس پوشهای که تابع را در آنجا ذخیره کردهاید، بهعنوان Current Folder انتخاب کنید. پس از آن، کد مثال را اجرا کنید.
سالم و موفق باشید.
سلام. وقت بخیر. بنده در حال استفاده از کد بالا و مجموعه معادلات آن هستم. خواهشمندم بفرمایید منبع مطالب بالا چه کتاب یا مقاله ایی است؟ با تشکر
سلام، وقت شما بخیر؛
منبع تمامی مقالات مجله فرادرس در صورتیکه ترجمه یا تالیف باشند، در انتهای آنها و بعد از بخش معرفی آموزشها و مطالب مرتبط ذکر شدهاند.
از اینکه با مجله فرادرس همراه هستید از شما سپاسگزاریم.
سلام خسته نباشید .فکر می کنم یک جای برنامه ایراد داره چون ارور میده
سلام.
برنامه بررسی شد و اشکالی در آن وجود ندارد.
موفق باشید.