مستر کد
mrcode.wikibix.ir

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

نویسنده : نازنین رحمانی | زمان انتشار : 09 اسفند 1399 ساعت 18:01

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

@AlirezaSepand



رسم نمودار دو بعدی در متلب برای اکثر شاخه‌های علوم مهندسی و علوم محض از اهمیت‌ ویژه‌ای برخوردار است. با استفاده از نمودارهای دو بعدی، می‌توان تاثیرات متغیرهای مستقل را روی توابع به شکل گرافیکی بررسی و تحلیل کرد. در این مقاله می‌خواهیم به بررسی ترسیم انواع نمودارهای دو بعدی در نرم‌افزار متلب بپردازیم. در ابتدا انواع روش‌های رسم نمودارهای دو بعدی را بیان می‌کنیم و سپس نحوه زیباسازی و تنظیمات نمودارها را شرح می‌دهیم.

محتوای این مطلب جهت یادگیری بهتر و سریع‌تر آن، در انتهای متن به صورت ویدیویی نیز ارائه شده است.

برای مشاهده ویدیوها کلیک کنید.

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

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

$$ ezplot(String,[min,max]) $$

ورودی اول در این دستور، فرمول تابع مورد نظر است که به صورت یک رشته وارد می‌شود. برای مثال، اگر تابع به فرم $$ y=sin(x)+\frac{sin(3x)}{3}+\frac{sin(5x)}{5} $$ باشد، آنگاه مقدار String به شکل $$’y=sin(x)+\frac{sin(3*x)}{3}+\frac{sin(5*x)}{5}’$$ وارد می‌شود. ورودی دوم، بازه نمایش نمودار تابع است که مقدار حداقل و حداکثر آن را وارد می‌کنیم. برای مثال برنامه زیر نمودار این تابع را در دو دوره تناوب آن رسم می‌کند.

clc;

clear;

closeall;

%%

figure(1);

ezplot('sin(x)+sin(3*x)/3+sin(5*x)/5',[04*pi]);%#ok

نمودار به شکل زیر رسم می‌شود:

نمودار تابع $$ y=sin(x)+\frac{sin(3x)}{3}+\frac{sin(5x)}{5} $$

از این دستور می‌توان برای رسم توابع پارامتری نیز استفاده کرد. در این شرایط نحوه استفاده از دستور ezplot به شکل زیر است:

$$ ezplot(x,y,[t_{min},t_{max}]) $$

ورودی‌های $$ x $$‌ و $$ y $$، مانند حالت قبل به صورت رشته‌ای و بر حسب پارامتر  $$ t $$ وارد می‌شوند. ورودی سوم نیز محدوده متغیر مستقل $$ t $$ را مشخص می‌کند. برای مثال، فرض کنید بخواهیم نمودار منحنی توصیف‌شده با معادلات $$ x(t)=tsin(t) , y(t) = \frac{t}{2}+cos(2t)^{2} $$ را در بازه  $$ t\in[0,12\pi] $$‌ رسم کنیم. برنامه زیر این کار را انجام می‌دهد:

clc;

clear;

closeall;

%%

figure(1);

ezplot('t*sin(t)','t/2+cos(2*t)^2',[012*pi]);%#ok

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

نمودار تابع پارامتری $$ x(t)=tsin(t) , y(t) = \frac{t}{2}-cos(2t)^{2} $$

علاوه بر رسم نمودار توابع صریح و پارامتری، می‌توان نمودار توابع ضمنی را نیز توسط دستور ezplot‌ رسم کرد. در این حالت فرمت وارد کردن اطلاعات به صورت زیر است:

$$ ezplot(f,[x_{min},x_{max},y_{min},y_{max}]) $$

ورودی $$ f $$ یک رشته است که تابع را به فرم ضمنی بیان می‌کند. به عنوان مثال، می‌خواهیم نمودار تابع ضمنی $$ ysin(x) + xcos(y)-1=0 $$ را رسم کنیم. بازه تعریف متغیرها را 5- تا 5+ درنظر می‌گیریم. برنامه زیر رسم تابع ضمنی را انجام می‌دهد:

clc;

clear;

closeall;

%%

figure(1);

ezplot('y*sin(x) + x*cos(y) - 1',[-55-55]);%#ok

در نهایت نمودار به شکل زیر رسم خواهد شد.

