رسم نمودار سه بعدی در متلب
به نام خدا و سلام.
به جلسه بیست و دوم از سری جلسات آموزش متلب خوش آمدید. آموزش متلب از وبسایت متلبپلاس به صورت رایگان ارائه میشود. در جلسه قبل به آموزش کامل رسم نمودار دو بعدی با plot پرداختیم. در این جلسه به رسم نمودار سه بعدی در متلب، به همراه جزئیات آن میپردازیم. مبحث رسم نمودار سه بعدی در متلب، جزئیات بسیار زیادی دارد. رسم نمودار سه بعدی با plot3، رسم نمودار سه بعدی صفحهای با دستورات surf و mesh، ایجاد شبکه با meshgrid و… ازین موارد اند.
با متلب پلاس همراه باشید.
رسم نمودار سه بعدی در متلب با دستور plot3
سادهترین نمودار سه بعدی که با متلب میتوان رسم کرد، نمودار خط در فضای سه بعدی است. برای رسم خط در فضای سه بعدی در متلب از دستور plot3 استفاده میکنیم. طرز استفاده از دستور plot3 کاملا مشابه دستور plot است، فقط یک ورودی بیشتر میگیرد. مواردی مثل ضخامت خط، نوع خط (توپر، خط چین، نقطه چین و…)، رنگ و… کاملا مطابق دستور plot است. نوشتار (سینتکس) دستور plot3 به صورت plot3(X1,Y1,Z1,LineSpec,…) است. که x1,y1,z1 دادهها و LineSpec ویژگی خطوط است. به مثال زیر دقت کنید.
x = 0:0.05:10*pi;
y = sin(x);
z = cos(x);
plot3(x,y,z,'-.','linewidth',1.4)
در این مثال، بازه x از صفر تا 10پی میباشد. دادههای محور y و z نیز سینوس و کسینوس x میباشند. نوع خط را به صورت نقطه-خط و ضخامت آن را 1.4 درنظر گرفتهایم. رسم این شکل منجر به تشکیل یک فنر افقی میشود.
رسم آسان نمودار سه بعدی با ezplot3 و fplot3
مشابه با رسم آسان نمودار دو بعدی، برای نمودار سه بعدی هم دستوراتی داریم. با استفاده از ezplot3 و یا fplot3 میتوان فقط با وارد کردن تابع، نمودار سه بعدی آن را رسم کرد. ezplot3(funx,funy,funz,[tmin,tmax]) نمودار سه بعدی توابع funx، funy و funz را در بازه tmin تا tmax رسم میکند. البته نوشتن بازه ضروری نیست. دقت کنید که توابع باید به صورت رشته متنی (درون کوتیشن) تعریف شوند. اما در نسخههای جدید متلب، نرم افزار متلب پیشنهاد میکند که بجای دستور ezplot3 از دستور fplot3 استفاده کنیم. fplot3(funx,funy,funz) نمودار سه بعدی توابع funx، funy و funz را رسم میکند. دقت کنید که برای استفاده از fplot3، توابع بایستی از نوع نمادین (symbolic) یا فانکشن هندل (@x) باشند. برای درک بهتر روش رسم آسان نمودار سه بعدی، به مثالهای زیر دقت کنید.
اما ممکن است برای رسم نمودار سه بعدی، به یک صفحه (surface) در فضا نیاز داشته باشیم. در این حالت دیگر دستور plot3 کمکی به ما نمیکند. دستوراتی نظیر surf و mesh (با خانوادههایشان!) در متلب برای همین منظور ارائه شدهاند. اما برای رسم صفحه در فضای سه بعدی نیاز به شبکه بندی دادهها داریم. پس ابتدا روش شبکه بندی دادهها ارائه شده و سپس وارد رسم سه بعدی صفحات میشویم.
شبکه بندی دادهها با meshgrid در متلب
شبکه بندی دادهها در متلب با استفاده از دستور meshgrid صورت میگیرد. این دستور قدرتمند، شبکهای از دادههای ما با ابعاد وارد شده ایجاد میکند. مثلا فرض کنید میخواهیم یک شبکه m در n ایجاد کنیم. دستور meshgrid(x,y) این شبکه بندی را انجام میدهد. در این حالت طول بردار x برابر n و y نیز m میباشد. به مثال زیر دقت کنید.
x = linspace(1,5,5);
y = linspace(6,11,6);
[X,Y] = meshgrid(x,y);
پس از اجرای عبارت فوق اگر ابعاد X و Y را چک کنید به صورت 6 در 5 میباشند.
با درک همین نکته ساده از شبکه بندی میتوانیم انواع نمودارهای سه بعدی را رسم کنیم.
رسم نمودار سه بعدی با surf در متلب
برای رسم نمودار سه بعدی با surf به دادههای شبکه بندی شده نیاز داریم. دستور surf صفحهای دادههای وارد شده را در فضای سه بعدی ترسیم میکند. رایجترین سینتکس دستور surf به صورت surf(X,Y,Z) است. که X,Y,Z ماتریسهای ورودی برای رسم شکل میباشند. رنگ شکل نهایی دستور surf براساس ارتفاع نقاط میباشد. به این صورت که به پایینترین نقطه رنگ آبی و به بالاترین نقطه رنگ زرد اختصاص مییابد. البته این طیف رنگی (parula) قابل تغییر است. مثال زیر را درنظر بگیرید.
x = 0:0.1:pi;
y = 0:0.1:pi;
[X,Y] = meshgrid(x,y);
Z = sqrt(sin(X).^2 + cos(Y).^2);
surf(X,Y,Z)
دقت داریم که نقطهای که پس از (X) و (Y) نوشته شده بخاطر ماتریسی بودن محاسبات است. رنگ بندی شکل فوق، به صورت پیشفرض نرم افزار متلب است. اگر به نقاط هم ارتفاع شکل دقت کنید میبینید که هم رنگ هستند. در واقع توزیع رنگ براساس ارتفاع نقاط (در راستای z) صورت گرفته. برای مشاهده راهنمای رنگ برحسب ارتفاع، کافیست دستور colorbar را در پنجره فرمان بنویسم. در این حالت شکل به صورت زیر در میآید.
colorbar
ستون colorbar نقش راهنمای شکل برای درک بهتر ارتفاع نقاط را دارد. برای تغییر تم رنگی نمودار از دستور colormap استفاده میکنیم. دستور colormap رنگ موردنظر ما را با کد RGB یا رنگهای تعریف شده، ایجاد میکند. رنگهای تعریف شده نیز طیف وسیعی را شامل میشوند که در اکثر موارد کاربردی اند. در شکل زیر تمامی 18 طیف رنگی نرم افزار متلب نشان داده شدهاست.
برای اعمال هر یک از طیفهای رنگی فوق، عبارت اختصاصی آن را پس از colormap مینویسیم. مثلا طیف رنگی autumn از شکل فوق را درنظر بگیرید. برای فعال کردن این تم رنگی روی نمودار، به صورت زیر عمل میکنیم.
colormap autumn
حال ویژگی جالب دیگری از نمودارهای سه بعدی که به نام کانتور میشناسیم، معرفی میشود.
نمایش کانتور صفحه با surfc در متلب
کانتور برای نمایش شکل سه بعدی در فضای دو بعدی بکار میرود. با استفاده از این قابلیت میتوانیم ادراکی که از یک نمودار سه بعدی بدست میآید را از یک نمودار دو بعدی داشته باشیم. آموزش رسم کانتور در متلب، در جلسه 26 ام ارائه شده (برای مشاهده روی عبارت قرمز کلیک کنید). در نمودارهای رویه سه بعدی، امکان افزودن کانتور به شکل براحتی میسر است. برای رسم کانتور در کنار رویه سه بعدی، از دستور surfc استفاده میکنیم. سینتکس دستور surfc کاملا مشابه با دستور surf است. برای درک بهتر، یک مثال از رویه سه بعدی را با استفاده از دستور surfc در متلب رسم میکنیم.
x = -2:0.1:2;
y = -2:0.1:2;
[X,Y] = meshgrid(x,y);
Z = X.*exp(-X.^2 - Y.^2);
surfc(X,Y,Z)
colorbar
مشاهده میشود که خطوط هم مرکز حول نقاط اوج و قعر نمودار و در صفحه x-y رسم شدهاند. به این خطوط که در واقع ارتفاع نقاط را نشان میدهند، کانتور میگوییم.
رسم آسان نمودار سه بعدی با ezsurf و fsurf
با استفاده از ezsurf و یا fsurf میتوان فقط با وارد کردن تابع، نمودار سه بعدی رویهای آن را رسم کرد. ezsurf(fun) نمودار سه بعدی تابع fun را رسم میکند. دقت کنید که تابع باید به صورت رشته متنی (درون کوتیشن) تعریف شوند. اما در نسخههای جدید متلب، نرم افزار متلب پیشنهاد میکند که بجای دستور ezsurf از دستور fsurf استفاده کنیم. fsurf(f) نمودار سه بعدی تابع f را رسم میکند. دقت کنید که برای استفاده از fsurf، تابع بایستی از نوع نمادین (symbolic) یا فانکشن هندل (@x) باشد. برای درک بهتر روش رسم آسان نمودار سه بعدی، به مثالهای زیر دقت کنید.
رسم نمودار سه بعدی با mesh در متلب
مشابه با نمودارهای surf، نمودارهای mesh را در متلب داریم. نمودارهای رسم شده با دستور mesh شبیه به خروجی surf هستند اما به صورت وایرفریم یا خام میباشند. رنگها در این نوع نمودار مشابه با surf، بیانگر ارتفاع نقاط در راستای z میباشند. سینتکس دستور mesh به صورت mesh(X,Y,Z) است. که X,Y,Z ماتریسهای ورودی برای رسم شکل میباشند. قبل از ایجاد ماتریسهای X,Y,Z بایستی آنها را شبکه بندی کنیم. شبکه بندی نیز با استفاده از دستور meshgrid انجام میشود. به مثال زیر دقت کنید.
x = -2:0.1:2;
y = -2:0.1:2;
[X,Y] = meshgrid(x,y);
Z = X.*exp(-X.^2 - Y.^2);
mesh(X,Y,Z)
امکان افزودن راهنمای رنگی colorbar به نمودارهای mesh نیز فراهم است. همچنین طیفهای رنگی مطابق با آنچه در شکلهای بالا دیدیم میباشد. در شکل زیر راهنمای colorbar و طیف رنگی hsv را اضافه میکنیم.
x = -2:0.1:2;
y = -2:0.1:2;
[X,Y] = meshgrid(x,y);
Z = X.*exp(-X.^2 - Y.^2);
mesh(X,Y,Z)
colorbar
colormap hsv
نمایش کانتور مش با meshc در متلب
مطابق با آنچه ذکر شد، کانتور برای نمایش شکل سه بعدی در فضای دو بعدی بکار میرود. برای نمایش کانتور در کنار رویه سه بعدی mesh، از دستور meshc استفاده میکنیم. سینتکس دستور meshc کاملا مشابه با دستور mesh است. برای درک بهتر، یک مثال از رویه سه بعدی را با استفاده از دستور meshc در متلب رسم میکنیم.
[X,Y] = meshgrid(-3:.125:3);
Z = peaks(X,Y);
meshc(Z)
برای رسم این رویه در کنار کانتورهای آن، از تابع peaks استفاده کردیم. تابع peaks نام اختصاصی یک تابع ریاضی است که برای راحتی و خلاصه نویسی بکار میرود. برای مشاهده معادلات ریاضی تابع peaks، عبارت peaks را در پنجره فرمان نوشته و Enter بزنید.
peaks
z = 3*(1-x).^2.*exp(-(x.^2) - (y+1).^2) ...
- 10*(x/5 - x.^3 - y.^5).*exp(-x.^2-y.^2) ...
- 1/3*exp(-(x+1).^2 - y.^2)
توابع آماده دیگری نیز در متلب وجود دارند که برای رسم شکل مفید هستند. از جمله این توابع میتوان به cylinder، sphere و ellipsoid اشاره کرد.
رسم آسان نمودار سه بعدی با ezmesh و fmesh
با استفاده از ezmesh و یا fmesh میتوان فقط با وارد کردن تابع، نمودار سه بعدی آن را رسم کرد. ezmesh(fun) نمودار سه بعدی تابع fun را رسم میکند. دقت کنید که تابع باید به صورت رشته متنی (درون کوتیشن) تعریف شوند. اما در نسخههای جدید متلب، نرم افزار متلب پیشنهاد میکند که بجای دستور ezmesh از دستور fmesh استفاده کنیم. fmesh نمودار سه بعدی تابع f را رسم میکند. دقت کنید که برای استفاده از fmesh، تابع بایستی از نوع نمادین (symbolic) یا فانکشن هندل (@x) باشد. برای درک بهتر روش رسم آسان نمودار سه بعدی، به مثالهای زیر دقت کنید.
تنظیمات نمودارهای سه بعدی در متلب
موضوع رسم نمودار در متلب، دارای جزئیات بسیار زیادی است. مواردی مثل، عنوان نمودار، عنوان محورها (لیبل)، رسم نمودار روی هم یا در کنار هم و… ازین قبیل اند. با توجه به اینکه این جزئیات در رسم نمودار دو بعدی، سه بعدی و انواع نمودارها وجود دارد. همه این موارد را در بخش جزئیات آموزش رسم نمودار در متلب ارائه کردهایم. برای مشاهده این موارد روی لینک قرمز قبل کلیک نمائید.
تمرینات این جلسه
در انتهای این جلسه 3 تمرین متلب مربوط به مباحث این جلسه ارائه شده است. لطفا این تمرینها را حل کرده و با پاسخ آن مقایسه کنید. پاسخ تمرینات متلب این جلسه در کانال تلگرام متلب پلاس منتشر میشود. از آیکونهای سمت راست صفحه میتوانید در این کانال عضو شوید.
تمرین اول) معادله y=sin(x) و z=sin(y) خط را برای x های بین صفر تا 10 در فضای سه بعدی رسم کنید.
تمرین دوم) با استفاده از تابع sphere یک کره ایجاد کرده و colormap (تم رنگی) آن را به صورت cool قرار دهید.
تمرین سوم) نمودار mesh تابع z =x^2+y^2 را رسم کنید. راهنمای رنگی نیز برای نمودار مشخص کنید.
جمعبندی
جلسه بیست و دوم از سری جلسات آموزش نرم افزار متلب به پایان رسید. امکان دانلود آموزش متلب pdf این جلسات نیز از لینک زیر برای شما فراهم است. این جلسه درباره رسم نمودارهای سه بعدی در متلب صحبت کردیم. گرافیک و ترسیمههای سه بعدی بخش مهمی از رسم نمودار در متلب میباشند. در این جلسه روشهای مختلفی برای رسم نمودار سه بعدی شامل خط و صفحه در فضا ارائه شد در انتها چند تمرین برای یادگیری بیشتر به شما واگذار کردیم که پاسخ آنها در کانال تلگرامی متلب پلاس وجود دارد.
بی صبرانه منتظر نظرات، سوال و ابهامات شما عزیزان هستیم. سعی میکنیم تا هرگونه سوال یا ابهامی که در این باره دارید را پاسخ دهیم. توصیه میشود که حتما تمرینات این جلسه را انجام بدید و اگر سوال و ابهامی دارید در بخش نظرات (پایین همین صفحه) به ما بگید. از فهرست سمت راست هم میتونید به بقیه جلسات دسترسی داشته باشید.
دیدگاهتان را بنویسید