درونیابی در متلب- آموزش انواع روشهای درونیابی در متلب
در این مطلب قصد داریم با انواع دستورات درون یابی در متلب به طور کامل آشنا شده و در ادامه در مطلب دیگری به بحث برازش منحنی یا همان fitting که عملا همان درون یابی است اما با مفهوم دیگری است در محیط متلب خواهیم پرداخت.
در بسیاری از موارد دادههایی از انجام یک آزمایش داریم که تعداد آنها ممکن است کافی نباشد ولی میخواهیم به طور حدودی رفتار مدل را پیشبینی کنیم تا بتوانیم هر نقطه یا نقاطی داخل محدودهای مدل رفتار آن را تشخیص دهیم. در این مواقع از مبحث درونیابی یا Interpolation استفاده میکنیم.
در این مطلب به روشهای کلاسیک درون یابی در متلب خواهیم پرداخت ولی روشهای پیشرفتهای مانند استفاده از شبکههای عصبی هم وجود دارد.
درون یابی دادهها در یک بعد- دستور interp1 در متلب
در شروع مبحث درون یابی در متلب این مبحث را با دستور interp1 شروع خواهیم کرد.
برای interpolation در یک بعد دستور interp1 در متلب تعریف شده است. این دستور برای درون یابی توابع یک متغیره مورد استفاده قرار میگیرد.
نحوه استفاده از این دستور به این صورت است که در ورودی اول بردار نقاط نمونه در وارد میکنیم و ورودی دوم مقدار متناظر با این نمونهها را وارد کرده و در ورودی سوم نقاطی از نمونه که میخواهیم که میخواهیم مقادیر آن را داشته باشیم وارد میکنیم.
در ورودی چهارم از این دستور میتوانیم نوع روش درون یابی را انتخاب کنیم که در حالت پیشفرض و بدون نوشتن نوع روش حالت ‘linear’ فعال میباشد. که در جدول زیر انواع حالت های درونیابی تعریف شده براساس راهنمای نرمافزار متلب در جدول زیر آورده شده است.
نکته: اگر بخواهیم از همین دستور interp1 نقاطی را که خارج از بازه بردار نمونه هستند مقدار آن را بیابیم یا همان Extrapolation انجام دهیم میتوانیم از زیردستور ‘extrap’ استفاده کنیم.
البته لازم به ذکر است که روشهای ‘pchip’ ، ‘spline’ و ‘makima’ در حالت پیشفرض در حالت ‘extrap’ هستند و نیازی به استفاده از این زیردستور نمیباشد اما برای روشهای دیگر در صورت خواستن نقاطی خارج از بازه اعداد نمونه حتما باید از زیردستور ‘extrap’ استفاده شود.
در ادامه با بیان مثالی کامل انواع روشهای درونیابی در متلب را با رسم یک نمودار با هم مقایسه میکنیم:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
x=[-3 -1 4 5 7]; y=[2 -3 1 -4 0]; xq=-4:0.5:8; yq1=interp1(x,y,xq,'linear','extrap'); yq2=interp1(x,y,xq,'nearest','extrap'); yq3=interp1(x,y,xq,'next','extrap'); yq4=interp1(x,y,xq,'pchip'); yq5=interp1(x,y,xq,'makima'); yq6=interp1(x,y,xq,'spline'); figure plot(x,y,'d','MarkerFaceColor','r','MarkerSize',10,... 'DisplayName','Sample') hold on; plot(xq,yq1,'LineWidth',1.5,'DisplayName','Linear') plot(xq,yq2,'LineWidth',1.5,'DisplayName','Nearest') plot(xq,yq3,'LineWidth',1.5,'DisplayName','Next') plot(xq,yq4,'LineWidth',1.5,'DisplayName','Pchip') plot(xq,yq5,'LineWidth',1.5,'DisplayName','Makima') plot(xq,yq6,'LineWidth',1.5,'DisplayName','Spline') xlabel('x','fontsi',20,'interpreter','latex') ylabel('yq','fontsi',20,'interpreter','latex') title('comparison between Interpolation Methods',... 'fontsi',20,'interpreter','latex') legend show |
اگر در ترسیم نمودار در متلب با دستور plot دچار مشکل هستید یا میخواهید با زیردستوارت آن به طور کامل آشنا شوید و در رسم نمودار با متلب مسلط شوید حتما مقاله زیر را بخوانید:
توضیحات انواع روشهای درون یابی در متلب – ادامه دستور interp1 در متلب
1- همانطور که در نمودار بالا مشاهده میکنید حالت ‘Linear’ یک درون یابی خطی و درجه 1 ارائه میدهد و بین هر دو نقطه یک خط برازش میدهد.
2- حالت ‘Nearest’ مقدار نقاط درون یابی شده را براساس فاصله آنها از نقاط نمونه تعیین میکند و هر نقطهای مقدارش همان مقدار نزدیکترین نقطه نمونه به آن خواهد بود و عملا یک درونیابی مرتبه صفر و یا همان ثابت میباشد.
3- حالت ‘Next’ نقاط خواسته شده براساس نقطه نمونه بعد از آنها درون یابی میکند.
4- حالت ‘Pchip‘ مطابق جدول ارائه شده در قسمتهای قبلی همان دستور ‘cubic’ است که در هر بازه (بین دو نمونه) یک چندجملهای درجه 3 برای درونیابی نقاط استفاده میکند.
5- حالت ‘Makima’ از یک چندجملهای درجه 3 هرمیتی برای درون یابی استفاده میکند.
6- حالت ‘Spline’ این حالت هم مشابه با دو حالت قبل از یک درون یابی مکعبی استفاده میکند که با دو حالت قبلی روند آن متفاوت است.
7- برای حالتهای ‘Spline’ و ‘Pchip’ دستورات جدایی به همان اسمها تعریف شده که نحوه استفاده از آنها دقیقا مانند دستور interp میباشد که در ادامه درباره این دستورات صحبت خواهیم کرد.
اگر دوست دارید با انواع دستورات نرمافزار متلب به خوبی آشنا شوید و طریقه برنامهنویسی در متلب را به خوبی فرا بگیرید حتما به صفحه آموزش « آموزش برنامهنویسی متلب » ما سر بزنید.
درون یابی در متلب – دستور spline در متلب
در ادامه دستورات درونیابی در متلب به دستور spline در متلب خواهیم پرداخت. همانطور که در قسمت قبل گفته شد spline یک درون یابی مکعبی را انجام میدهد از این دستور به دو شیوه میشود استفاده کرد که یا میتوان با سه ورودی دستور را فراخوانی کرد که مشابه دستور interp1 میباشد و اگر با دو ورودی دستور را فراخوانی کنیم و نقاطی را برای درون یابی مشخص نکنیم، میتوانیم اطلاعات مدل spline را بدست آوریم.
برای مثال قبل اطلاعات مدل spline را بدست میآوریم
x=[-3 -1 4 5 7];
y=[2 -3 1 -4 0];
modeldata=spline(x,y)
form: ‘pp’
breaks: [-3 -1 4 5 7]
coefs: [4×4 double]
pieces: 4
order: 4
dim: 1
همانطور که مشاهده میکنید برای مدل spline پنج خروجی تعریف شده است که در زیر آنها را تعریف میکنیم:
form: ‘pp به این معناست که نوع مدل از نوع Piecewise polynomial میباشد که به این معناست که در هر بازه یا هر قطعه از یک چندجملهای استفاده شده است.
breaks : در این قسمت همان نقاط نمونه که نقاط ابتدا و انتهای هر spline هستند مشخص شدهاند.
coefs : همانطور که میبینید نقاط نمونه پنج عدد هستند که در واقع چهار بازه وجود دارد. در این قسمت برای هر بازه ضرایب چندجملهای مربوط به آن مشخص شدهاند که چون 4 بازه داریم و در هر بازه یک چندجملهای درجه 3 داریم که با 4 ضریب تعریف میشوند یک ماتریس 4*4 تعریف شده است.
pieces : در این قسمت تعداد تکهها یا همان بازهها تعریف شده است.
order : مرتبهی چندجملهایها را مشخص میکند که چون درجه 3 است با 4 عدد مشخص شده است.
dim : بعد مسئله را مشخص میکند که چون درون یابی در متلب برای یک بعد است مقدار آن یک میباشد.
برای دسترسی به این محتوا به صورت جدا میتوانید از خاصیت دادههای struct استفاده کنید به این صورت که بعد از نام مدل از نقطه (.) و بعد آن از اسم فایل موردنظر استفاده کنید به عنوان مثال اگر میخواهیم ضرایب چندجملهای را بدست آوریم بصورت زیر عمل میکنیم:
modeldata.coefs
درون یابی در متلب: ساختن فایل pp
برای ساختن فایل Piecewise polynomial دستور mkpp در محیط متلب قرار داده شده است که به ترتیب نقاط نمونه (breaks) و ماتریس ضرایب چندجملهایها (coefs) را گرفته و مدل pp را تولید میکند. مثال زیر در نظر بگیرید:
breaks = [0 4 10 15];
coefs = [0 1 -1 1 1; 0 0 1 -2 53; -1 6 1 4 77];
pp = mkpp(breaks,coefs)
Answer:
pp = struct with fields:
form: ‘pp’
breaks: [0 4 10 15]
coefs: [3×5 double]
pieces: 3
order: 5
dim: 1
درون یابی در متلب: گرفتن جزئیات مدل pp
اگر فایل Piecewise polynomial به دستور unmkpp داده شود جزئیات این فایل که در قسمتهای قبل بیان شد بصورت جدا در دسترس خواهد بود. به نوعی این دستور برعکس دستور mkpp عمل میکند. برای مثال قبلی این روند را انجام خواهیم داد:
[breaks,coefs,L,order,dim] = unmkpp(pp)
برای استفاده از این دستور حتما باید دستور با پنج خروجی فراخوانی شود تا اطلاعات کامل مدل گرفته شود.
یکی از خدمات ما در گام98 پروژههای آماده متلب به همراه فایل کامل توضیحات میباشد و شما میتوانید از طریق لینک « پروژه آماده متلب رایگان » از این محصولات، استفاده نمایید.
استفاده از فایل pp برای درون یابی- دستور ppval
جزئیات قبلی همگی گفته شدند تا بتوانیم به این مرحله برسیم. اگر فایل مدل (pp) را داشته باشیم میتوانیم با دستور ppval درون یابی در متلب را برای نقاط مورد نظر انجام دهیم. به عنوان مثال برای یک مدل اعداد زیر را درون یابی خواهیم کرد و نمودار آن را ترسیم میکنیم:
1 2 3 4 5 6 7 8 9 10 11 |
x=[-4 -2 3 4 8]; y=[2 -1 4 -7 -6]; pp=spline(x,y); xq=-4:0.3:8; yq=ppval(pp,xq); plot(x,y,'o','MarkerFaceColor','g','MarkerSize',10,... 'DisplayName','Sample') hold on; plot(xq,yq,'r','LineWidth',2) title('Interpolation With Spline Method',... 'fontsi',20,'interpreter','latex') |
رسم نمودار جزو کلیدیترین بخشهای متلب است که باید آن را بلد باشید. همانطور که ملاحظه میکنید رسم نمودار در موقعیتهای مختلف کاربرد دارد. اگر در ترسیم نمودار در متلب دچار مشکل هستید یا میخواهید با انواع دستورات رسم نمودار بصورت سهبعدی و دوبعدی آشنا شوید، حتما به صفحه « تنظیمات رسم نمودار در متلب » گام98 سر بزنید.
درون یابی دادهها در متلب برای دو بعد- دستور interp2 در متلب
برای درون یابی در دو بعد از دستور interp2 استفاده میشود. از این دستور برای درون یابی دادههای منظم (گرید) استفاده میکنیم. برای دادههای scatter دستورات دیگری داریم که در ادامه آنها را خواهیم گفت.
روشهای درون یابی همان روشهای گفته شده برای دستور interp1 میباشد.
نحوه فراخوانی این دستور به این صورت است که در ورودی اول و دوم مقادیر متغیرهای مستقل نمونه را وارد کرده و در ورودی سوم مقدار متناظر با متغیرهای قبلی را وارد میکنیم و در ورودی چهارم و پنجم مقادیر متغیرهای مستقل برای درون یابی در متلب را وارد میکنیم.
همچنین میتوانیم در ورودی بعدی نوع روش مشخص کنیم.
این دستور همانند دستور interp1 برای دادههای منظم استفاده میشود.
در یک مثال برای چهار نوع روش نمودار درون یابی را همراه با نقطه نمونه ترسیم میکنیم:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
x=-2:2; y=-3:3; [X,Y] = meshgrid(x,y); R = sqrt(X.^2 + Y.^2); Z = cos(R).*sin(R)./exp(R); xq=-2:0.1:2; yq=-3:0.1:3; subplot(2,2,1) figure(1) plot3(X,Y,Z,'d','MarkerSize',10) xlim([-3 3]) ylim([-4 4]) [Xq, Yq]=meshgrid(xq,yq); Zq1=interp2(X,Y,Z,Xq,Yq,'Linear'); hold on; surf(Xq,Yq,Zq) title('Linear Interpolation'); subplot(2,2,2) plot3(X,Y,Z,'d','MarkerSize',10) xlim([-3 3]) ylim([-4 4]) Zq2=interp2(X,Y,Z,Xq,Yq,'Spline'); hold on; surf(Xq,Yq,Zq) title('Spline Interpolation'); subplot(2,2,3) plot3(X,Y,Z,'d','MarkerSize',10) xlim([-3 3]) ylim([-4 4]) Zq3=interp2(X,Y,Z,Xq,Yq,'Nearest'); hold on; surf(Xq,Yq,Zq) title('Nearest Interpolation'); subplot(2,2,4) plot3(X,Y,Z,'d','MarkerSize',10) xlim([-3 3]) ylim([-4 4]) Zq4=interp2(X,Y,Z,Xq,Yq,'Cubic'); hold on; surf(Xq,Yq,Zq) title('Cubic Interpolation'); |
نکته: برای استفاده از دستورات ترسیم و همچنین interp2 حتما باید دادههای متغیرهای مستقل مانند تار و پود پارچه و یا بصورت جدولی با هم تعریف شوند که اینکار توسط دستور meshgrid برای حالتهای دو بعدی و سه بعدی و برای حالتهای بیشتر از سه بعد از دستور ndgrid استفاده میشود.
درون یابی دادهها در سه بعد- دستور interp3 در متلب
برای درون یابی درمتلب در سه بعد از دستور interp3 استفاده میشود.
نحوه فراخوانی این دستور مشابه دستور interp میباشد با این تفاوت که تعداد متغیرهای مستقل سه عدد میباشد و یک متغیر وابسته خواهیم داشت که مقدار آن را برای مقادیر دیگر متغیرهای مستقل درون یابی میکنیم. با ارائه یک مثال انواع روشهای درون یابی در متلب را برای سه بعد بیان خواهیم کرد:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
[X,Y,Z,V] = flow(10); figure(1) subplot 221 slice(X,Y,Z,V,[5 9],2,0); title('Orginal Sample'); hold on; xq=0.1:.25:10; yq=-3:.25:3; zq=-3:.25:3; [Xq,Yq,Zq] = meshgrid(xq,yq,zq); Vq = interp3(X,Y,Z,V,Xq,Yq,Zq,'Linear'); subplot 222 slice(Xq,Yq,Zq,Vq,[5 9],2,0); title('Linear Interpolation'); Vq = interp3(X,Y,Z,V,Xq,Yq,Zq,'Cubic'); subplot 223 slice(Xq,Yq,Zq,Vq,[5 9],2,0); title('Cubic Interpolation'); Vq = interp3(X,Y,Z,V,Xq,Yq,Zq,'Spline'); subplot 224 slice(Xq,Yq,Zq,Vq,[5 9],2,0); title('Spline Interpolation'); |
نکات:
1- تابع flow یک تابع سه متغیره است که در متلب تعریف شده و برای تولید جریان سیال استفاده شده است و همچنین رنج متغیرهای آن همان رنج نوشته شده در کد میباشد. برای اطلاعات بیشتر در این مورد میتوانید به راهنمای نرمافزار متلب مراجعه کنید.
2- چون درون یابی در سه بعد انجام میشود و عملا 4 متغیر داریم باید نمودار چهار بعدی داشته باشیم. برای نمایش آن از دستور slice استفاده شده است که در صفحات مشخصی در هر سه راستا مقدار متغیر وابسته با توجه به نوع رنگهای روی صفحات مشخص میشود.
این مقاله با اضافه کردن دستورات دیگر درونیابی در متلب ادامه خواهد داشت. لطفا اگر دستور و یا نکتهی خاصی مدنظر شما هست که در متن وجود ندارد برای ما در قسمت نظرات مطرح نمایید تا آن را به متن اضافه نماییم. علاوه براین، برای دانلود روشهای مختلف حل معادلات جبری (همچون تکرار ساده، نیوتن-رافسون، سکانت، نصف کردن و نابجایی) به صفحه « انواع حل عددی معادلات ODE در متلب » رجوع کنید.
این مقاله آموزشی به کوشش تیم تولید محتوای علمی و نرمافزاری گام98 در راستای ارتقای دانش شما در استفاده از نرمافزار متلب تولید شده است. درصورتی مفید بودن این مقاله آن را به دوستان و آشنایان خود معرفی نمایید.
مطالب زیر را حتما مطالعه کنید
کار با بردارها در متلب
آموزش کامل انواع دستورات توزیعهای آماری در متلب
در این مقاله قصد داریم انواع دستورات مهم توزیع های آماری در متلب را به همراه رسم انواع توزیعها و برازش با استفاده از توزیع های آماری بیان نماییم.
آموزش صفر تا 100 تحلیل المان میله به روش اجزا محدود
در ادامه دومین سری از آموزشهای روش المان محدود در این مقاله تحلیل المان میله به روش اجزا محدود را همراه با مثال به طور صفر تا صدی آموزش خواهیم داد.
آموزش جامع و کامل تحلیل المان فنر به روش اجزا محدود
در اولین مجموعه از مقالات آموزشی روش اجزا محدود، آموزش جامع و کامل تحلیل المان فنر به روش المان محدود را همراه با مثال برای شما عزیزان بیان خواهیم کرد.
روش اجزا محدود – Finite Element Method
روش اجزا محدود یک روش عددی برای حل مسائل مهندسی و فیزیکی میباشد. در این مقاله به طورکلی با کاربرد، تاریخچه و مراحل حل این روش آشنا خواهیم شد.
آموزش جامع انواع دستورات توزیع نرمال در متلب
در این مقاله انواع دستورات توزیع نرمال در متلب را به شما آموزش میدهیم.همچنین نحوه کار با توزیع های نرمال تک متغیره و چند متغیره را با جزئیات خواهید آموخت.
1 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.