نمودار تابع ضمنی $$ ysin(x) + xcos(y)-1=0 $$

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

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

$$ fplot(func , [x_{min},x_{max}]) $$

ورودی دوم دستور fplot، بازه تغییرات متغیر مستقل است. دقت کنید اگر این ورودی به دستور داده نشود، برنامه به صورت پیش فرض بازه 5- تا 5+  را در نظر می‌گیرد. برای مثال برنامه زیر، تابع $$ y=sin(x)+\frac{sin(3x)}{3}+\frac{sin(5x)}{5} $$ را توسط این دستور رسم می‌کند. دقت کنید که ابتدا متغیر $$ x $$ به صورت سیمبولیک تعریف و سپس تابع مورد نظر بر حسب آن نوشته می‌شود.

clc;

clear;

closeall;

%%

figure(1);

symsx

f=sin(x)+sin(3*x)/3+sin(5*x)/5;

fplot(f,[0,4*pi])

با اجرای برنامه بالا رسم نمودار دو بعدی در متلب به صورت زیر انجام می‌پذیرد.

نمودار تابع $$ y=sin(x)+\frac{sin(3x)}{3}+\frac{sin(5x)}{5} $$

بر اساس برنامه زیر تابع مورد نظر را می‌توان به شکل Function-Handle نیز وارد کرد. با اجرای این برنامه نیز رسم نمودار دو بعدی در متلب انجام می‌شود و شکل بالا مجددا ترسیم خواهد شد.

%%

figure(1);

f=@(x)sin(x)+sin(3*x)/3+sin(5*x)/5;

fplot(f,[0,4*pi])

با استفاده از دستور fplot می‌توان توابع پارامتریک را نیز رسم کرد. نحوه استفاده از دستور به صورت زیر است:

$$ fplot(x(t) , y(t) , [t_{min},t_{amx}]) $$

در ابتدا، متغیر $$ t $$ به فرم سیمبولیک تعریف می‌شود. سپس توابع $$ x $$ و $$ y $$ ‌بر حسب $$ t $$ نوشته می‌شوند. ورودی دوم دستور، بازه تغییرات متغیر مستقل $$ t $$ است. برنامه زیر نمودار منحنی توصیف‌ شده با معادلات $$ x(t)=tsin(t) , y(t) = t+cos(5t)^{2} $$ را در بازه  $$ t\in[0,12\pi] $$‌ رسم می‌کند.

clc;

clear;

closeall;

%%

figure(1);

symst

x=t*sin(t);

y=t+cos(5*t)^2;

fplot(x,y,[0,12*pi])

نمودار به شکل زیر رسم می‌شود:

نمودار تابع پارامتریک $$ x(t)=tcos(t) , y(t) = t+cos(5t)^{2} $$

رسم نمودار دو بعدی ضمنی با دستور fimplicit

با استفاده از دستور «fimplicit»، توابع ضمنی به شکل $$ f(x,y)=0 $$ را می‌توان رسم کرد. نحوه استفاده از این دستور به شکل زیر است:

$$ fimplicit(function , [x_{min} ,x_{max},y_{min},y_{max}]) $$

تابع را می‌توان هم به صورت Function-Handle‌ و هم به صورت سیمبولیک وارد کرد. فرض کنید بخواهیم نمودار تابع ضمنی $$ f(x,y)=x^{2}sin(x)+y^{2}cos(y)-1 = 0 $$ را رسم کنیم. برنامه زیر، به دو فرم مذکور تابع ضمنی را تعریف و رسم می‌کند.

clc;

clear;

closeall;

%%

figure(1);

Function=@(x,y)y^2*cos(y)+x^2*sin(x)-1;

fimplicit(Function,[-55-55]*4);

figure(2);

symsxy

Function=y^2*cos(y)+x^2*sin(x)-1;

fimplicit(Function,[-55-55]*4);

نمودار به شکل زیر رسم خواهد شد.

نمودار تابع ضمنی $$ f(x,y)=x^{2}sin(x)+y^{2}cos(y)-1 = 0 $$

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

دستور «plot‌»، رایج‌ترین دستور برای رسم نمودارهای دو بعدی است. فرض کنید داده‌های $$ x $$ و $$ y $$، ‌فقط در چند نقطه گسسته وجود داشته باشند. برای مثال، این داده‌ها می‌توانند به فرم زیر باشند:

$$ x = [1, 2, 3, 4, 5, 6, 7]\\
y = [0, 0.5, 5, 2, 5, 0.5, 0] $$

در این صورت، برای رسم $$ y $$ بر حسب $$ x $$ طبق دستور زیر پیش می‌رویم:

$$ plot(x , y) $$

ورودی اول این دستور داده محور افقی و ورودی دوم آن داده محور عمودی را مشخص می‌کند. برنامه زیر نمودار $$ y $$ بر حسب $$ x $$ را برای داده‌های بالا رسم می‌کند.

clc;

clear;

closeall;

%%

figure(1);

x=[1234567];

y=[00.55250.50];

plot(x  ,y);

با اجرای برنامه بالا، نمودار به صورت شکل زیر رسم خواهد شد.

نمودار $$ y $$ بر حسب $$ x $$

حال فرض کنید بخواهیم نمودار تابع $$ y=sin(x)+\frac{sin(3x)}{3}+\frac{sin(5x)}{5} $$ را با دستور plot‌ رسم کنیم. ابتدا باید بازه تعریف متغیر مستقل $$ x $$ را به تعداد زیادی بازه‌، با فاصله‌های برابر تقسیم‌بندی کرد. سپس مقدار تابع در هر زیربازه باید محاسبه شود. در این صورت، یک بردار $$ y $$ که هم‌بعد با $$ x$$ است به دست می‌آید. در نهایت با دستور fplot نمودار قابل‌ رسم است. برنامه زیر این کار را انجام خواهد داد.

clc;

clear;

closeall;

%%

figure(1);

x=0:0.01:4*pi;

y=sin(x)+sin(3*x)/3+sin(5*x)/5;

plot(x,y)

با اجرای این برنامه دقیقا همان نموداری که قبلا با دستور ezplot رسم شد، ترسیم خواهد شد. لازم به ذکر است که این دستور در حقیقت نقاط متوالی را با یک خط به همدیگر متصل می‌کند.

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

در تمام دستوراتی که برای رسم نمودارهای دو بعدی ارائه شد، تنظیمات زیادی برای زیباسازی نمودار وجود دارد. در برنامه متلب زیر، مهمترین این دستورات ذکر شده است. فرض کنید، بخواهیم نمودار تابع مثال قبل را زیباسازی کنیم.

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

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

clc;

clear;

closeall;

%%

x=0:0.1:4*pi;

y=sin(x)+sin(3*x)/3+sin(5*x)/5;

figure1=figure('Color',[011]);

%Createaxes

axes1=axes('Parent',figure1);

hold(axes1,'on');

%Createplot

plot(x,y,'DisplayName','Y -X','MarkerFaceColor',[100],...

    'MarkerEdgeColor',[100],...

    'Marker','*',...

    'LineWidth',2,...

    'Color',[001]);

%Createylabel

ylabel('Y (Meter)');

%Createxlabel

xlabel('X (Seconds)');

%Createtitle

title('FaraDars.Org');

xlim(axes1,[012.5663706143592]);

ylim(axes1,[-0.950.95]);

box(axes1,'on');

%Settheremainingaxesproperties

set(axes1,'Color',[0.9921568632125850.9176470637321470.796078443527222],...

    'FontSize',16,'XGrid','on','YGrid','on');

%Createlegend

legend1=legend(axes1,'show');

set(legend1,...

    'Position',[0.7958545284449280.8455219982309010.06515373269949620.0480132437995727]);

به صورت خلاصه، برنامه بالا را در ادامه توضیح می‌دهیم. خطوط 6 و 7 این برنامه، داده‌های رسم را تعیین می‌کنند. در خط 9، یک پنجره برای رسم نمودار ایجاد خواهد شد که رنگ پس‌زمینه آن‌ کرم است. در خط 18، نمودار همراه با یک سری تنظیمات رسم می‌شود. برای مثال مشخصه «DisplayName» لیبل نمودار را تعیین می‌کند. «Marker» باعث درج یک ستاره در هر نمونه متغیرهای نمودار می‌شود و «LineWidth» هم ضخامت نمودار را تنظیم می‌کند. در خطوط 26 ،30 و 34 عناوین محورهای افقی و عمودی و عنوان کل نمودار (متن بالای نمودار) درج می‌شوند. در نهایت، خطوط 36 و 37 محدوده نمایش محورهای افقی و عمودی را نشان می‌دهند.

