مستر کد
mrcode.wikibix.ir

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

نویسنده : محمد پارسایی | زمان انتشار : 19 دی 1400 ساعت 16:17

جهت انجام پروژه های دانشجویی و یا تمرین‌های برنامه نویسی رشته کامپیوتر میتوانید به آی دی تلگرام زیر پیام دهید

@AlirezaSepand



در این مطلب قصد داریم رسم نمودار ماتریس در متلب را آموزش دهیم. به این منظور ابتدا روش‌های تولید و ساخت یک بردار و ماتریس را توضیح می‌دهیم و سپس از دستورهای مختلف برای رسم نمودار ماتریس در متلب استفاده خواهیم کرد.

ساخت بردارهای عددی منظم در متلب

در حل معادلات به صورت عددی غالباً از بردارهای عددی منظم استفاده می‌کنیم. برای تولید این بردارها در متلب دو روش وجود دارد. روش اول استفاده از دستور دونقطه است که در آن بردار برابر با نقطه شروع: گام‌ حرکت: نقطه پایان است. برای مثال برای ساخت برداری با نقطه شروع صفر، گام حرکت 0/5 و نقطه پایان 5 به صورت زیر عمل می‌کنیم:

که با اجرای آن بردار $$x$$ از صفر تا 5 با گام‌های به طول 0/5 ایجاد می‌شود. اما اگر به جای اندازه و طول گام‌ها تعداد آرایه‌ها مهم باشد از دستور $$linspace$$ استفاده می‌کنیم. در این حالت نیز برای تعریف بردار به سه کمیت نیاز داریم که شامل نقطه شروع، نقطه پایان و تعداد آرایه‌ها است و داریم:

که با اجرای آن بردار $$y$$ در بازه 0 تا 10 به 11 آرایه تقسیم می‌شود. نکته قابل توجه این است که در روش linspace نقاط ابتدایی و انتهایی نیز جزو آرایه‌ها است، اما در روش دونقطه ممکن است نقطه انتهایی جزو آرایه‌های بردار نباشد. به همین دلیل اگر در مسئله‌ای که بررسی می‌کنید نقاط شروع و پایان مهم است بهتر است از دستور linspace استفاده کنید.

همچنین اگر در دستور linspace تعداد درایه‌ها را مشخص نکنیم و دستور را با دو ورودی مواجه کنیم، دستور به طور پیش‌ فرض 100 آرایه را برای بردار در نظر می‌گیرد و بازه را به 100 مولفه تقسیم می‌کند. این موضوع در دستور دو نقطه نیز صدق می‌کند، یعنی اگر گام حرکت را به متلب ندهیم و تنها نقاط ابتدایی و انتهایی را مشخص کنیم، متلب گام 1 را برای ساخت این بردار در نظر می‌گیرد.

روش دیگر برای ساخت یک بردار استفاده از دستور logspace است که شامل نقطه شروع، نقطه پایان و تعداد آرایه‌ها است و به صورت زیر بیان می‌شود:

در واقع متلب بین اعداد $$10^{1}$$ و $$10^{3}$$ پنج درایه لگاریتمی تولید می‌کند. در این دستور نیز اگر تعداد درایه‌ها را مشخص نکنیم به صورت پیش‌ فرض 50 درایه در دستور به کار گرفته می‌شود.

تصویر 1: رسم نمودار ماتریس در متلب و دستورهای ایجاد بردار منظم در متلب

برای آشنایی بیشتر با برنامه‌نویسی در متلب، می‌توانید فیلم آموزش برنامه نویسی متلب برای علوم و مهندسی را مشاهده کنید که توسط فرادرس ارائه شده، لینک این آموزش در ادامه آورده شده است.

ساخت ماتریس در متلب

در نرم افزار متلب دستورهایی برای ساخت ماتریس به صورت منظم وجود دارد. اولین دستور ساخت ماتریس دستوری است که به ما کمک می‌کند که ماتریسی با درایه‌های صفر بسازیم و در این صورت داریم:

ماتریس ساخته شده 3 سطر و 4 ستون دارد و مقدار تمام آرایه‌های آن صفر است. این دستور برای ساخت یک ماتریس مربعی 3 در 3 به صورت $$a=zeros(3,3)$$ در می‌آید. در دستور zeros اگر ورودی دوم را به دستور ندهیم به صورت پیش فرض یک ماتریس مربعی با آرایه‌های صفر و m سطر و ستون ساخته می‌شود. حال می‌توانیم به راحتی به ماتریس مقداردهی کنیم. این کار کمک می‌کند که متلب بداند ماتریس A چه حجمی از فضا را اشغال می‌کند و سپس به آرایه‌ها مقداردهی می‌کنیم. با استفاده از دستور $$A(m,n)=k$$ به سطر m و ستون n در ماتریس A مقدار k را می‌دهیم.

