- ۰ نظر
- ۱۲۷۲ نمایش
در اکثر زبانهای برنامه نویسی مفهومی به اسم متغیر سراسری و متغیر محلی وجود دارد.در مطلب برای تعریف نتغیر سراسری از دستور global استفاده می شود.استفاده از متغیرهای سراسری ساده ترین کار در هنگام کار با فضای حالت است اما همیشه ساده ترین راه قشنگ ترین راه نیست.
توابعی که در پست قبلی استفاده کردیم را با کمی تغیر دوباره مورد استفاده قرار می دهیم
function b=testcaller
testcurrent
m=67;
r=m+l
-------------
function testcurrent
assignin('caller','b',23)
assignin('base','t',33)
m=34;
evalin('base','b=t+2') % 1
evalin('caller','l=b+2') % 2
r= evalin('base','b+3')+evalin('caller','b+2')+m %3
دستور 1 متغیر b را برابر با جمع t و 2 قرار می دهد (این متغیرها در فضای base- فضای کار اصلی مطلب- قرار دارند)
دستور2 متغیر b را که در فضای کار تابع testcaller قرار دارد با 2 جمع کرده و در متغیر l قرار می دهد.
دستور 3 متغیر b که در base قرار دارد را با نتغیر b که در caller قرار دارد و متغیر محلی m را جمع کرده و در r قرار می دهد.
حال دستور h=testcaller را اجرا کنید بعد از پایان برنامه باید متغیرهای t,h,b در فضای baseوجود داشته باشند.
متلب قابلیت های گرافیکی بالایی دارد که امکانات فراوانی از جمله پردازش تصویر و طراحی و تحلیل گرافیکی را به سادگی در اختیارتان قرار می دهد. در برنامه ی امروز به صورت دستی و بدون استفاده از دستورات اختصاصی متلب انیمیشنی از یک توپ که در مسیر سینوسی حرکت می کند برنامه نویسی می کنیم.
برنامه از فرمان fill برای ترسیم توپی به رنگ قرمز استفاده می کند و با تنظیم محدوده ی رسم نمودار با کمک فرمان axis صحنه ی نمایش همیشه ثابت می ماند .
اما مسئله سرعت بالای ترسیم گرافیکی در متلب است که باعث می شود فیلم هنوز شروع نشده به پایان برسد و شما متوجه آنچه روی داده نشوید . برای غلبه بر این مشکل از فرمان pause استفاده شده است که به اندازه ی عددی که در داخل آن مشخص می کنید اجرای برنامه های متلب را متوقف می کند.
استفاده از فرمان pause در مواردی کاربرد دارد که شما می خواهید سرعت اجرای عملیاتی را در متلب کاهش دهید و تغییرات را با دقت بیشتری مورد بررسی قرار دهید.
متن برنامه :
clc;
clf;
% define a x,y
x=0:.1:2*pi;
y=sin(x);
for n=1:length(y)
%{
hold on
plot(x,y)
%}
% define ball shape
fill(x(n)+.1*cos(x),y(n)+.1*sin(x),'r')
axis([0 2*pi -pi pi])
% wait for 0.1 miliseconds
pause(0.1)
end
هرچه بیشتر روی امکانات گرافیکی متلب وقت بگذارید کار با آن جالبتر و هیجان آورتر می شود. امروز قرار است با کمک متلب محیط بسته بین دو نمودار را با رنگ خاصی پر کنیم.
فرض کنید قرار است محیط بسته ای که دو معادله ی زیر با هم می سازند با رنگ سبز (بدون منظور خاصی !) پر کنیم :
y=x+1
y=x^2
بسیاری از کاربران متلب خیلی ساده می دانند که برای پر کردن محیط بسته با رنگ خاص در متلب می توان از فرمان fill استفاده کرد اما روش درست استفاده از آن کمی پیچیده است
ابتدا دستور hold را فعال کرده و دو نمودار را رسم می کنیم :
hold on;
ezplot('x+1');
ezplot('x^2');
برای رسم دقیق قسمت پر کننده شما نیاز به دانستن محل تقاطع دو خط دارید و برای این کار هم لازم است معادله ی آن دو با هم حل شود :
s=solve('y=x+1','y=x^2');
شکل کلی فرمان fill به صور ت زیر است:
fill(X,Y,ColorSpec)
که در آن x و y مجموعه ی نقاطی هستند که یک محیط بسته ی دو بعدی را تشکیل می دهند و نیز رنگ زمینه را هم در قسمت آخر همانند دستور plot تعیین می کنید
باقی کار چندان مشکل نیست فقط شما نیاز دارید که x ها در بین دو نقطه ی تقاطع منحنی جای بگیرند و y ها هم از روی یکی از معادلات به طور دقیق محاسبه شوند، هر چه تعداد نقاط بیشتر باشد هاشور دقیقتر شکل می گیرد
f2=x^2;
x=linspace(subs(s.x(1)),subs(s.x(2)),3);
y2=subs(f2,x);
fill(x,y2,'g');
plot(x,y2,'r+')
axis([-2 2 -1 4])
برای درنظر گرفتن تعداد نقاط بیشتر می توانید در فرمان linspace بجای عدد 3 از 30 یا 40 استفاده کنید و ببینید تغییرات به چه صورت خواهد بود.
متن کامل برنامه به صورت زیر است :
clc;
clear;
clf;
hold on;
ezplot('x+1');
ezplot('x^2');
s=solve('y=x+1','y=x^2');
syms x;
f2=x^2;
x=linspace(subs(s.x(1)),subs(s.x(2)),3);
y2=subs(f2,x);
fill(x,y2,'g');
plot(x,y2,'r+')
axis([-2 2 -1 4])