رسم نمودار در متلب – بخش سوم : انواع نمودارهای سه بعدی درمتلب
رسم نمودار در تحلیل هر پروژه و مسئلهای، راحتترین و قابل فهمترین راه به نمایش گذاشتن نتایج است. متلب هم از این قاعده مستثنی نیست و پس از حل هر مسئلهای در آن، لازم است نتایج بصورت نمودار رسم شوند. اما ترفندها و دستوران رسم نمودار در نرمافزار متلب بسیار گسترده و در عین حال ساده هستند. ما در وبسایت آموزشی گام98، طی مقالات « آموزش رسم نمودار در متلب » به صورت تصویری و مفصل به این موضوع پرداختیم. اکنون در بخش سوم رسم نمودار در متلب ، انواع دستورات رسم نمودار سه بعدی در متلب را بیان خواهیم کرد.
رسم نمودار برای بیان نتایج یک تحقیق یا تحلیل ریاضی امری ضروری است.
دستورات رسم نمودار سه بعدی در متلب بسیار زیاد و متنوع بوده و بسته به نوع نیاز هر پروژه یا تمرین خاصی میتوانیم از دستورات مربوطه استفاده نماییم.
رسم نمودار سه بعدی در متلب – دستور surf و surfc
از پرکاربردترین دستورات برای نمایش یک نمودار سه بعدی به صورت حجم دو دستور surf و surfc میباشند که برای ترسیم نمودارهای سه بعدی بسیار استفاده میشوند.
دستور surfc علاوه بر رسم حجم سه بعدی کانتورهای نمودار را به صورت دو بعدی ترسیم مینماید.
نحوه استفاده از هر دو دستور کاملا مشابه با هم میباشد به این صورت که ابتدا مقادیر متغیرهای مستقل x و y به دستور داده میشود.
سپس در ورودی سوم مقدار متغیر وابسته مثلا به نام z به دستور داده میشود. در مثال زیر یک تابع دو متغیره را برای هر دو دستور surf و surfc به صورت خیلی ساده ترسیم خواهیم کرد:
1 2 3 4 5 6 7 8 9 10 11 |
x = 0:0.1:12 ; y = 2:0.5:20 ; [X, Y] = meshgrid(x,y); Z = 3*csc(X.*Y) + 2*sec(X.*Y) ; figure; subplot 121 surf(X,Y,Z) title(' Diagram3D With Surf','fontsi',20,'interpreter','latex') subplot 122 surfc(X,Y,Z) title(' Diagram3D With Surfc','fontsi',20,'interpreter','latex') |
توضیحات کد بالا:
برای ترسیم نمودار دو سه بعدی در متلب باید دقت شود که حتما متغیرهای مستقل (x,y) باید شبکهبندی شوند و اینکار با استفاده از دستور meshgrid انجام میشود.
اگر جزئیات دیگر مانند عنوان گذاشتن برای نمودار و یا رسم چند نمودار در یک صفحه و … را کامل مسلط نیستید حتما مقاله اول رسم نمودار در متلب ما را که در بالا به آن اشاره شده است را بخوانید که به طور کامل این جزئیات را پوشش دادهایم.
اگر میخواهید برنامهنویسی در متلب را به راحتی فرابگیرید، حتما به صفحه آموزش « برنامه نویسی متلب » وبسایت گام98 سر بزنید.
توضیحات تکمیلی دستور surf و surfc در متلب
1- برای اینکه متوجه بشویم هر رنگ مربوط به چه مقداری میباشد از دستور colorbar استفاده میشود که در کنار نمودار درجهبندی هر رنگ را مشخص میکند.
2- برای تغییر نوع نمایش رنگها در داخل گرهبندی و روی گرهبندیها از دو زیر دستور ‘FaceColor’ و ‘EdgeColor’ به ترتیب استفاده میشود. برای این دستورات انواع رنگهایی با کدینگ RGB و حالتهایی ‘flat’ و ‘interp’ که میتوانید آنها را امتحان نمایید.
3- اما برای تغییر نوع رنگ در نمودارهای سه بعدی به طور کلی از دستور colormap استفاده میشود. که بعد از این کلمه میتوانیم انواع حالتهای رنگی را مطابق جدول زیر وارد نماییم.
4- همانچنانکه برای رسم نمودار با دستور plot گفته شد در اینجا نیز میتوانید از زیر دستور ‘LineStyle’ برای عوض کردن نوع خطهای نمودار استفاده نمایید.
در یک مثال تکمیلی برای دو دستور surf و surfc نکات گفته برای رسم دقیقتر نمودار را در نظر خواهیم گرفت:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
x = 0:0.1:12 ; y = 2:0.5:20 ; [X, Y] = meshgrid(x,y); Z = X.^2 + Y.*sin(2.*Y) ; figure; subplot 121 surf(X,Y,Z,'LineStyle','-.') title(' Diagram3D With Surf','fontsi',20,'interpreter','latex') xlabel('X','fontsi',20,'interpreter','latex') ylabel('Y','fontsi',20,'interpreter','latex') zlabel('Z','fontsi',20,'interpreter','latex') colorbar; subplot 122 surfc(X,Y,Z) title(' Diagram3D With Surfc','fontsi',20,'interpreter','latex') xlabel('X','fontsi',20,'interpreter','latex') ylabel('Y','fontsi',20,'interpreter','latex') zlabel('Z','fontsi',20,'interpreter','latex') colorbar; colormap hsv |
توضیحات کد بالا:
برای استفاده از دستور colormap دقت شود که در حالت استفاده از دستور subplot به همهی نمودارهای موجود در صفحه فقط یک نوع رنگ میتوان نسبت داد و نمیتوان برای هرکدام دسته رنگی متفاوت انتخاب کرد.
رسم نمودار سه بعدی در متلب : دستورات مشابه با دستور surf
دستوراتی را که در ادامه خواهیم گفت نسبتا کاربرد کمی داشته و به ندرت استفاده خواهند شد اما برای تکمیل شدن این مقاله آنها را آوردهایم.
دستوراتی مشابه با دستور surf وجود دارد که به طور خلاصه آنها را معرفی خواهیم کرد:
1- دستور surface : این دستور رسم نمودار سه بعدی را در یک صفحه انجام میدهد که بصورت دوبعدی است و با رنگ مقادیر تابع مشخص میشود.
اما میتوانیم با دستور view زاویه موردنظر برای نمایش نمودار را برای نشان دادن سه بعدی انتخاب نماییم و شکل را از روی صفحه اصطلاحا بلند نماییم.
2- دستور sufl : دستور sufl همان دستور surf میباشد با این تفاوت که دسته رنگی (colormap) آن از نوع lighting میباشد که یک نوع حالت روشنی را این نوع دستور ایجاد خواهد کرد.
3- دستور surfnorm : این دستور تنها فرقی که با دستور surf دارد این است که بردارهای نرمال را نیز ترسیم مینماید.
در ادامه با یک مثال این سه دستور را به شما نشان خواهیم داد:
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 |
x = 15:0.2:19 ; y = 5:0.2:10 ; [X, Y] = meshgrid(x,y); Z = sin(0.4*X.*Y)+ 2*sqrt(X.*Y) ; figure; subplot 131 surface(X,Y,Z) title(' Diagram3D With surface','fontsi',20,'interpreter','latex') xlabel('X','fontsi',20,'interpreter','latex') ylabel('Y','fontsi',20,'interpreter','latex') zlabel('Z','fontsi',20,'interpreter','latex') view(-60,40) subplot 132 surfl(X,Y,Z) title(' Diagram3D With surfl','fontsi',20,'interpreter','latex') xlabel('X','fontsi',20,'interpreter','latex') ylabel('Y','fontsi',20,'interpreter','latex') zlabel('Z','fontsi',20,'interpreter','latex') subplot 133 surfnorm(X,Y,Z) title(' Diagram3D With surfnorm','fontsi',20,'interpreter','latex') xlabel('X','fontsi',20,'interpreter','latex') ylabel('Y','fontsi',20,'interpreter','latex') zlabel('Z','fontsi',20,'interpreter','latex') |
رسم نمودار سه بعدی در متلب – دستور mesh , meshc meshz در متلب
در ادامه دستورات رسم نمودار سه بعدی در متلب دستورات mesh , meshc , meshz داریم که از یک حالت مش مانند برای ترسیم حجم استفاده میشود.
دستور meshc مشابه با دستور surfc کانتورها را نیز ترسیم میکند اما دستور meshz علاوه بر رسم حجم سه بعدی زیر ناحیه رسم شکل یک پرده ترسیم مینماید عملا مانند این است که سطح زیر نمودار را به صورت یک پرده یا دیوار نمایش دهد.
نحوه استفاده از این دستور کاملا مشابه با دستور surf میباشد و تفاوتی نمیکند.
در ادامه با حل یک مثال از سه نوع دستور استفاده خواهیم کرد:
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 |
x = 5:0.2:10 ; y = 10:0.2:15 ; [X, Y] = meshgrid(x,y); Z = log(X.*Y) + X.*sin(Y) ; figure; subplot 131 mesh(X,Y,Z,'LineStyle','-.') title(' Diagram3D With mesh','fontsi',20,'interpreter','latex') xlabel('X','fontsi',20,'interpreter','latex') ylabel('Y','fontsi',20,'interpreter','latex') zlabel('Z','fontsi',20,'interpreter','latex') subplot 132 meshc(X,Y,Z) title(' Diagram3D With meshc','fontsi',20,'interpreter','latex') xlabel('X','fontsi',20,'interpreter','latex') ylabel('Y','fontsi',20,'interpreter','latex') zlabel('Z','fontsi',20,'interpreter','latex') subplot 133 meshz(X,Y,Z) title(' Diagram3D With meshz','fontsi',20,'interpreter','latex') xlabel('X','fontsi',20,'interpreter','latex') ylabel('Y','fontsi',20,'interpreter','latex') zlabel('Z','fontsi',20,'interpreter','latex') colorbar colormap jet |
دستورات رسم نمودار سه بعدی در متلب – دستورات contour در متلب
در بسیاری از مواقع میخواهیم نمودارهای سهبعدی را به صورت دوبعدی مدل نماییم و کانتورها یا خطوط هم مقدار را در صفحه نمایش دهیم.
برای این منظور از دو دستور رایج contour و contourf استفاده مینماییم.
نحوه استفاده کاملا مشابه با دستورات قبلی است و ابتدا متغیرهای مستقل و سپس متغیرهای وابسته به دستور داده میشوند. اما میتوانیم در این دستورها به عنوان ورودی چهارم تعداد کانتورها را نیز وارد نماییم.
دستور contour فقط کانتورها را ترسیم مینماید اما دستور contourf علاوه بر رسم کانتورها فواصل بین آنها را نیز با رنگهای متناسب پوشش میدهد.
اما اگر بخواهیم کانتورها را نیز به صورت سه بعدی نمایش دهیم از دستور contour3 استفاده مینماییم.
در مثال زیر هر سه دستور را به شما نشان خواهیم داد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
x = -2:0.2:2; y = -2:0.2:3; [X,Y] = meshgrid(x,y); Z = X.*exp(-X.^2-Y.^2); figure; subplot 131 [c , h] = contour(X,Y,Z,10); clabel(c,h,'FontSize',10,'Color','b') title(' Diagram3D With contour','fontsi',20,'interpreter','latex') xlabel('X','fontsi',20,'interpreter','latex') ylabel('Y','fontsi',20,'interpreter','latex') subplot 132 [c , h] = contourf(X,Y,Z,10); clabel(c,h,'FontSize',10,'Color','r') title(' Diagram3D With contourf','fontsi',20,'interpreter','latex') xlabel('X','fontsi',20,'interpreter','latex') ylabel('Y','fontsi',20,'interpreter','latex') subplot 133 contour3(X,Y,Z,'Showtext','on') title(' Diagram3D With contour3','fontsi',20,'interpreter','latex') xlabel('X','fontsi',20,'interpreter','latex') ylabel('Y','fontsi',20,'interpreter','latex') |
توضیحات کد بالا:
برای نشان دادن مقدار هر کدام از کانتورها دو روش وجود دارد :
روش اول استفاده از زیر دستور ‘Showtext’ میباشد که مقدار آن را ‘on’ قرار میدهیم.
روش دوم استفاده از زیر دستور clabel میباشد که برای اینکار ابتدا دو خروجی کانتور و ارتفاع آنها را از دستور contour گرفته و به عنوان ورودی به دستور clabel خواهیم داد.
همچنین میتوانیم تنظیمات بیشتری مانند سایز و رنگ اعداد را تنظیم نماییم.
رسم نمودار جزو پایهایترین و کاربردیترین امکانات نرمافزار متلب است که به کمک آن میتوان نتایج پروژههای مختلفِ مهندسی را رسم و تحلیل نمود. به شما پیشنهاد میکنیم از « پروژه های آماده متلب » گام98 که در زمینههای مختلف (بخصوص رشتههای مهندسی) میباشد، دیدن نمایید.
رسم نمودار سه بعدی در متلب: دستور pcolor در متلب
در ادامه دستورات رسم نمودار سه بعدی درمتلب دستور pcolor همانند دستور contour به صورت دوبعدی و در صفحه احجام سه بعدی را ترسیم میکند و مقدار متغیر وابسته را با رنگ مربوطه مشخص میکند.
نحوه استفاده از این دستور مشابه با دستورات قبلی میباشد.
برای فهم بیشتر مثال زیر را برای این دستور بیان میکنیم:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
x = -2:0.1:2; y = -2:0.1:2; [X,Y] = meshgrid(x,y); Z = X.*exp(-X.^2-Y.^2); subplot 131 pcolor(X,Y,Z) title('pcolor:Faceted Shading (Default)'... ,'fontsi',20,'interpreter','latex') xlabel('X','fontsi',20,'interpreter','latex') ylabel('Y','fontsi',20,'interpreter','latex') subplot 132 pcolor(X,Y,Z) title('pcolor:interp shading','fontsi',20,'interpreter','latex') xlabel('X','fontsi',20,'interpreter','latex') ylabel('Y','fontsi',20,'interpreter','latex') shading interp subplot 133 pcolor(X,Y,Z) title(' pcolor:flat shading','fontsi',20,'interpreter','latex') xlabel('X','fontsi',20,'interpreter','latex') ylabel('Y','fontsi',20,'interpreter','latex') shading flat |
توضیحات تکمیلی ( دستور shading در متلب)
در نوشتن کد بالا از دستور shading استفاده شده است که کلا شامل سه حالت میباشد:
1- حالت Faceted Shading که همان حالت پیش فرض میباشد و گرهبندیها را نشان میدهد.
2- حالت interp shading که برای نمایش تصویر یک حالت درونیابی انجام داده تا گریدبندیها مشخص نشود.
3- حالت flat shading در این حالت گریدبندیها مقداری نرم و فلت شده که کمتر معلوم میشود.
از دستور shading میتوان برای دستورات surf نیز استفاده کرد اما برای mesh نمیتوان استفاده کرد.
نمایش خطوط جریان و سرعت با دستورات quiver و streamline در متلب
در ادامه ترسیم نمودار سه بعدی در متلب برای ترسیم خطوط جریان در صفحه از دستور streamline و همچنین برای نمایش بردارهای سرعت یا همان تغییرات تابع در دو راستای افقی از دستور quiver استفاده میکنیم.
همانند دستور contour دستور quiver نیز برای ترسیم در صفحه مورد استفاده قرار میگیرند اما دستور streamline برای هر دو حالت دوبعدی و سه بعدی مورد استفاده قرار میگیرد.
اگر بخواهیم بردارهای سرعت را در سه بعد نمایش دهیم از دستور quiver3 استفاده مینماییم که خود میتوانید به عنوان تمرین این دستور را با کمک مراجعه به راهنما و یا سایت رسمی نرمافزار متلب انجام دهید.
با دو مثال کاربرد دستور quiver و streamline را به شما نشان خواهیم داد و هر دو مثال را در یک شکل ترسیم خواهیم کرد:
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 |
x1 = -2:0.1:2; y1 = -2:0.1:2; [X,Y] = meshgrid(x1,y1); Z = X.*exp(-X.^2 - Y.^2); [DX,DY] = gradient(Z,.2,.2); figure subplot 121 contour(X,Y,Z) hold on quiver(X,Y,DX,DY) title(' contour and quiver','fontsi',20,'interpreter','latex') xlabel('X','fontsi',20,'interpreter','latex') ylabel('Y','fontsi',20,'interpreter','latex') [x,y] = meshgrid(0:0.1:1,0:0.1:1); u = x; v = -y; subplot 122 quiver(x,y,u,v) startx = 0.1:0.1:1; starty = ones(size(startx)); streamline(x,y,u,v,startx,starty) title(' streamline and quiver','fontsi',20,'interpreter','latex') xlabel('X','fontsi',20,'interpreter','latex') ylabel('Y','fontsi',20,'interpreter','latex') |
توضیحات کد بالا:
در بخش اول ابتدا کانتورها ترسیم شده است و سپس گرادیانها با کمک دستور gradient محاسبه شدهاند و سپس فلشهای نرخ تغییرات تابع با کمک دستور quiver ترسیم شده است.
در بخش دوم ابتدا فلشهای نرخ تغییرات ترسیم شده و سپس خطوط جریان با کمک با دستور streamline که 6 ورودی دارد ترسیم شده است. ورودیهای پنجم و ششم در واقع رنج ترسیم خطوط را مشخص میکنند که باید حتما در مقدار مناسب برای آنها وارد شود.
اگر با دستور gradient آشنایی ندارید و میخواهید علاوه بر این دستور با دستورات کامل مشتق گیری در متلب آشنا شوید حتما « مقاله مشتق در متلب » ما را بخوانید.
دستورات رسم نمودار سه بعدی در متلب :ترسیم شکلهای کره، بیضوی و استوانه در متلب
برای اینکه بتوانیم شکلهای شاخصی همچون کره، بیضوی و استوانه را ترسیم نماییم دستورات اختصاصی قرار داده شده است که دیگر نیازی به نوشتن معادله آنها نبوده و به راحتی میتوان آنها را ترسیم نمود.
برای رسم کره از دستور sphere استفاده میکنیم نحوه استفاده به این صورت است که این دستور را بدون ورودی اجرا کرده اما سه خروجی x ، y و z را میگیریم و بعد با دستورات ترسیم سه بعدی میتوانیم کرهای به شعاع واحد اما در مختصاتهای را تولید نماییم.
برای رسم استوانه در متلب از دستور cylinder استفاده میکنیم:
به این صورت که اگر بدون ورودی ترسیم نماییم یک استوانه با شعاع واحد ترسیم میشود و در صورت دادن ورودی میتوانیم شعاع استوانه را حتی بصورت متغیر وارد نماییم. و میتوانیم مشابه دستور کره سه خروجی نیز برای ترسیم از آن بگیریم.
برای رسم بیضوی گون در متلب از دستور ellipsoid استفاده میشود که این دستور دارای 7 ورودی به طور کلی بوده که ورودی اول تا سوم مختصات مرکز بیضوی و ورودی چهارم تا ششم نصف طول قطر بیضوی در هر راستا را مشخص میکند.
همچنین در هر 3 دستور بالا میتوان یک عدد به عنوان تعداد تقسیم بندی نقاط برای همهی دستورات در نظر گرفت که در دستور بیضوی این عدد ورودی هفتم میباشد.
اگر این عدد n باشد هر مختصه به ماتریسی n*n تبدیل خواهد شد.
در ادامه هر سه دستور را با ارائه مثال ترسیم خواهیم نمود:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
[x,y,z] = sphere(20); figure subplot 131 surf(x,y,z) hold on surf(x+5,y+1,z+2) % centered at (5,1,2) surf(x+2,y-3,z-1) % centered at (2,-3,-1) surf(x+2,y-2,z+3) % centered at (2,-2,3) title('sphere','fontsi',20,'interpreter','latex') subplot 132 t = 0:pi/10:2*pi; [X,Y,Z] = cylinder(2+sin(t),70); surf(X,Y,Z) title('cylinder','fontsi',20,'interpreter','latex') subplot 133 [X, Y, Z] = ellipsoid(1,1,1,3,5,7,50); surf(X, Y, Z) axis equal title('ellipsoid','fontsi',20,'interpreter','latex') |
این مقاله با انواع دیگر دستورات رسم نمودار سه بعدی در متلب ادامه خواهد داشت. همچنین اگر نمودار سه بعدی میخواهید ترسیم نمایید که در فهرست ارائه شده در مطالب ما نبود لطفا برای ما در قسمت نظرات بنویسید تا اصلاح شود.
این مقاله آموزشی به کوشش تیم تولید محتوای علمی و نرمافزاری گام98 در راستای ارتقای دانش شما در استفاده از نرمافزار متلب تولید شده است. درصورتی مفید بودن این مقاله آن را به دوستان و آشنایان خود معرفی نمایید.
مطالب زیر را حتما مطالعه کنید
کار با بردارها در متلب
آموزش کامل انواع دستورات توزیعهای آماری در متلب
در این مقاله قصد داریم انواع دستورات مهم توزیع های آماری در متلب را به همراه رسم انواع توزیعها و برازش با استفاده از توزیع های آماری بیان نماییم.
آموزش صفر تا 100 تحلیل المان میله به روش اجزا محدود
در ادامه دومین سری از آموزشهای روش المان محدود در این مقاله تحلیل المان میله به روش اجزا محدود را همراه با مثال به طور صفر تا صدی آموزش خواهیم داد.
آموزش جامع و کامل تحلیل المان فنر به روش اجزا محدود
در اولین مجموعه از مقالات آموزشی روش اجزا محدود، آموزش جامع و کامل تحلیل المان فنر به روش المان محدود را همراه با مثال برای شما عزیزان بیان خواهیم کرد.
روش اجزا محدود – Finite Element Method
روش اجزا محدود یک روش عددی برای حل مسائل مهندسی و فیزیکی میباشد. در این مقاله به طورکلی با کاربرد، تاریخچه و مراحل حل این روش آشنا خواهیم شد.
آموزش جامع انواع دستورات توزیع نرمال در متلب
در این مقاله انواع دستورات توزیع نرمال در متلب را به شما آموزش میدهیم.همچنین نحوه کار با توزیع های نرمال تک متغیره و چند متغیره را با جزئیات خواهید آموخت.
دیدگاهتان را بنویسید