رسم نمودار ماتریس در متلب | گام به گام و کاربردی

۲۴۵۶ بازدید
آخرین به‌روزرسانی: ۲۴ اردیبهشت ۱۴۰۲
زمان مطالعه: ۹ دقیقه
رسم نمودار ماتریس در متلب | گام به گام و کاربردی

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

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

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

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

1x=0:0.5:5

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

1y=linspace(0,10,11)

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

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

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

1z=logspace(1,3,5)

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

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

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

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

1A=zeros(3,4)
2            <div class="faradars-courses faradars-courses-single">
3                <a href="https://faradars.org/courses/mvrma92021-matlab-programming?utm_source=blog.faradars&utm_medium=referral-post&utm_campaign=related-courses-inline-5&utm_term=s.dastan&utm_content=programming_mathematics_fundamental-science_practical" target="_blank">
4                    <div class="card card-course">
5                        <div class="card-image">
6                            <img class="pop-img" src="https://faradars.org/wp-content/uploads/2014/03/mvrma92021-svg.svg" alt="آموزش برنامه نویسی متلب MATLAB">
7                        </div>
8                        <div class="card-body">
9                            <div class="card-title">
10                                فیلم آموزش برنامه نویسی متلب MATLAB در فرادرس
11                            </div>
12                        </div>
13                        <div class="card-action ml-3">
14                            <div class="fdb-btn">کلیک کنید</div>
15                        </div>
16                    </div>
17                </a>
18            </div>
19        

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

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

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

1B=ones(3)
2B=ones(3,4)

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

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

1I1=eye(5)
2I2=eye(2,3)

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

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

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

1m=magic(4)

یک ماتریس 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 اعداد تصادفی در بازه مشخصی که ما می‌خواهیم در تعداد سطر و ستون یک ماتریس قرار می‌گیرد. حالت زیر را در نظر بگیرید:

1A=randi([3,4],2,5)

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

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

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

1n1=randn(3,4)

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

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

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

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

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

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

1a=[2,3,4,5];
2 M=diag(a,1)

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

استفاده از دستور 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 فایل ماتریس را به صورت زیر تعریف می‌کنیم:

1clc;clear; clear all
2a=ones(1,5);
3b=2*ones(1,4);
4c=3*ones(1,3);
5d=4*ones(1,2);
6e=5*ones(1,1);
7M=diag(a)+ diag(b,1)+ diag(b,-1)+ diag(c,2)...
8    + diag(c,-2)+ diag(d,3)+ diag(d,-3)...
9    + diag(e,4)+ diag(e,-4)

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

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

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

1clear all
2M=magic(5)
3plot(M)
4            <div class="faradars-courses faradars-courses-single">
5                <a href="https://faradars.org/courses/fvmth1052-linear-algebra-using-matlab?utm_source=blog.faradars&utm_medium=referral-post&utm_campaign=related-courses-inline-5&utm_term=s.dastan&utm_content=programming_mathematics_fundamental-science_practical" target="_blank">
6                    <div class="card card-course">
7                        <div class="card-image">
8                            <img class="pop-img" src="https://faradars.org/wp-content/uploads/2016/10/fvmth1052-svg.svg" alt="آموزش جبر خطی با متلب">
9                        </div>
10                        <div class="card-body">
11                            <div class="card-title">
12                                فیلم آموزش جبر خطی با متلب در فرادرس
13                            </div>
14                        </div>
15                        <div class="card-action ml-3">
16                            <div class="fdb-btn">کلیک کنید</div>
17                        </div>
18                    </div>
19                </a>
20            </div>
21        

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

1clear all
2M=magic(5)
3figure;
4hold on
5plot(M(:,1),'b')
6plot(M(:,2),'r')
7plot(M(:,3),'k')
8plot(M(:,4),'g')
9plot(M(:,5),'m')

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

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

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

1clear all
2M=magic(5)
3figure;
4hold on
5plot(M(1,:),'b')
6plot(M(2,:),'r')
7plot(M(3,:),'k')
8plot(M(4,:),'g')
9plot(M(5,:),'m')

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

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

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

1X=[1,2;3,4;6,8;11,5;3,6]
2plot(X(:,1),X(:,2),'.'),grid on
3axis([0 12 0 12])
4names = {'x1';'x2';'x3';'x4';'x5'};  
5text(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 داریم:

1C = [0 2 4 6; 8 10 12 14; 16 18 20 22];
2imagesc(C)
3colorbar

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

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

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

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

1m = 8;
2n = 6;
3A = randi(5,[m n]);
4imagesc(A);
5for ii = 1:n
6    for jj = 1:m
7        text(ii, jj, num2str(A(jj,ii)), 'FontSize', 18);
8    end
9end

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

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

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

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

1M=rand(100,3);
2plot3(M(:,1),M(:,2),M(:,3),'.r')

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

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

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

1X=[1,2,5;3,4,7;6,8,9;11,5,1;3,6,4]
2plot3(X(:,1),X(:,2),X(:,3),'.r'), grid on
3axis([0 12 0 12 0 12])
4names = {'x1';'x2';'x3';'x4';'x5'};  
5text(X(:,1),X(:,2),X(:,3),names)

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

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

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

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

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

1X=rand(50,3);
2Y=reshape(1:150,50,3);
3plotmatrix(X,Y)

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

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

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

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

1X=rand(50,3);
2plotmatrix(X)

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

رسم نمودار ماتریس در متلب با دستور plotmatrix
تصویر 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) یک شبکه ایجاد کنند و در نتیجه داریم:

1X=reshape(data(:,1),5,5)'
2Y=reshape(data(:,2),5,5)'
3Z=reshape(data(:,3),5,5)'
4stem3(X,Y,Z,'MarkerFaceColor','g')

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

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

جمع‌بندی

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

بر اساس رای ۱۳ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
مجله فرادرسMathWorksStackOverflow
نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *