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

درونيابي عبارتست از پروسه اي كه براساس آن مقادير مابين يكسري نقاط معلوم را ميتوان معين نمود . در اين بخش مختصري راجع به دونيابي صحبت كرده وسپس درونيابي دوبعدي و سه بعدي راشرح داده و مثالهاي از كاربردهاي آن را بيان مي كنيم ، سپس درونيابي داده هاي چند بعدي و روش درونيابي مثلثي و اسكاتر را شرح خواهيم داد .

خلاصه اي از توابع درونيابي در مطلب به شرح زير مي باشد :

تابع

شرح

griddata

گره بندي داده ها و سطح مناسب

griddata3

گره بندي بالاي سطح سه بعدي

griddatan

گره بندي داده هاي بالاي سطح (ابعاد بزرگتر يا مساوي سه )

interp1

درونيابي تك بعدي

interp2

درونيابي دوبعدي

interp3

درونيابي سه بعدي

interpft

درونيابي تك بعدي با بكارگيري روش FFT

intern

درونيابي N-D

mkpp

ايجاد چند جمله ايهاي تكه اي

pchip

درونيابي مكعبي هرميت چند جمله ايهاي تكه اي  (PCHIP )

ppval

برازش ( محاسبه در مقدار چند جمله اي در نقاط خاص) چند جمله ايهاي تكه اي

spline

درونيابي داده ها با اسپلاين مكعبي

unmkpp

جزئيات چند جمله اي تكه اي

 

درونيابي تك بعدي :

دو نوع درونيابي در مطلب  وجود دارند :

  • درونيابي چند جمله اي
  • درونيابي بر اساس FFT

 

درونيابي تك بعدي  چند جمله اي :

تابع interp1 بيانگر درونيابي تك بعدي ميباشد ، و كاربرد عمده اي در آناليز داده ها و انطباق منحني دارد .

 

 فرم كلي اين تابع بصورت زير است :

             yi=interp1(x,y,xi,method)

 

كه در آن x مقادير نقاط و Yمقادير تابع در اين نقاط و xi برداري شامل نقاطي است كه بايستي درونيابي شوند وmetod   انتخاب روش خاص درونيابي ميباشد كه به شرح زيرند :

  • روش همسايگي نزديك ( neighbor  ) : بجاي (method='neighbor' ) را قرار ميدهيم كه در اين روش نقاط درونيابي را به استفاده از نزديكترين نقاط به آنها محاسبه ميكند .
  • روش درونيابي خطي (Linear ) : بجاي (method='linear' ) را قرار ميدهيم كه در اين روش از ترسيم خطوط مختلف مابين داده ها براي محاسبه درونيابي استفاده مي نمايد .
  • روش درونيابي اسپلاين درجه سه (Cubic spline ): بجاي (method='spline' ) را قرار ميدهيم ، دراين روش براي درونيابي از روش درونيابي اسپلاين مكعبي ( درجه سه ) استفاده مينمايد .
  • درونيابي مكعبي (Cubic ) : بحاي (method='pchip' or 'cubic'  ) را قرار ميدهيم ، در اين روش از درونيابي چند جمله ايهاي  درجه سه هرميت براي محاسبه درونيابي استفاده ميكند .

 

درصورتيكه بخواهيد داده هاي خارج از محدوده بازه داده هاي معلوم را به روش درونيابي تعين كنيد و يا به عبارت ديگر عمل برونيابي (Extrapolation ) را  نيز انجام دهيد ميتوانيد تابع extrapval  را به تابع درونيابي خود اضافه نمائيد ، روند بصورت زير خواهد بود :

       Yi=interp1(x,y,xi,method,extrapval)

 

توجه به سرعت و حافظه و همواري :

 هنگامي كه از روش درونيابي استفاده ميكنيد ، حافظه عملكرد به مقدار زيادي اشغال شده و زمان  محاسبات طولاني ميگردد ، بنابراين لازم است كه بدانيم كه كداميك از روشهاي درونيابي كه در فوق بيان شد سريعتر و نرميت منحني بدست آمده بيشتر بوده و حافظه كمتري از كامپيوتر را اشغال ميكند :

  • روش nearest  سريع ميباشد ولي خروجي داده هاي آن از همواريت كمتري برخوردار است .
  • روش linear حافظه بيشتري را از روش nearest اشغال ميكند و كمي بيشتر از اين روش زمان ميبرد و همانند اروش nearest در نقاط انتهاي شيب تغير ميكند .
  • روش spline  زمان طولانيتري براي محاسبات صرف ميكند ولي حافظه كمتري نسبت به روش cubic اشغال ميكند ولي نتايج بدست آمده از نرميت بالائي برخوردار است و نمودار بدست آمده نرمتر است اگرورويهاي شما نزديك به هم باشند نتايج دقيقتري از اين روش بدست خواهيد آورد .
  • روش cubic  زمان عملكرد بالائي دارد نتايج بدست آمده نسبت به روشهاي  nearest و linear نرمتر ميباشد ،به هرحال داده ها و مشتقات  آنها در اين روش پيوسته هستند .

روندهاي كه شرح داده شد در درونيابي دوبعدي نيز صادق است .

مثال :

x = 0:10;

y = sin(x);

xi = 0:.25:10;

yi = interp1(x,y,xi);

plot(x,y,'o',xi,yi)

 

مثال :

t = 1900:10:1990;

p = [75.995  91.972  105.711  123.203  131.669...

     150.697  179.323  203.212  226.505  249.633];

interp1(t,p,1975)

ans =

    214.8585

مثال :

t = 2000:10:2090;

p = [75.995  91.972  105.711  123.203  131.669...

     150.697  179.323  203.212  226.505  249.633];

 x = 2000:1:2090;

 y = interp1(t,p,x,'spline');

 plot(t,p,'o',x,y)

درونيابي بر اساس FFT  :

تابع interpft بيانگر روش درونيابي بر اساس FFT ميباشد . اين روش براساس تبديلات فوريه اقدام به محاسبه درونيابي مينمايد  فرم كلي آن بصورت زير است :

            Y=interpft(x,n)

كه در آن x نمونه اي از  بردار مقادير هم فضاي تابع پريوديك و n تعداد نقاط هم فضا كه برگردانده ميشوند .

درونيابي دوبعدي :

تابع interp2 بيانگر درونيابي دوبعدي ميباشد و كاربرد زيادي در آناليز داده هاو پروسه هاي ايجاد تصوير دارد ، فرم عمومي آن بصورت :

        ZI = interp2(X,Y,Z,XI,YI)

ZI = interp2(Z,XI,YI)

ZI = interp2(Z,ntimes)

ZI = interp2(X,Y,Z,XI,YI,method)

 