تصویر 2: رسم نمودار ماتریس در متلب و ایجاد ماتریس در آن

برای تولید ماتریس با آرایه‌های یک از دستور ones استفاده می‌کنیم و داریم:

با اجرای هر یک از خطوط دستور بالا یک ماتریس 3 در 3 که تمام آرایه‌های آن یک است و یا یک ماتریس 3 در 4 که باز هم تمام آرایه‌های آن یک است تولید می‌شود.

دستور بعدی برای ایجاد ماتریس دستور eye است، این دستور یک ماتریس همانی تولید می‌کند. این دستور ماتریسی تولید می‌کند که آرایه‌های روی قطر اصلی آن 1 و بقیه درایه‌ها صفر است و به صورت زیر نوشته می‌شود:

با اجرای هر یک از خطوط کد بالا در اولی یک ماتریس همانی 5 در 5 و در دومی یک ماتریس همانی 2 در 3 ایجاد می‌شود.

تصویر 3: رسم نمودار ماتریس در متلب و ساخت ماتریس همانی

دستور بعدی برای تولید ماتریس دستور magic است که به نوعی یک ماتریس تصادفی است. این دستور با توجه به تعداد ورودی خروجی تولید می‌کند، مثلا در دستور $$m=magic(5)$$ یک ماتریس 5 در 5 تولید می‌شود که درایه‌های ماتریس بین 1 تا 25 هستند و مجموع اعداد هر سطر و ستون ماتریس یک عدد ثابت است. مثال زیر را در نظر بگیرید:

یک ماتریس 4 در 4 تولید می‌کند که مجموع آرایه‌های هر سطر و ستون آن برابر با عدد ثابت 34 است و به صورت زیر است:

$$\begin{matrix}16 & 2&3&13 \\ 5&11&10&8\\ 9&7&6&12 \\ 4&14&15&1 \end{matrix}$$

دستور magic تنها ماتریس مربعی تولید می‌کند.

همچنین می‌توان از دستورهای rand، randi، randn و randperm برای تولید ماتریس‌های تصادفی استفاده کرد. دستور rand به طور کلی اعداد تصادفی بین 0 تا 1 را می‌دهد. با استفاده از دستور $$r=rand(3,4)$$ یک ماتریس 3 در 4 در اختیار ما قرار می‌گیرد که مقدار درایه‌های این ماتریس بین 0 تا 1 است. با استفاده از دستور randi اعداد تصادفی در بازه مشخصی که ما می‌خواهیم در تعداد سطر و ستون یک ماتریس قرار می‌گیرد. حالت زیر را در نظر بگیرید:

دستور بالا یک ماتریس 2 در 5 می‌دهد که آرایه‌های آن بین 3 تا 4 به صورت تصادفی قرار می‌گیرند.

$$A=\begin{matrix}4 & 3&4&3&4 \\ 4&4&3&4&4 \end{matrix}$$

دستور بعدی دستوری است که با استفاده از می‌توانیم ماتریس تصادفی با توزیع نرمال داشته باشیم. بدین منظور از دستور randn استفاده می‌کنیم و داریم:

خروجی قسمت بالا یک ماتریس 3 در 4 با توزیع نرمال می‌دهد که اعداد با توزیع نرمال حول نقطه صفر تولید می‌شوند و هر چه از نقطه صفر به سمت اعداد مثبت یا منفی پیش برویم احتمال تولید عدد کاهش می‌یابد. دستور بعدی دستور randperm است که اعداد تصادفی غیرتکراری تولید می‌کند.

دستور بعدی برای ماتریس‌ها دستور diag است، با استفاده از این دستور می‌توانیم در ماتریس M مولفه‌های قطر اصلی را در خروجی مشاهده کنیم.

تصویر 4: رسم نمودار ماتریس در متلب و نمایش قطر اصلی ماتریس با دستور diag

همچنین اگر به دستور diag یک بردار بدهیم در خروجی یک ماتریس خواهیم داشت که مولفه‌های بردار روی قطر اصلی ماتریس قرار می‌گیرند.

تصویر 5: رسم نمودار ماتریس در متلب و استفاده از دستور diag برای نمایش ماتریس

در دستور diag با دادن ورودی‌های دیگر می‌توان از قطر اصلی جابه‌جا شد. برای مثال حالت زیر را در نظر بگیرید:

با اجرای مثال بالا خروجی یک ماتریس 5 در 5 است که بردار a یک قطر بالاتر از قطر اصلی قرار گرفته است. با قرار دادن اعداد منفی به عنوان ورودی در دستور diag به قطرهای پایین قطر اصلی اشاره می‌کنیم.

تصویر 6: رسم نمودار ماتریس در متلب و استفاده از دستور diag برای حرکت روی قطرها

به عنوان یک مثال از تولید ماتریس، می‌خواهیم یک ماتریس 5 در 5 تولید کنیم که آرایه‌های روی قطر اصلی 5 و با بالا و پایین رفتن از قطر اصلی یک واحد از آرایه‌ها کم شود، یعنی خروجی ماتریسی به این صورت باشد:

$$\begin{matrix}1 & 2&3&4&5 \\ 2&1&2&3&4\\ 3&2&1&2&3 \\ 4&3&2&1&2 \\ 5&4&3&2&1 \end{matrix}$$

بدین منظور در یک .m فایل ماتریس را به صورت زیر تعریف می‌کنیم:

clc;clear;clearall

a=ones(1,5);

b=2*ones(1,4);

c=3*ones(1,3);

d=4*ones(1,2);

e=5*ones(1,1);

M=diag(a)+diag(b,1)+diag(b,-1)+diag(c,2)...

    +diag(c,-2)+diag(d,3)+diag(d,-3)...

    +diag(e,4)+diag(e,-4)

با اجرای برنامه ماتریسی همانند ماتریس خواسته شده تولید می‌شود.

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

برای رسم یک ماتریس از یک مثال ساده شروع می‌کنیم. می‌خواهیم مقادیر ماتریس M را رسم کنیم. ماتریس M را یک ماتریس مجیک 5 در 5 در نظر می‌گیریم و داریم:

clear all

M=magic(5)

plot(M)

با اجرای این کد هر ستون توسط یک خط در نمودار نمایش داده می‌شود. برای مشخص کردن اینکه هر ستون چه رنگی داشته باشد، دستور plot را به صورت زیر می‌نویسیم:

clearall

M=magic(5)

figure;

holdon

plot(M(:,1),'b')

plot(M(:,2),'r')

plot(M(:,3),'k')

plot(M(:,4),'g')

plot(M(:,5),'m')

حالا مقادیر ستون اول به رنگ آبی، ستون دوم به رنگ قرمز، ستون سوم به رنگ مشکی، ستون چهارم به رنگ سبز و ستون آخر به رنگ بنفش نمایش داده می‌شوند.

تصویر 7: رسم نمودار ماتریس در متلب با استفاده از دستور plot

همچنین می‌توان مقادیر را برای هر سطر نیز به صورت زیر رسم کرد:

clearall

M=magic(5)

figure;

holdon

plot(M(1,:),'b')

plot(M(2,:),'r')

plot(M(3,:),'k')

plot(M(4,:),'g')

plot(M(5,:),'m')

و نتایج به صورت زیر در نمودار نمایش داده می‌شوند:

تصویر 8: رسم نمودار ماتریس در متلب با استفاده از دستور plot

روش دیگر رسم یک ماتریس از طریق دستور plot برای یک ماتریس n در 2 است. اگر بخواهیم هر سطر ماتریس به عنوان یک نقطه در نمودار نمایش داده شود به صورت زیر عمل می‌کنیم:

X=[1,2;3,4;6,8;11,5;3,6]

plot(X(:,1),X(:,2),'.'),gridon

axis([012012])

names={'x1';'x2';'x3';'x4';'x5'};  

text(X(:,1),X(:,2),names)

با اجرای برنامه هر سطر ماتریس به عنوان یک نقطه در نمودار نمایش داده می‌شود:

تصویر 9: رسم نمودار ماتریس در متلب و مشخص کردن هر نقطه در نمودار با دستور plot

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

روش دیگر رسم یک ماتریس استفاده از دستور imagesc است. این دستور آرایه‌های یک ماتریس را با استفاده از نشانگر رنگی نمایش می‌دهد. برای شروع استفاده از این دستور ماتریس C به صورت زیر در نظر می‌گیریم:

$$C=\begin{matrix}0&2&4&6 \\ 8&10&12&14\\ 16&18&20&22 \\ \end{matrix}$$

با استفاده از دستور imagesc و colorbar داریم:

C=[0246;8101214;16182022];

imagesc(C)

colorbar

و با اجرای برنامه مقادیر ماتریس C به صورت زیر نمایش داده می‌شوند:

تصویر 10: رسم نمودار ماتریس در متلب با استفاده از دستور imagesc

در حقیقت این دستور داده‌های آرایه C را به صورت تصویری نشان می‌دهد که از طیف کامل رنگ در نقشه رنگ استفاده می‌کند. هر عنصر C رنگ را برای یک پیکسل از تصویر مشخص می‌کند. تصویر حاصل یک شبکه پیکسل $$m\times n$$ است که در آن m شماره ردیف و n شماره ستون ماتریس C است. شماره شاخص‌های ردیف و ستون آرایه‌های ماتریس در مراکز پیکسل‌های هر بلوک رنگی مشخص می‌شوند. نقشه رنگ در کنار نمودار مقدار آرایه را بر حسب رنگ مشخص می‌کند.

در حالت دیگر و با استفاده از دستور imagesc می‌خواهیم مقدار هر آرایه در نمودار نمایان شود. به همین منظور برای ماتریس تصادفی A به صورت زیر عمل می‌کنیم:

m=8;

n=6;

A=randi(5,[mn]);

imagesc(A);

forii=1:n

    forjj=1:m

        text(ii,jj,num2str(A(jj,ii)),'FontSize',18);

    end

end

با اجرای برنامه بالا، نتیجه به صورت زیر نمایان می‌شود و مقدار هر آرایه در نمودار نمایش داده خواهد شد:

تصویر 11: رسم نمودار ماتریس در متلب با استفاده از دستور imagesc

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

روش دیگر رسم نمودار از ماتریس استفاده از دستور plot3 است. فرض کنید یک ماتریس 100 در 3 دارید که با دستور randi آن را تولید کرده‌اید. با استفاده از دستور plot3 می‌توانید هر ستون از ماتریس را در یک راستای مختصاتی نمایش دهید:

M=rand(100,3);

plot3(M(:,1),M(:,2),M(:,3),'.r')

بدین ترتیب مقادیر ستون اول ماتریس M در راستای x، مقادیر ستون دوم در راستای y و مقادیر ستون سوم در راستای z نمایش داده می‌شوند.

تصویر 12: رسم نمودار ماتریس در متلب با استفاده از دستور plot3

در حالت سه‌بعدی نیز می‌توان به راحتی نام هر نقطه را در کنار آن مشخص کرد و داریم:

X=[1,2,5;3,4,7;6,8,9;11,5,1;3,6,4]

plot3(X(:,1),X(:,2),X(:,3),'.r'),gridon

axis([012012012])

names={'x1';'x2';'x3';'x4';'x5'};  

text(X(:,1),X(:,2),X(:,3),names)

با اجرای دستورات بالا نتیجه به صورت زیر نمایش داده می‌شود:

تصویر 13: رسم نمودار ماتریس در متلب با استفاده از دستور plot3 و مشخص کردن هر نقطه در نمودار

رسم نمودار ماتریس با استفاده از دستور plotmatrix

دستور plotmatrix یک ماتریس از زیر محورها را ایجاد می‌کند که شامل نمودارهای پراکندگی ستون‌های X در برابر ستون‌های Y است. اگر X یک ماتریس p در n و Y نیز یک ماتریس p در m باشد دستور plotmatrix برای X و Y تعداد m در n نمودار پراکندگی ایجاد می‌کند.

نمودارهای پراکندگی برای ترسیم نقاط داده در یک محور افقی و عمودی استفاده می‌شوند تا نشان دهند که یک متغیر چگونه تحت تأثیر متغیر دیگر است. به این ترتیب ماتریس X و Y را به صورت زیر تولید می‌کنیم و از دستور plotmatrix برای نشان دادن مقادیر X برحسب Y استفاده می‌کنیم:

X=rand(50,3);

Y=reshape(1:150,50,3);

plotmatrix(X,Y)

پس از اجرای برنامه نتایج به صورت زیر نمایش داده می‌شوند:

تصویر 14: رسم نمودار ماتریس در متلب با استفاده از دستور plotmatrix

در نتایج بالا می‌توان تغییرات سطر اول ماتریس X را برحسب ستون اول ماتریس Y، تغییرات سطر دوم ماتریس X را برحسب ستون اول ماتریس Y، تغییرات سطر سوم ماتریس X را برحسب ستون اول ماتریس Y و … مشاهده کرد و همانطور که می‌بینید 9 نمودار پراکندگی بدین ترتیب رسم شده‌اند.

حالت دیگر دستور plotmatrix به صورت زیر و برای یک ماتریس تصادفی X است:

X=rand(50,3);

plotmatrix(X)

با اجرای کد نتایج به صورت زیر نمایش داده می‌شوند:

