loading...
وبلاگ آموزشی مهدی
mahdi بازدید : 6236 جمعه 17 شهریور 1391 نظرات (0)

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

 

در این پست می خواهم درون یابی و برون یابی با متلب رو آموزش بدم.

برای فهم بیشتر با یک مثال دستورات رو توضیح می دهم. فرض کنید که ماتریسی به صورت زیر داریم:

 

           1200  5.0  0.25   1.1

data = 1400  4.1  0.23   0.8

           1500  3.2  0.22   0.3

 

فرض کنید که مثلا ستون اول این ماتریس نشان دهنده ارتفاع باشه، مثلا ستون دوم نشون دهنده دما باشه، ستون سوم معرف چگالی و ستون چهارم هم معرف فشار باشد.

پس با توجه به این تعریف می فهمیم که مثلا در ارتفاع 1200 ، دما برابر 5 و چگالی برابر 0.25 و فشار برابر 1.1 هستش. یا اینکه در جایی که فشار 0.8 هستش چگالی برابر 0.23 و یا در دمای 3.2 ارتفاع برابر 1500 می باشد.

الف- حالا فرض کنید یکی می پرسه تو ارتفاع 1420 مثلا دما چقدره؟

ب- یا اینکه مثلا اگه چگالی برابر 0.2315 باشه فشار چقدره؟

ج- یا اینکه اگه ارتفاع 1100 باشه دما چقدره؟ یا اینکه اگه ارتفاع 1600 باشه فشار چقدر میشه؟

در مورد الف و ب به خوبی مشخصه که باید درون یابی انجام بشه و در مورد ج به خوبی مشخصه که باید برون یابی انجام بشه.

حالا می خواهیم دستور درون یابی و برون یابی تو متلب رو توضیح بدیم.

دستور interp1 کار درون یابی و برون یابی تو متلب رو برای ما انجام میده.

دستور interp1 دارای سه ورودی می باشد:

interp1(A,B,C)

فرض کنید که می خواهیم الف را حل کنیم. در ارتفاع 1420 دما چقدر می باشد؟ پس ما با ارتفاع و دما کار داریم. C همان متغیر معلومه که ما داریم. اونم ارتفاع 1420 هستش. پس C برابر با 1420 هستش.

اما A و B دو دسته داده ای هستند که متلب قراره بر اساس مطابقت اونها با همدیگه درون یابی رو در C‌ انجام بده و جواب رو بده. برای اینکه راحتتر بتونید حفظ کنید به طور ساده اگه بخوام بگم باید بگم که جنسC و A باید یکی باشند. پس فهمیدیم که A هم باید از جنس ارتفاع باشد. اما B باید از چه جنسی باشد؟ از جنس مجهول که در اینجا مجهول مسئله دما می باشد.

حالا که فهمیدیم A باید داده های ارتفاع و B باید داده های دما باشند به ماتریس داده هامون بر میگردیم. کدام ستون معرف داده های ارتفاع بود؟ ستون اول ماتریس. پس A همان ستون اول ماتریس می باشد پس A=data(:,1) .

کدام ستون معرف داده های دما بود؟ ستون دوم ماتریس. پس B همان ستون دوم ماتریس می باشد پسB=data(:,2) .

حالا که همه چی مشخص شد می تونیم از دستور interp1 استفاده کنیم:

>>interp1(data(:,1) , data(:,2) , 1420)

این دستور یعنی اینکه، آقای متلب، شما برو بین ستون اول و ستون دوم درون یابی رو انجام بده با عدد 1420. یعنی اینکه اگر 1420 یکی از اعداد ستون اول باشه عدد متناظرش در ستون دوم چنده؟

 

امیدوارم فهمیده باشید که A و B و C‌چی هستند.

حالا به راحتی می تونید جواب ب را بدهید:

>>interp1(data(:,3),data(:,4),0.2315)

 

متلب به طور پیش فرض برای درون یابی کردن از رابطه خطی بین داده ها استفاده می کنه. متلب روشهای دیگری رو هم برای درون یابی در interp1 داره که میتونید برید و help متلب رو بخونید که من در اینجا فقط اسامی این روشها رو براتون میارم:

linear , nearest , spline , pchip , cubic , v5cubic

 

پس اگه روش رو ننویسیم به طور پیش فرض اون رو linear میگیره:

>>interp1(data(:,1) , data(:,2) , 1420)

برابر است با

>>interp1(data(:,1) , data(:,2) , 1420 , ‘linear’)

 

اگه خواستید روش رو عوض کنید به جای کلمه linear میتونید اسامی دیگه رو که براتون نوشتم بنویسید:

>>interp1(data(:,1) , data(:,2) , 1420,’cubic’)

 

حالا بر میگردیم به بخش ج (اگه ارتفاع 1100 باشه دما چقدره) که باید برون یابی انجام دهیم. خب! دستور رو می نویسیم:

>>interp1(data(:,1) , data(:,2) , 1100 )

در این جا متلب به شما جواب NaN را خواهد داد. علتش چیه؟

علت اینه که دستور interp1 در حالت پیش فرض کار درون یابی رو انجام میده و اگه بخواهید کار برون یابی رو براتون انجام بده حتما باید 2 تا کار رو انجام بدید:

1- اولا در دستور interp1 باید کلمه extrap را وارد کنید تا متلب بفهمه که باید برون یابی انجام بده.

2- دوما مثل درون یابی نیست که اگه روش رو بهش معرفی نکنید خودش خطی بگیره. در برون یابی حتما باید روش رو هم بهش معرفی کنید.

پس باید به این صورت بنویسیم:

>>interp1(data(:,1) , data(:,2) , 1100 ,’extrap’ , ‘linear’)

یا مثلا

>>interp1(data(:,1) , data(:,2) , 1600 , ‘extrap’, ‘cubic’)

 

دستور interp1 به عبارتی کار درون یابی و برون یابی یک بعدی رو براتون انجام میده که در اغلب کارهاب مهندسی هم همین دورن یابی یک بعدی به کار می آید. اما اگه خواستید بیشتر بدونید می تونید برید help‌ نرم افزار رو بخونید و درون یابی و برون یابی دو بعدی با دستور interp2 و سه بعدی با دستور interp3‌ رو مطالعه کنید.


مطالب مرتبط
ارسال نظر برای این مطلب

کد امنیتی رفرش
اطلاعات کاربری
  • فراموشی رمز عبور؟
  • نظرسنجی
    بیشترین استفاده‌ای که از تلفن همراه‌تان می‌کنید مربوط به چه کاری است؟
    آمار سایت
  • کل مطالب : 1017
  • کل نظرات : 88
  • افراد آنلاین : 5
  • تعداد اعضا : 0
  • آی پی امروز : 137
  • آی پی دیروز : 77
  • بازدید امروز : 187
  • باردید دیروز : 581
  • گوگل امروز : 1
  • گوگل دیروز : 2
  • بازدید هفته : 2,426
  • بازدید ماه : 2,245
  • بازدید سال : 27,298
  • بازدید کلی : 421,322
  • کدهای اختصاصی