با اجرای برنامه بالا، نمودار به صورت زیر رسم می‌شود. همان طور که مشاهده می‌کنید، نمودار از وضوح و خوانایی بیشتری برخوردار شده است. برای یادگیری بیشتر، تلاش کنید اعدادی و پارامترهای برنامه بالا را تغییر دهید و تاثیر آن‌ها را در شکل نمودار مشاهده کنید.

رسم چند نمودار بر روی هم

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

$$ plot(x_{1} , y_{1},x_{2} , y_{2},x_{3} , y_{3},…) $$

با اجرای این دستور، در یک پنجره نمودار $$ y_{1} $$‌ بر حسب  $$ x_{1} $$‌، نمودار $$ y_{۲} $$‌ بر حسب  $$ x_{۲} $$‌، نمودار $$ y_{۳} $$‌ بر حسب  $$ x_{۳} $$‌ و الی آخر بر روی یکدیگر رسم می‌شوند.

در حالت دوم، از دستور «hold on» استفاده می‌شود. توجه کنید که باید بعد از رسم نمودار اول، از این دستور استفاده کرد. در این صورت، نمودارهای بعدی، بر روی همین نمودار رسم خواهد شد. برای مثال، برنامه زیر توابع $$ y=sin(x),y=cos(x) $$‌ را در یک صفحه رسم می‌کند.

%%

x=0:0.1:4*pi;

y1=sin(x);

y2=cos(x);

plot(x,y1,'LineWidth',2);holdon

plot(x,y2,'LineWidth',2);

xlabel('x');

ylabel('y');

legend('y1','y2');

gridon

xlim([04*pi])

بعد از اجرای برنامه، نمودار زیر رسم می‌شود.

نمودار توابع سینوس و کسینوس بر روی یکدیگر

رسم نمودار در زیر پنجره‌های مختلف

گاهی لازم است چندین نمودار در یک پنجره (Figure)‌، اما نه بر روی همدیگر بلکه در زیرپنجره‌های متفاوت رسم شوند. برای این کار، با استفاده از دستور «subplot» پنجره موردنظر را به چندین زیرپنجره تقسیم‌بندی می‌کنیم. سپس در زیرپنجره‌های مختلف، نمودارهای مختلف را رسم می‌کنیم. برای مثال تابع زیر را درنظر بگیرید. این تابع در واقع سری فوریه موج مربعی است.

$$ y=\sum_{k=1}^N\frac{sin((2k-1)x)}{2k-1} $$

می‌خواهیم به ازای $$ N=1,2,3 $$، نمودار تابع را در زیرپنجره‌های مختلف رسم کنیم. برنامه زیر این کار را انجام خواهد داد.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

clc;

clear;

closeall;

%%

x=0:0.1:4*pi;

fori=1:3

    figure(1);

    subplot(3,1,i);

    y=0;

    fork=1:i

        y=y+sin((2*k-1)*x)/(2*k-1);

    end

    plot(x,y,'LineWidth',2)

    xlabel('x');

    ylabel('y');

    legend(['N = 'num2str(i)]);

    gridon

    xlim([04*pi])

end

با اجرای این برنامه نمودار زیر رسم خواهد شد.

رسم نمودار در چند زیر پنجره

دقت کنید که ورودی اول دستور subplot، تعداد ردیف‌ها، ورودی دوم تعداد ستون‌ها و ورودی‌ سوم آن شماره زیرپنجره‌ای را مشخص می‌کند که می‌خواهیم نمودار در آن رسم شود.

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

^^

فیلم‌ های آموزش رسم نمودار دو بعدی در متلب (+ دانلود فیلم آموزش رایگان)

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

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

فیلم آموزشی رسم نمودار دو بعدی ضمنی با fimplicit

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

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

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

فیلم آموزشی رسم نمودار در زیر پنجره‌های مختلف

مرضیه آقایی (+)

«مرضیه آقایی» دانش‌آموخته مهندسی برق است. فعالیت‌های کاری و پژوهشی او در زمینه کنترل پیش‌بین موتورهای الکتریکی بوده و در حال حاضر، آموزش‌های مهندسی برق مجله فرادرس را می‌نویسد.

بر اساس رای 22 نفر

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


منبع: blog.faradars.org