تصویر 15: رسم نمودار ماتریس در متلب با استفاده از دستور plotmatrix

هر بلوک از نمودارهای ایجاد شده مقادیر در ردیف $$i_{th}$$ برحسب ستون $$j_{th}$$ ماتریس X است. همچنین در امتداد قطر ماتریس نیز نمودارهای هیستوگرام هر ستون X قرار دارد.

رسم نمودار ماتریس در متلب با استفاده از دستور stem3

از این روش بیشتر برای رسم داده‌ها استفاده می‌شود. فرض کنید داده‌های شما به صورت یک ماتریس n در 3 باشند که به ترتیب هر ستون را x، y و z می‌نامیم. این مقادیر را در جدول زیر نمایش داده‌ایم:

تصویر 16: جدول داده‌ها برای استفاده در متلب

می‌توان با تغییرات در ساختار داده‌هایی که به صورت برداری هستند از روش‌های مختلف رسم نمودار مانند surf، countur و stem3 برای نمایش داده ها بر حسب یکدیگر استفاده کرد.

برای داده‌هایی که در بالا نمایش داده شده از مقادیر (X، Y) برای تعریف مختصات در صفحه x-y که مقدار Z نیز در آن وجود دارد استفاده می‌کنیم. دستورهای reshape و transpose می‌توانند داده‌ها را به گونه‌ای تغییر دهند که سه تایی (X,Y,Z) یک شبکه ایجاد کنند و در نتیجه داریم:

X=reshape(data(:,1),5,5)'

Y=reshape(data(:,2),5,5)'

Z=reshape(data(:,3),5,5)'

stem3(X,Y,Z,'MarkerFaceColor','g')

فایل data شامل داده‌های اولیه و بدون اعمال تغییرات است. بدین ترتیب با اجرای این برنامه می‌توان نتیجه را به صورت زیر مشاهده کرد:

تصویر 17: رسم نمودار ماتریس در متلب با استفاده از دستور stem3

معرفی فیلم آموزش برنامه نویسی متلب برای علوم و مهندسی

مجموعه فرادرس در تولید و تهیه محتوای آموزشی خود اقدام به تهیه فیلم  آموزش برنامه نویسی متلب برای علوم و مهندسی کرده است. این مجموعه آموزشی از هشت درس تشکیل شده و برای دانشجویان رشته علوم پایه و فنی مهندسی مفید است. پیش‌نیاز این درس آموزش برنامه نویسی متلب (MATLAB) است.

درس اول این مجموعه به حل معادلات جبری و ریشه‌یابی در متلب اختصاص دارد. درس دوم شامل اعداد تصادفی، محاسبات و تحلیل آماری در متلب است. درس سوم به انتگرال گیری و مشتق گیری عددی در متلب می‌پردازد و درس چهارم به محاسبات نمادین در متلب اختصاص دارد. در درس پنجم در مورد جبرخطی در متلب خواهید آموخت و در درس ششم درون یابی، تقریب تابع و برازش منحنی و سطح در متلب بررسی می‌شود. در نهایت در درس هفتم بهینه سازی کلاسیک در متلب آموزش داده می‌شود و درس هشتم به حل انواع مختلف معادلات دیفرانسیل (Differential Equations) در متلب اختصاص دارد.

جمع‌بندی

در این مطلب به معرفی و بررسی ویژگی‌های متلب برای رسم نمودار ماتریس در متلب استفاده کردیم. همان طور که می‌دانید متلب دستورهای زیادی برای رسم نمودار دارد و این ویژگی‌ها شامل ماتریس‌ها نیز می‌شود به همین دلیل در این مطلب ابتدا به تعریف یک ماتریس و روش‌های مختلف ساخت یک ماتریس در متلب پرداختیم، با این حال برای مطالعه بیشتر در زمینه ماتریس و محاسبات مربوط به ماتریس این مطلب را نیز می‌توانید مطالعه کنید. سپس از روش‌های مختلف شامل plot، plot3، imagesc، plotmatrix و stem3 برای رسم یک ماتریس استفاده کردیم.

اگر این مطلب برای شما مفید بوده است، آموزش‌ها و مطالب زیر نیز به شما پیشنهاد می‌شوند:

سارا داستان (+)

«سارا داستان»، دکتری فیزیک نظری از دانشگاه گیلان دارد. او به فیزیک بسیار علاقه‌مند است و در زمینه‌ متون فیزیک در مجله فرادرس می‌نویسد.

بر اساس رای 10 نفر

آیا این مطلب برای شما مفید بود؟


منبع: blog.faradars.org