برنامه نویسی، مهندسی ۱۹۵۲۰ بازدید

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

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

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

رسم نمودار دو بعدی در متلب با دستور 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;
close all;
%%
figure(1);
ezplot('sin(x)+sin(3*x)/3+sin(5*x)/5' , [0 4*pi]) ; %#ok

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

نمودار تابع $$y=sin(x)+\frac{sin(3x)}{3}+\frac{sin(5x)}{5}$$
نمودار تابع $$ 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;
close all;
%%
figure(1);
ezplot('t*sin(t)' , 't/2+cos(2*t)^2', [0 12*pi]) ; %#ok

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

نمودار تابع پارامتری $$x(t)=tsin(t) , y(t) = \frac{t}{2}-cos(2t)^{2}$$
نمودار تابع پارامتری $$ 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;
close all;
%%
figure(1);
ezplot('y*sin(x) + x*cos(y) - 1', [-5 5 -5 5]) ; %#ok

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

نمودار تابع ضمنی $$ysin(x) + xcos(y)-1=0$$
نمودار تابع ضمنی $$ 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;
close all;
%%
figure(1);
syms x
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}$$
نمودار تابع $$ 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;
close all;
%%
figure(1);
syms t
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}$$
نمودار تابع پارامتریک $$ 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;
close all;
%%
figure(1);
Function = @(x,y) y^2*cos(y)+x^2*sin(x)-1 ;
fimplicit(Function, [-5 5 -5 5]*4);

figure(2);
syms x y
Function = y^2*cos(y)+x^2*sin(x)-1 ;
fimplicit(Function, [-5 5 -5 5]*4);

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

 نمودار تابع ضمنی $$f(x,y)=x^{2}sin(x)+y^{2}cos(y)-1 = 0$$
نمودار تابع ضمنی $$ 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;
close all;
%%
figure(1);
x = [1 2 3 4 5 6 7];
y = [0 0.5 5 2 5 0.5 0];
plot(x  , y) ;

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

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

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

clc;
clear;
close all;
%%
figure(1);
x = 0:0.01:4*pi ;
y = sin(x)+sin(3*x)/3+sin(5*x)/5 ;
plot(x , y)

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

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

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

clc;
clear;
close all;
%%
x = 0:0.1:4*pi ;
y = sin(x)+sin(3*x)/3+sin(5*x)/5 ;

figure1 = figure('Color',[0 1 1]);

% Create axes
axes1 = axes('Parent',figure1);
hold(axes1,'on');

% Create plot
plot(x,y,'DisplayName','Y -X','MarkerFaceColor',[1 0 0],...
    'MarkerEdgeColor',[1 0 0],...
    'Marker','*',...
    'LineWidth',2,...
    'Color',[0 0 1]);

% Create ylabel
ylabel('Y (Meter)');

% Create xlabel
xlabel('X (Seconds)');

% Create title
title('FaraDars.Org');

xlim(axes1,[0 12.5663706143592]);
ylim(axes1,[-0.95 0.95]);
box(axes1,'on');
% Set the remaining axes properties
set(axes1,'Color',[0.992156863212585 0.917647063732147 0.796078443527222],...
    'FontSize',16,'XGrid','on','YGrid','on');
% Create legend
legend1 = legend(axes1,'show');
set(legend1,...
    'Position',[0.795854528444928 0.845521998230901 0.0651537326994962 0.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); hold on
plot(x , y2 , 'LineWidth' , 2);
xlabel('x');
ylabel('y');
legend('y1' , 'y2');
grid on
xlim([0 4*pi])

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

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

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

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

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

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

clc;
clear;
close all;
%%
x = 0:0.1:4*pi ;
for i = 1:3
    figure(1);
    subplot(3 , 1 , i);
    y = 0 ;
    for k = 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)]);
    grid on
    xlim([0 4*pi])
end

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

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

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

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

^^

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

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

دانلود ویدیو

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

دانلود ویدیو

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

دانلود ویدیو

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

دانلود ویدیو

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

دانلود ویدیو

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

دانلود ویدیو

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

دانلود ویدیو
بر اساس رای ۲۶ نفر
آیا این مطلب برای شما مفید بود؟
شما قبلا رای داده‌اید!
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.

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

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

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد.

مشاهده بیشتر