Z يك آرايه مستطيلي كه شامل مقادير تابع دوبعدي است ، x,y آرايه هاي هم اندازه هستند كه شامل نقاطي است كه با استفاده از آنها z بدست ميايد .xi,yi شامل نقاطي است كه درونيابي در آن انجام ميگيرد ، method شامل روشهاي است كه براي محاسبه درونيابي بكاري ميرود (binearest  و bilinear  و bicubic, و  bispline  توضيح اين روشها همانند روشهاي است كه در يخش  قبل بيان براي روشهاي درونيابي تك بعدي معرفي  گرديده است .

مثال :

[X,Y] = meshgrid(-3:.25:3);

Z = peaks(X,Y);

[XI,YI] = meshgrid(-3:.125:3);

ZI = interp2(X,Y,Z,XI,YI);

mesh(X,Y,Z), hold, mesh(XI,YI,ZI+15)

hold off

axis([-3 3 -3 3 -5 20])

 

مثال :

years = 2000:10:2040;

service = 10:10:30;

wage = [150.697 199.592 187.625

          179.323 195.072 250.287

          203.212 179.092 322.767

          226.505 153.706 426.730

          249.633 120.281 598.243];

 w = interp2(service,years,wage,15,2025)

 

 w =

  190.6288

مقايسه روشهاي درونيابي :

براي مثال درونيابي دوبعدي براي ماتريس داده هاي  را با روشهاي مختلف مقايسه ميكنيم :

 

1- ايجاد تابع peaks   در تجزيه و تحليل پائين :

[x,y]=meshgrid(-3:1:3);

z=peaks(x,y);

surf(x,y,z)

2-  درونيابي با گره بندي هاي ريز :

 

[x,y]=meshgrid(-3:0.25:3);

z=peaks(x,y);

surf(x,y,z)

 

3- درونيابي با بكارگيري روش همسايگي نزديك :

[x,y]=meshgrid(-3:1:3);

[xi,yi]=meshgrid(-3:0.25:3);

z=peaks(x,y);

zi1=interp2(x,y,z,xi,yi,'nearest')

surf(xi,yi,zi1)

4- درونيابي با بكارگيري روش bilinear  :

[x,y]=meshgrid(-3:1:3);

[xi,yi]=meshgrid(-3:0.25:3);

z=peaks(x,y);

zi1=interp2(x,y,z,xi,yi,'bilinear')

surf(xi,yi,zi1)

 

 

5-  درونيابي با بكار گيري روش bicubic  :

[x,y]=meshgrid(-3:1:3);

[xi,yi]=meshgrid(-3:0.25:3);

z=peaks(x,y);

zi1=interp2(x,y,z,xi,yi,'bicubic');

surf(xi,yi,zi1)

در زير نماي افقي ترسيمات بترتيب روشهاي 3 و 4 و 5  مشاهده ميكند :

Contor(xi,yi,zi1)

Contor(xi,yi,zi2)

 

 

 

Contor(xi,yi,zi3)

 

 

 

اگربه نماي افقي روش bicubic  بنگريد مشاهده ميكنيد كه منحني حاصله از نرميت بالائي برخوردار است اما اين دليل بر آن نيست كه مبناي اصلي محاسبات خود قرار دهيد بلكه در بعضي از زمينه هاي كاربردي مانند ايجاد تصاوير در پزشكي روش nearest  عملكرد بهتري دارد و ديد بهتري از اعضاء ميدهد چراكه اين روش داده هاي جديد را وارد نميكند  .

 انجام پروژه با نرم افزار متلب ( matlab  ) پذیرفته می شود.

درونيابي آرايه هاي چند بعدي :

تعدادي از توابع كه براي درونيابي آرايه هاي چند بعدي بكار ميروند عبارتند از :

تابع

توضيج

interp3

درونيابي آرايه هاي سه بعدي

interpn

درونيابي آرايه هاي چندبعدي

ndgrid

گره بندي آرايه هاي چند بعدي

 

درونيابي آرايه هاي سه بعدي :

تابع interp3 بيانگر درونيابي سه بعدي ميباشد ، براي درونيابي مابين سه سري داده بايستي نكات زير را بدانيد :

*    x,y,z   مختصات نقاط در ماتريس v ميباشند .

* براي محاسبه نقاط درونيابي  مقادير بايستي شامل ماتريس v و x,y,z  بفرمهاي عمومي زير باشند :

          VI = interp3(X,Y,Z,V,XI,YI,ZI)

VI = interp3(V,XI,YI,ZI)

VI = interp3(V,ntimes)

VI = interp3(...,method)

 

روشهاي براي محاسبه درونيابي همانند روشهاي بكار رفته در درونيابي تك بعدي ميباشد اين روشها عبارتند از (linear, nearest, cubic )

 

مثال :

[x,y,z,v] = flow(10);

[xi,yi,zi] = meshgrid(.1:.25:10, -3:.25:3, -3:.25:3);

vi = interp3(x,y,z,v,xi,yi,zi);     % vi is 25-by-40-by-25

slice(xi,yi,zi,vi,[6 9.5],2,[-2 .2]), shading flat

 

درونيابي آرايه هاي چند بعدي :

تابع intern بيانگر درونيابي مابين چندين نقطه ميباشد فرمهاي كلي اين تابع بصورت زير است :

 

          VI = interpn(X1,X2,X3,...,V,Y1,Y2,Y3,...)

VI = interpn(V,Y1,Y2,Y3,...)

VI = interpn(V,ntimes)

VI = interpn(...,method)

 

كه در آن X1,X2,X3,..., ماتريس نقاط و v مقاديري  ميباشند كه براساس اين نقاط بدست آمده اند . Y1,Y2,Y3,...  نقاط بدست  آمده از ngrid ميباشند . روشهاي (methods ) كه در اين روش ميتوان بكار برد عبارتند از :spline و linear, nearest, cubic .

 

گره بندي ( شبكه بندي ) آرايه هاي چند بعدي :

 تابع ndgrid  براي گره بندي آرايه هاي چند بعدي بكار ميرود ، كه ميتوان با واردكردن مقادير خاص فمت شبكه بندي را كنترل نمود فرم عمومي اين تابع بصورت زيرا ست :

[X1,X2,X3,...] = ndgrid(x1,x2,x3,...)

[X1,X2,...] = ndgrid(x)

 

براي مثال تابع سه بعدي   را در نظر بگيريد ، كه در آن و   و  ميباشد . براي برازش ترسيم اين تابع داريم :

x1=-2:0.2:2;

x2=-2:0.25:2;

x3=-2:0.16:2;

[x1,x2,x3]=ndgrid(x1,x2,x3);

z=x2.*exp(-x1.^2 -x2.^2 -x3.^2);

slice(x2,x1,x3,z,[-1.2 0.8 2],2,[-2 0.2])

 

شبكه بندي مثلثي و درونيابي داده هاي پراكنده :

مطلب  روشهاي مفيد و راحتي براي مسائل  closest-point  (نقاط نزديك) به هم و آناليز هندسي دارد ، قسمتي از توابع مربوطه را در جدول زير مشاهده مينمائيد .

تابع

توضيح

convhull

پوسته محدب

delaunay

شبكه بندي مثلثي

delaunay3

شبكه بندي سه بعدي مثلثي

dsearch

روش جستجوي نقاط نزديك به هم در شبكه بندي مثلثي

inpolygon

براي نقاط داخل محدوده كثير الاضلاع صادق است

polyarea

مساحت كثير الاضلاع

rectint

مساحت تقسيم بندي دو يا چندين مستطيل

tsearch

جستجوي مثلثهاي نزديك به هم

voronio

دياگرام voronoi

 به مثالهاي زير توجه فرمائيد :

load seamount

plot(x,y,'.','markersize',10)

k = convhull(x,y);

hold on, plot(x(k),y(k),'-r'), hold off

grid on

 

load seamount

plot(x,y,'.','markersize',12)

xlabel('Longitude'), ylabel('Latitude')

grid on

 

tri = delaunay(x,y);

hold on, triplot(tri,x,y), hold off

 

figure

hidden on

trimesh(tri,x,y,z)

grid on

xlabel('Longitude');

ylabel('Latitude');

zlabel('Depth in Feet')

 

 

figure

[xi,yi] = meshgrid(210.8:.01:211.8,-48.5:.01:-47.9);

zi = griddata(x,y,z,xi,yi,'cubic');

[c,h] = contour(xi,yi,zi,'b-');

clabel(c,h)

xlabel('Longitude'), ylabel('Latitude')

 

 

load seamount

voronoi(x,y)

grid on

xlabel('Longitude'), ylabel('Latitude')

 

دیدگاه خود را بنویسید

دیدگاه پس از تائید مدیریت منتشر می شود.