گام در متلب
نویسنده : رضا قربانی | زمان انتشار : 09 اسفند 1399 ساعت 22:18
جهت انجام پروژه های دانشجویی و یا تمرینهای برنامه نویسی رشته کامپیوتر میتوانید به آی دی تلگرام زیر پیام دهید
@AlirezaSepand
متلب (MATLAB) یک محیط محاسباتی و زبان برنامهنویسی است که کاربردهای فراوانی در رشتههای مختلف علوم و مهندسی دارد. واژه MATLAB از دو واژه انگلیسی MATRIX به معنای ماتریس و LABORATORY به معنای آزمایشگاه تشکیل شده است، زیرا در آن مبنای محاسبات ماتریسها هستند. در این آموزش با برنامه نویسی متلب آشنا خواهیم شد.
محتوای این مطلب جهت یادگیری بهتر و سریعتر آن، در انتهای متن به صورت ویدیویی نیز ارائه شده است.
برای مشاهده ویدیوها کلیک کنید.
همانطور که میدانید، مهمترین نکته در برنامهنویسی، به هر زبانی، توانایی یادگیری و پیادهسازی الگوریتمها است. بنابراین، پیش از آنکه برنامهنویسی را آغاز کنید باید با مفاهیم و مقدمات الگوریتمها آشنایی داشته باشید.
در این آموزش، برنامهنویسی متلب را به صورت گام به گام بیان میکنیم؛ بدین ترتیب که ابزارها و دستورات اساسی برنامهنویسی در متلب را در قالب سادهترین مثالها ارائه خواهیم کرد. همانطور که گفتیم، این آموزشِ گام به گام مبتنی بر مثال است و برای یادگیری باید هر یک از برنامهها را در متلب نوشته و آن را اجرا کنید. محتوای این آموزش در هفت بخش ارائه میشود.
بخش اول شامل برنامههای سادهای است که برای آشنایی با برنامهنویسی در متلب ارائه شدهاند. در بخش دوم و سوم، شیوه نوشتن حلقهها و شروط در متلب بیان شده است. بخش چهارم به آرایهها و ماتریسها اختصاص دارد و در بخش پنجم نحوه رسم نمودار در متلب ارائه گردیده است. علاوه بر توابع از پیش تعریف شده متلب، کاربر نیز میتواند بسته به نیاز، توابع مورد نظر خود را تعریف کند. در بخش ششم، تعریف توابع توسط کاربر ارائه شده است. در نهایت، در بخش هفتم چگونگی استفاده از فایلها و دستورهای خارجی برای ورودی و خروجی بیان شده است.
توجه کنید که در ادامه، وقتی میگوییم برنامهای را بنویسید و یا اجرا نمایید، میتوانید یکی از این دو کار را انجام دهید:
- اگر قصد ذخیره برنامهها را ندارید، میتوانید کدها را در قسمت Command Window بنویسید و بعد از نوشتن هر خط از برنامه کلید Enter صفحه کلید را فشار دهید. بدین ترتیب، بعد از نوشتن آخرین خط و فشردن Enter برنامه اجرا میشود.
- اگر میخواهید برنامهها را برای استفادههای بعدی ذخیره کنید، روی New و پس از آن Script کلیک کنید تا Editor باز شود. میتوانید برنامه را در این Editor بنویسید و آن را نامگذاری (به صورت پیشفرض Untitled است) و ذخیره کنید. برای اجرای برنامه باید روی Run کلیک کنید. در این صورت نتیجه اجرای برنامه در Command Window نشان داده خواهد شد.
نکته دیگری که دانستن آن به شما کمک خواهد کرد این است که متلب توابع از پیش تعریف شده زیادی دارد. اگر با عملکرد تابعی آشنایی ندارید، کافی است در Command Window از یکی از دو دستور “help” یا “doc” استفاده کنید. بدین صورت که کلمه help یا doc را نوشته و بعد از یک فاصله نام تابع مورد نظرتان را بنویسید و کلید Enter را فشار دهید. با اجرای این دستورات، تفاوت help و doc را خواهید دید.
بخش اول: شروع برنامه نویسی متلب
این بخش شامل چند برنامه ساده برای آشنایی با برنامهنویسی در متلب است.
۱. نوشتن اولین برنامه
برنامه زیر را بنویسید و آن را اجرا کنید.
خروجی این برنامه ۸ خواهد بود.
توجه کنید که نقطه ویرگول (;) در انتهای هر دستور برای جلوگیری از نمایش بصری خروجی به کار میرود. به عبارت دیگر، با گذاشتن نقطه ویرگول در انتهای هر دستور، آن خط از برنامه اصطلاحاً در حالت سکوت قرار میگیرد و در خروجی نمایش داده نمیشود. البته عملیات مورد نظر به صورت کامل انجام میشود. برای کد بالا به سادگی میتوانید نقطه ویرگول بگذارید و نتیجه را ببینید.
۲. مفهوم a = b چیست؟
در متلب و هر زبان برنامهنویسی دیگر، عبارت «a = b» به معنای «a مساوی با b است» نیست. در واقع، این عبارت محتوای b را در a قرار میدهد. برای تحقیق این مورد، برنامه زیر را بنویسید و نتیجه را ببینید.
احتمالاً همانطور که دیدهاید، نتیجه ۳ خواهد بود.
در واقع باید «متغیرهای» a و b را به عنوان دو ظرف در نظر بگیرید که برچسبهای a و b دارند. در خط اول برنامه، عدد ۳ را در ظرف a قرار دادهایم و در خط بعدی محتوای ظرف a (همان ۳) را در طرف b ریختهایم. توجه کنید که در این صورت، محتوای a تغییری نمیکند. خط سوم نیز محتوای b را نمایش میدهد.
۳. عملگرهای اصلی ریاضی
برنامه زیر را اجرا کنید.
a=3; b=9; c=2*a+b^2-a*b+b/a-10 |
میبینیم که خروجی ۵۳ است. سمت راست خط سوم برنامه شامل چهار عملگر اصلی ریاضی + (جمع)، – (تفریق)، * (ضرب) و / (تقسیم) است. همچنین نماد ^ به معنی «به توانِ» است؛ بنابراین، عبارت “b^2” یعنی b به توانِ ۲.
۴. مفهوم a=b (ادامه)
برنامه زیر را بنویسید و اجرا کنید.
خروجی این برنامه ۴ است. در خط اول، عدد ۳ به متغیر a تخصیص داده میشود. در خط دوم، ابتدا سمت راست (4=۱+۳) محاسبه شده و بعد از آن به متغیر a تخصیص داده میشود. یعنی عدد ۴ جایگزین ۳ میشود.
5. خروجی قالب بندی شده (Formatted Output)
برنامه زیر را بنویسید و اجرا کنید.
خروجی این کد به صورت زیر خواهد بود:
Hello
۶. خروجی قالب بندی شده
برنامه زیر را بنویسید و اجرا کنید.
a=3; b=a*a; c=a*a*a; d=sqrt(a); fprintf('%4u square equals %4u \r',a,b) fprintf('%4u cube equals %4u \r',a,c) fprintf('The square root of %2u is %6.4f \r',a,d) |
خروجی این کد به صورت زیر خواهد بود:
$$ \text{ 3 square equals 9 }$$
$$\text{3 cube equals 27}$$
$$\text{The square root of 3 is 1.7321}$$
دستور “fprintf” برای خروجی فرمت شده است. این خروجی در رشته اول درون این دستور در ‘…’ نوشته شده است. عبارت “4u%” (عدد صحیح ۴ رقمی) و “6.4f%” (عدد حقیقی که تا ۴ رقم اعداد نشان داده میشود) فرمت متغیرهای خروجی را نشان میدهند. دستور “sqrt” در خط چهارم برنامه تابعی است که از متغیر جذر میگیرد.
۷. آرایهها
برنامه زیر را در متلب بنویسید و آن را اجرا کنید.
a=[367]; b=[194]; c=a+b |
خروجی این برنامه به صورت زیر است:
4 15 11
هر دو متغیر a و b آرایههایی با سه عنصر یا درایه هستند. در خط سوم، عمل “a+b” درایهها یا عناصر متناظر را با یکدیگر جمع میکند.
۸. استخراج یک عنصر از آرایه
برنامه زیر را اجرا کنید.
a=[367]; b=[1945]; c=a(2)+b(4) |
خروجی این برنامه c = 11 است.
اگر b یک آرایه یک بعدی باشد، (b(n درایه nاُم این آرایه خواهد بود. از آنجایی (a(2 برابر با ۶ و (b(4 برابر با ۵ است، نتیجه خط سوم برنامه c=6+5 =11 خواهد بود.
برنامه زیر را بنویسید و اجرا کنید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | % %Thisprogramdemonstrateshowto"comment out" %asegmentofcode % A=3; B=A*A; % %B=2*B<---Thisstatementisnotexecuted % C=A+B |
خروجی این برنامه c=۱۲ است. همانطور که میبینیم، بخشهایی از برنامه که قبل از آنها علامت % قرار میگیرد، تأثیری در اجرای برنامه ندارد و برای نوشتن یادداشتها و نکات مربوط به کد از آن استفاده میشود.
۱۰. ادامه کد در خط بعد
برنامه زیر را اجرا و نتیجه را بررسی کنید.
summation1=1+3+5+7... +9+11 |
گاهی یک خط یک برنامه طولانی میشود و لازم است برای جلوگیری از بینظمی و درهمریختگی کد، بخشی از آن را به خط بعد منتقل کنیم. برای این کار از سه نقطه “…” بین دو بخش استفاده میکنیم. در حقیقت، کد بالا با کد زیر یکسان است:
summation1=1+3+5+7+9+11 |
۱۱. پاک کردن یک متغیر
برنامه زیر را بنویسید و آن را اجرا کنید.
c1=3; c2=c1+5; clearc1 c1 |
با اجرای این برنامه با پیغام زیر مواجه خواهید شد:
.’Undefined function or variable ‘c1
این خطا به این دلیل است که متغیر “c1” دیگر وجود ندارد. شما با دستور “clear” این متغیر از حافظه کامپیوترتان حذف کرهاید. توجه کنید که دستور “clear” فقط محتویات متغیر را حذف نمیکند، بلکه خود متغیر را کاملاً حذف میکند. گاهی پیش میآید که برنامهای مینویسید و در آن متغیری دارید که اندازه آن بزرگ است و حافظه را اشغال میکند. با استفاده از دستور “clear” میتوانید آن را حذف کنید. اگر دستور “clear” را بنویسید و بعد از آن نام چند متغیر را (با یک فاصله از هم) بنویسید، همه آن متغیرها حذف خواهند شد. برنامهای بنویسید و این مورد را بررسی کنید.
۱۲. توابع و ثوابت ریاضی
به سادگی میتوان توابع و ثوابت معروف ریاضی را در متلب نوشت. برای مثال، برنامه زیر را بنویسید.
x=pi; y=sin(pi/2) z=exp(-sin(pi/2)) |
خروجی اجرای این برنامه y=1 و z=0.3679 است. همانطور که میبینید، میتوانیم تابعِ تابع و بیشتر از آن را نیز بنویسیم. ابتدا داخلیترین تابع محاسبه میشود و به سمت خارجیترین تابع ادامه پیدا میکند. این مورد را برای برنامه بالا بررسی کنید.
۱۳. نامگذاری یک متغیر
متغیرهای متلب نسبت بین حروف بزرگ و کوچک تمایز قائل میشوند. برای مثال “FARADARS” و “faradars” دو متغیر متفاوت هستند. در نامگذاری متغیر میتوان از زیرین خط یا آندرلاین (_) و یا اعداد نیز به عنوان بخشی از نام نیز استفاده کرد. برای مثال، “FDS_125” یک نام متغیر قابل قبول است. برخی نامها مربوط به ثوابت خاصی هستند که در متلب تعریف شدهاند و مقدار ثابتی دارند. مثلاً “pi” برابر با …3.14159 است.
۱۴. رسم سریع یک نمودار
برنامه زیر را بنویسید و نتیجه اجرای آن را ببینید.
x=[0:0.1:20]; y=sin(x); plot(x,y) |
خروجی این برنامه شکل زیر است:
خط اول برنامه معادل با بردار [x=[0 0.1 0.2 0.3 … 19.8 19.9 20 است. به این ترتیب، این آرایه 101 عنصر دارد. به عبارت دیگر، “0:0.1:20” به این معنی است که این آرایه از عدد ۰ شروع شده و در هر گام به اندازه مجموع عدد قبلی و 0.1 یک عدد تولید میکند تا به انتهای بازه، یعنی ۲۰، برسد. خط دوم برنامه آرایه y را برحسب x محاسبه میکند:
[((y = [sin(x(1)) sin(x(2)) sin(x(3)) … sin(x(200)) sin(x(201
یا
[(y = [sin(0) sin(0.1) sin(0.2) … sin(19.9) sin(20
خط سوم نیز y را برحسب x رسم میکند.
بخش دوم: حلقهها
حلقهها بخش مهمی از برنامهنویسی را تشکیل میدهند. در این بخش با شیوه نوشتن حلقهها در متلب آشنا میشویم.
۱۵. حلقه با for
برنامه زیر را بنویسید و نتیجه را ببینید.
نتیجه به صورت زیر خواهد بود:
3
3
3
3
3
سه خط آخر برنامه بالا یک «حلقه for» را تشکیل میدهند. عبارت اصلی بین دو بخش “for k=1:5” و “end” قرار گرفته و وقتی متغیر k با گام ۱ از ۱ تا ۵ تغییر میکند، عدد مورد نظر ۵ بار تکرار میشود.
۱۶. حلقه for (استفاده از اندیس در محاسبات)
برنامه زیر را بنویسید و اجرا کنید.
خروجی این برنامه به صورت زیر است:
3
9
27
81
243
این خروجیها به صورت ۱^3، ۲^3، ۳^3، ۴^3 و ۵^3 محاسبه شدهاند. همانطور که میبینیم، در هر تکرار، مقدار k تغییر میکند و مقدار متناظر با هر تکرار برای محاسبه به کار میرود.
۱۷. حلقه for (تأثیر بیش از یک متغیر در عبارت)
برنامه زیر را اجرا کنید.
sum1=0; fork=1:9 sum1=sum1+k; end sum1 |
خروجی این برنامه 45 است. در واقع، این عدد به صورت 9+8+7+6+5+4+3+2+1 محاسبه شده است. سعی کنید این برنامه را با توجه به مواردی که در بالا یاد گرفتهاید تحلیل کنید.
۱۸. حلقه for (تأثیر بیش از یک متغیر در عبارت)
برنامه زیر را بنویسید و اجرا کنید.
fork=1:2:9 sum1=sum1+k; end sum1 |
خروجی این برنامه ۲۵ است که از مجموع 9+7+5+3+1 به دست آمده است. دستور “for k = 1:2:9” به این معنی است که فقط ۵ بار در حلقه حرکت میکنیم. ابتدا 1=k است. در تکرار بعدی 2+1=k خواهد بود و به همین ترتیب ادامه مییابد تا به ۹ برسد.
۱۹. کار با آرایه در حلقه
برنامه زیر را بنویسید.
b=[389475]; sum1=0; fork=1:4 sum1=sum1+b(k); end sum1 |
خروجی این کد ۲۴ است که به صورت زیر محاسبه شده است:
sum1 = b(1)+b(2)+b(3)+b(4) = 3+8+9+4 = 24
۲۰. کار با آرایه در حلقه
برنامه زیر را اجرا کنید.
b=[389475]; sum1=0; fork=1:2:5 sum1=sum1+b(k); end sum1 |
خروجی این برنامه عدد ۱۹ است و به صورت زیر محاسبه شده است:
sum1 = b(1)+b(3)+b(5) = 3+9+7 = 19
۲۱. حلقه دوگانه
برنامه زیر را اجرا کنید و با توجه به نکاتی که آموختهاید سعی کنید آن را تحلیل کنید.
sum1=0; forn=1:2 form=1:3 sum1=sum1+n*m; end end sum1 |
خروجی این برنامه ۱۸ است و به صورت زیر محاسبه میشود:
Sum1 = 1*1+1*2+1*3 +2*1+2*2+2*3 = 18
۲۲. حلقه دوگانه
برنامه زیر را بنویسید و اجرا کنید.
forn=1:2 form=1:3 fprintf('n = %3u m = %3u \r',n,m) end end |
خروجی این برنامه به صورت زیر است:
n = 1 m = 1
n = 1 m = 2
n = 1 m = 3
n = 2 m = 1
n = 2 m = 2
n = 2 m = 3
۲۳. استفاده پیچیدهتر از حلقه و اندیس
برنامه زیر را بنویسید و آن را تحلیل کنید.
b=[2574983]; c=[2357]; sum1=0; fork=1:4 sum1=sum1+b(c(k)); end sum1 |
خروجی این برنامه ۲۴ است و طبق رابطه زیر محاسبه میشود:
((sum1 = b(c(1))+b(c(2))+b(c(3))+b(c(4
(b(2)+b(3)+b(5)+b(7 =
5+7+9+3 =
24 =
بخش سوم: شاخهگزینی و شروط
در این بخش چگونگی تعریف شروط در برنامه را معرفی میکنیم.
۲۴. دستور if
برنامه زیر را اجرا کنید.
num1=7; if(num1>5) fprintf('%4u is greater than 5 \r',num1) else fprintf('%4u is less than or equal to 5 \r',num1) end |
خروجی این کد به صورت زیر نمایش داده میشود:
$$ \text {7 is greater than 5}$$
اگر در برنامه تغییر ایجاد کرده و عبارت “;num1=3” را جایگزین خط اول کنیم، خروجی به صورت زیر نمایش داده میشود:
$$ \text{3 is less than or equal to 5}$$
همانطور که متوجه شدهاید، در این برنامه، اگر num1 بزرگتر از ۵ باشد، عبارت “(fprintf(‘%4u is greater than 5 \r’, num1” اجرا میشود، و در غیر این صورت، کد “(fprintf(‘%4u is less than or equal to 5 \r’, num1” اجرا خواهد شد.
۲۵. دستور if – elseif – else
برنامه زیر را بنویسید و آن را اجرا کرده و نتیجه را تحلیل کنید.
num1=4; if(num1>=5) fprintf('%4i is greater than or equal to 5 \r',num1) elseif(num1>1) fprintf('%4i is less than 5 but greater than 1 \r',num1) elseif(num1==1) fprintf('%4i equals 1 \r',num1) elseif(num1>-3) fprintf('%4i is less than 1 but greater than -3 \r',num1) else fprintf('%4i is less than or equal to -3 \r',num1) end |
۲۶. مثال محاسبه سال کبیسه
در اینجا با استفاده از برنامهنویسی متلب یک مثال کاربردی را حل میکنیم. میخواهیم برنامهای بنویسیم که تعیین کند یک سال میلادی مشخص کبیسه است یا خیر. برنامه زیر را بررسی کنید. در تقویم میلادی نو سالهایی که بر ۴ بخشپذیر باشند (باقیماندهٔ تقسیم آن سال بر ۴ برابر ۰ باشد) کبیسه هستند، با این استثنا که از میان سالهایی که بر ۱۰۰ بخشپذیرند (سالهای انتهای سده)، تنها آنهایی که بر ۴۰۰ نیز بخشپذیرند کبیسه هستند.
nyear=1975; if(mod(nyear,400)==0) fprintf('%6u is a leap year',nyear) elseif(mod(nyear,4)==0)&(mod(nyear,100)~=0) fprintf('%6u is a leap year',nyear) else fprintf('%6u is not a leap year',nyear) end |
خروجی برنامه بالا به صورت زیر است:
$$ \text{1975 is not a leap year}$$
سعی کنید سالهای مختلف را در برنامه وارد کرده و نتایج را بررسی کنید.
در خط چهارم برنامه، “&” به معنی «وَ» است. بنابراین، هر دو شرط “(mod(nyaer,4) == 0)” و “(mod(nyear,100) ~= 0)” باید صحیح باشند تا دستور “(fprintf(‘%6u is a leap year’, nyear” اجرا شود. به طور مشابه، خط عمودی “|” نیز به معنی «یا» است.
همچنین، نمادهای “=~” در خط چهارم به معنی «برابر نیست با» است. از این دست شروط، شش مورد وجود دارد که در دستورات شرطی برای مقایسه دو عدد با هم مورد استفاده قرار میگیرند. این عبارتها به شرح زیر هستند:
A>B | A بزرگتر از B است. |
A<B | A کوچکتر از B است. |
A>=B | A بزرگتر یا مساوی B است. |
A<=B | A کوچکتر یا مساوی B است. |
A==B | A مساوی B است. |
A~=B | A با B برابر نیست. |
تابع “(mod(A,B” باقیمانده تقسیم A بر B را نتیجه میدهد. برای مثال، mod(7,2) = 1 ،mod(10,4) = 2 و mod(25,5) = 0 است. بنابراین، اگر A بر B بخشپذیر باشد، mod(A,B) = 0 است. این تابع در بسیاری از کاربردهای مربوط به روشهای عددی مفید است.
۲۷. ترکیب حلقه و شرط
برنامه زیر را در متلب بنویسید.
sum1=0; sum2=0; N=9 fork=1:N sum1=sum1+k; if(mod(k,3)==0) sum2=sum2+k; end end sum1 sum2 |
اگر این برنامه را اجرا کنید، خروجی به صورت زیر خواهد بود:
sum1 = 45
sum2 = 18
با تحلیل این برنامه خواهید دید که خروجیها به صورت زیر محاسبه شدهاند:
Sum1 = 1+2+3+4+5+6+7+8+9
sum2 = 3+6+9
۲۸. حلقه while
برنامه زیر را در متلب بنویسید و آن را اجرا کنید.
x=3; while(x<100) x=x*3; end x |
خروجی این برنامه x = 243 است. اگر به مفهوم while دقت کنیم، میبینیم که ترکیبی از یک حلقه for و یک if است. در برنامه بالا، تا زمانی که شرط داخل پرانتز (x<100) برقرار باشد، محاسبه در حلقه انجام خواهد شد. بنابراین، مقادیر ۳، ۹، ۲۷، ۸۱ و در نهایت ۲۴۳ برای x محاسبه میشود و چون ۲۴۳ بزرگتر از ۱۰۰ است و دیگر شرط برقرار نیست، محاسبات ادامه پیدا نمیکند.
بخش چهارم: آرایه و ماتریس
در این بخش، با نحوه کار کردن با ماتریسها و آرایهها آشنا میشویم.
۲۹. جمع دو آرایه
برنامه زیر، جمع دو آرایه را نشان میدهد.
a=[21225]; b=[374]; c=a+b |
خروجی این برنامه به صورت زیر است:
c = 5 19 29
۳۰. جمع دو ماتریس
دو ماتریس را به صورت زیر جمع کنید و نتیجه را ببینید.
a=[34;16]; b=[52;117]; c=a+b |
خروجی کد بالا به صورت زیر است:
c = 8 6
12 13
این برنامه، در حقیقت، عملیات زیر را انجام میدهد:
$$ \large \begin {align*}
a & = \begin{bmatrix}
3 & 4 \\
1 & 6
\end {bmatrix} , \,\,\,
b = \begin{bmatrix}
5 & 2 \\
11 & 7
\end {bmatrix} \\
c & = a + b =
\begin{bmatrix}
8 & 6 \\
12 & 13
\end {bmatrix}
\end {align*} $$
۳۱. ضرب یک عدد در آرایه یا ماتریس
برنامه زیر را بنویسید و خروجی آن را بررسی کنید.
خروجی این برنامه به صورت زیر است:
b = 6 10
2 8
۳۲. ضرب درایه به درایه دو آرایه یا دو ماتریس با ابعاد مشابه
برنامه زیر را بنویسید و آن را اجرا کنید.
a=[235]; b=[249]; c=a.*b |
خروجی این برنامه به صورت زیر است:
c = 4 12 45
نقطه (.) قبل از عملگر ریاضی “*” عملیات را به صورت درایه به درایه انجام میدهد. در این حالت، c به صورت زیر محاسبه خواهد شد:
[(c = [a(1)*b(1) a(2)*b(2) a(3)*b(3
۳۳. ضرب درایه به درایه دو ماتریس
برنامه زیر را در متلب اجرا کنید:
a=[23;14]; b=[51;72]; c=a.*b |
همانطور که انتظار دارید، خروجی این برنامه برابر است با:
c = 10 3
7 8
۳۴. ضرب مستقیم دو ماتریس (نه درایه به درایه)
برنامه زیر را در متلب بنویسید و به تفاوت آن با مثال قبل دقت کنید.
a=[23;14]; b=[51;72]; c=a*b |
خروجی برنامه به صورت زیر است:
c = 31 8
33 9
مشاهده میکنیم که خروجی این مثال با خروجی مثال قبل تفاوت دارد. در واقع، در این مثال، ضرب ماتریسی انجام شده است.
۳۵. توابع پایه با یک متغیر برداری
برنامه زیر را اجرا کنید.
خروجی این برنامه به صورت زیر است:
b = 0.9092 0.1411 -0.9589
همانطور که میبینیم، خروجی برای هر درایه ورودی محاسبه شده و محتوای b به صورت زیر است:
[(sin(2) sin(3) sin(5]
۳۶. مثالی دیگر از توابع پایه با یک متغیر برداری
برنامه زیر را بنویسید و اجرا کنید.
a=[235]; b=2*a.^2+3*a+4 |
خروجی برنامه برابر است با:
b = 18 31 69
این خروجی به صورت زیر محاسبه شده است:
[b = [2*(a(1))^2+3*a(1)+4 2*(a(2))^2+3*a(2)+4 2*(a(3))^2+3*a(3)+4
۳۷. تعیین محتوای یک آرایه
برای آنکه محتوا و داریههای یک آرایه را تعیین کنیم، میتوانیم مشابه مثال زیر عمل نماییم.
اگر برنامه بالا را اجرا کنید، خواهید دید که خروجی آن به صورت زیر خواهد بود:
a = 0 0.5 1 1.5 2 2.5 3 3.5 4
۳۸. استخراج داریه از ماتریس
برنامه زیر را بنویسید و اجرا کنید.
A=[35;24]; c=A(2,2)+A(1,2) |
خروجی این برنامه c=9 است. برای ماتریس A، دستورهای زیر درایه مورد نظر از آن را استخراج میکنند:
A(1,1) = 3, A(1,2) = 5, A(2,1) = 2, A(2,2) = 4
۳۹. مثالی از استفاده از اندیس برای یک ماتریس
برنامه زیر را بنویسید و سعی کنید با توجه به مطالبی که گفته شد، خط به خط آن را بررسی و تحلیل کنید.
A=[35;24]; norm1=0; form=1:2 forn=1:2 norm1=norm1+A(m,n)^2; end end norm1=sqrt(norm1) |
خروجی این برنامه به صورت زیر است:
norm1 = 7.348
این برنامه نُرم اقلیدسی یک ماتریس را محاسبه میکند.
۴۰. حل دستگاه معادلات خطی
برنامه زیر را اجرا کنید.
A=[412;031;012]; b=[17;19;13]; x=inv(A)*b |
نتیجه حاصل از این برنامه به صورت زیر است:
x = 1
5
4
این برنامه، معادله $$ [\mathbf{A}] \mathbf {x} = \mathbf{b}$$ را حل میکند و پاسخ آن برابر است با: $$ \mathbf{x} = [\mathbf{A}]^{-1} \mathbf {b}$$.
۴۱. حل دستگاه معادلات خطی
برنامه زیر را بنویسید و اجرا کنید:
A=[412;031;012]; b=[17;19;13]; x=A\b |
خروجی این برنامه مشابه مثال قبل است. در اینجا “A\b” معادل همان ” inv(A)*b” است.
بخش پنجم: رسم نمودار
روشهای رسم نمودار در این بخش ارائه شده است.
۴۲. یک مثال ساده از دستور plot
برنامه زیر را در متلب اجرا کنید:
a=[0:0.5:5]; b=2*a.^2+3*a-5; plot(a,b) |
نتیجه اجرای این برنامه شکل زیر خواهد بود:
در دستور “(plot(a,b” آرایه “a” باید شامل دادههای محوری باشد که میخواهیم نمودار را بر حسب آن رسم کنیم (متناظر با محور x). آرایه “b” نیز باید متناظر با مقادیر محور y باشد.
بعد از آنکه نمودار را رسم کردیم، میتوانیم با ابزارهای تعاملی متلب آن را اصلاح کنیم. برای مثال، میتوانیم برچسب (نام) محورهای x و y را به صورت دستی به نمودار اضافه کنیم. همچنین میتوانیم نمودار را =با فرمتهای مختلف (مانند tif ،jpg ،eps و..) ذخیره کنیم.
۴۳. تعیین مشخصات یک شکل: الگو، رنگ و ضخامت خط
برنامه زیر را اجرا و نتیجه را مشاهده کنید.
a=[0:0.5:5]; b=2*a.^2+3*a-5; plot(a,b,'-or','MarkerFaceColor','g','LineWidth',2) xlabel('X');ylabel('Y');legend('Test','Location','NorthWest') |
نتیجه اجرای برنامه بالا شکل زیر خواهد بود:
عبارت ‘or-‘ در دستور plot الگوی خط را تعیین کرده است. این عبارت منجر به خط ممتد با ترکیب نمادهای دایرهای شده است. رنگ این دایرهها سبز است. دلیل وجود این رنگ، نوشتن عبارت ‘g’ برای ‘MarkerFaceColor’ است. شرح یا همان legend نمودار نیز در گوشه بالایی سمت چپ قاب تصویر نوشته شده است. این کار با اختصاص ‘NorthWest’ برای ‘Location’ ایجاد شده است.
۴۴. رسم چند نمودار
برنامه زیر را بنویسید و آن را اجرا کنید.
a=[0:0.5:5]; b=2*a.^2+3*a-5; c=1.2*a.^2+4*a-3; holdon plot(a,b,'-or','MarkerFaceColor','g','LineWidth',2) plot(a,c,'--ok','MarkerFaceColor','c','LineWidth',2) xlabel('X');ylabel('Y');legend('Curve 1','Curve 2','Location','NorthWest') |
خروجی این برنامه، نمودار زیر است:
در برنامه بالا، اگر از دستور “hold on” استفاده نکنیم، دستور plot دوم در خط بعد، در قاب نمودار قبلی رسم میشود و نمودار قبلی را حذف میکند.
۴۵. رسم نمادها
دستورات زیر را بنویسید و آن را اجرا کنید.
=[0:0.5:5]; b=2*a.^2+3*a-5; c=1.2*a.^2+4*a-3; holdon plot(a,b,'or','MarkerFaceColor','g','LineWidth',2) plot(a,c,'ok','MarkerFaceColor','c','LineWidth',2) xlabel('X');ylabel('Y');legend('Curve 1','Curve 2','Location','NorthWest') |
خروجی این برنامه شکل زیر است:
۴۶. رسم چند قاب نمودار در یک تصویر
برنامه زیر را در متلب بنویسید و آن را اجرا کنید.
a=[0:0.5:5]; b=2*a.^2+3*a-5; c=1.2*a.^2+4*a-3; subplot(1,2,1) plot(a,b,'-or','MarkerFaceColor','g','LineWidth',2) xlabel('X');ylabel('Y');legend('Curve ','Location','NorthWest') subplot(1,2,2) plot(a,c,'--ok','MarkerFaceColor','c','LineWidth',2) xlabel('X');ylabel('Y');legend('Curve 2','Location','NorthWest') |
شکل حاصل از اجرای این برنامه به صورت زیر خواهد بود:
بخش ششم: تابع تعریف شده توسط کاربر
در این بخش، روشهای تعریف توابعی را که میتوانید برحسب نیازتان تعریف کنید و در توابع متلب وجود ندارند معرفی میکنیم.
۴۷. چگونه یک تابع را تشکیل دهیم و از آن استفاده کنیم؟
ابتدا، یک برنامه متلب (New Script) را باز میکنیم. برای مثال، نام آن را myfunc1 قرار میدهیم و آن را با پسوند myfunc1.m ذخیره میکنیم. فرض کنید میخواهیم تابع $$ f (x) = 2x^2+3x+7$$ را تعریف کنیم. این تابع به صورت زیر در متلب نوشته میشود:
functionoutcome=myfunc1(x) outcome=2*x^2+3*x+7; |
متغیر “outcome” متغیری است که خودمان آن را تعریف کردهایم و از آن برای برقراری رابطه با پارامتر ورودی “x” استفاده میکنیم. بعد از آنکه تابع مورد نظر را تعریف کردیم، میتوانیم در برنامهها یا توابع دیگری که مینویسیم آن را فراخوانی کنیم. برای مثال، فرض کنید برنامهای با نام mainprog1.m به صورت زیر نوشتهایم:
forn=1:5 x=n*0.1; z=myfunc1(x); fprintf('x = %4.2f f(x) = %8.4f \r',x,z) end |
خروجی این برنامه به صورت زیر است:
x = 0.10 f(x) = 7.3200
x = 0.20 f(x) = 7.6800
x = 0.30 f(x) = 8.0800
x = 0.40 f(x) = 8.5200
x = 0.50 f(x) = 9.0000
توجه کنید که تابعی که از آن استفاده میکنیم، باید در همان پوشهای از کامپیوتر ذخیره شده باشد که برنامه یا تابع اصلی قرار دارد. متلب به صورت اتوماتیک آن را پیدا کرده و ارتباط لازم بین همه توابع را برقرار میکند.
۴۸. تابعی با چند پارامتر ورودی
تابع زیر را با نام myfunc2.m در نظر بگیرید که به صورت زیر است:
functionoutcome=myfunc2(x,a,b,c) outcome=a*x^2+b*x+c; |
همانطور که دریافتهاید، این برنامه تابع $$ f ( x ) = a x ^ 2 + b x + c $$ را تعریف میکند که ورودیهای آن، b ،a ،x و c هستند.
این تابع را در برنامه دیگری با نام mainprog2.m به کار میبریم:
forn=1:5 x=n*0.1; z=myfunc2(x,2,3,7); fprintf('x = %4.2f f(x) = %8.4f \r',x,z) end |
خروجی برنامه اخیر به صورت زیر است:
x = 0.10 f(x) = 7.3200
x = 0.20 f(x) = 7.6800
x = 0.30 f(x) = 8.0800
x = 0.40 f(x) = 8.5200
x = 0.50 f(x) = 9.0000
بخش هفتم: استفاده از فایلها و دستورهای خارجی برای ورودی و خروجی
در این بخش شیوه استفاده از فایلها و دستورات ورودی خارج از برنامه را بیان میکنیم. همچنین نحوه ایجاد فایلها و دستورات در خروجی را بیان خواهیم کرد.
۴۹. باز کردن یک فایل و نوشتن خروجی در آن
برنامه زیر را بنویسید و نتیجه آن را ببینید:
fID1=fopen('myoutput1.txt','w'); forn=1:4 b1=n;b2=n^2;b3=n^3; fprintf(fID1,'%7u %7u %7u \r',b1,b2,b3); end |
این برنامه خروجی خاصی که مانند مثالهای قبل قابل رؤیت باشد تولید نمیکند. اما فایلی با نام “myoutput.txt” ایجاد میکند (در همان جایی که متلب ذخیره شده است). محتوای این فایل به صورت زیر است:
1 1 1
2 4 8
3 9 27
4 16 64
خط اول برنامه فایلی به نام ‘myoutput1.txt’ را باز میکند و نوع “W” به این معنی است که این فایل “write only” است. پس از اجزای فرمان، متلب یک فایل ID یا شناسه را انتخاب خواهد کرد (که یک عدد است) و آن را در متغیر fID1 قرار خواهد داد. کاربر نیازی به دانستن آن عدد ندارد، اما اگر یک خروجی برای آن فایل باشد، باید از آن به عنوان شناسه استفاده شود.
دستور “(fprintf(fID1,’%7u %7u %7u \r’,b1,b2,b3” خروجی را به فایلی با ID یا شناسه fID1 هدایت میکند.اگر ID فایل داده نشده باشد، فرمان کوتاه “(fprintf(‘%7u %7u %7u \r’,b1,b2,b3” خروجی را در مکان پیشفرض نشان خواهد داد.
۵۰. خواندن داده از یک فایل موجود
برنامه زیر را در متلب بنویسید و آن را اجرا کنید.
fID1=fopen('myoutput1.txt','r'); forn=1:4 b=fscanf(fID1,'%7u %7u %7u \r',3); btotal=b(1)+b(2)+b(3); fprintf('%7u + %7u + %7u = %7u \r',b(1),b(2),b(3),btotal) end |
نتیجه این کد به صورت زیر است:
1 + 1 + 1 = 3
2 + 4 + 8 = 14
3 + 9 + 27 = 39
4 + 16 + 64 = 84
فرض میکنیم فایل “myoutput1.txt” قبلاً توسط برنامه بخش ۴۹ ایجاد شده است و به صورت صحیح در همان جایی که برنامه متلب را اجرا میکنیم ذخیره شده است. دستور نخست کد بالا، فایل “myoutput1.txt” را با وضعیت تعیین شده “r” به معنای “read only” باز میکند. دستور “(b = fscanf(fID1,’%7u%7u %7u \r’,3” یک رکورد را از فایل خارجی با ID=ID1 با استفاده از فرمت ‘%7u %7u %7u \r’ میخواند. عدد “3” بعد از این عبارت مشخص میکند که فقط ۳ عنصر اول این رکورد خوانده شده و در آرایه “b” قرار داده میشوند.
۵۱. ایجاد خط فرمان برای وارد کردن ورودی توسط کاربر
برناامه زیر را بنویسید و اجرا کنید.
num1=input('Enter your age'); if(num1>17) fprintf('You are eligible to vote') else fprintf('You are not eligible to vote') end |
برنامه بالا حالتی خاصی از وقتی است که ورودی از یک فایل خارجی خوانده نمیشود، بلکه توسط کاربر و با یک خط فرمان وارد میشود. خروجی برنامه بالا به عددی بستگی دارد که کاربر وارد میکند (در متغیر “num1” ذخیره میگردد) که بزرگتر از ۱۷ است یا کوچکتر از آن.
اگر بخواهیم ورودی یک رشته باشد (مثلاً “YES” یا “Fara Dars”)، باید از گزینه “s” استفاده کرده و آن را به دستور اضافه کنیم. برای مثال “(‘name1 = input(‘Enter your surname’, ‘s”.
اگر این مطلب برایتان مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزش های برنامه نویسی
- مجموعه آموزش های برنامهنویسی متلب (MATLAB)
- مجموعه آموزشهای پروژه محور برنامهنویسی
- مجموعه آموزش های برنامهنویسی متلب برای علوم و مهندسی
- منابع آموزشی نرم افزار متلب و برنامه نویسی کاربردی با آن
- زبان برنامه نویسی پایتون (Python) — از صفر تا صد
- تقلب نامه (Cheat Sheet) توابع و دستورات متلب (MATLAB)
^^
فیلم های آموزش برنامه نویسی در متلب (MATLAB) — راهنمای گام به گام (+ دانلود فیلم آموزش رایگان)
فیلم آموزشی آشنایی با محیط نرم افزار متلب (MATLAB)
فیلم آموزشی متغیرها آرایهها و ماتریسها در متلب
فیلم آموزشی حلقههای برنامه نویسی در متلب
فیلم آموزشی دستورات شرطی در متلب
فیلم آموزشی تابع نویسی در متلب
فیلم آموزشی رسم نمودار در متلب
فیلم آموزشی خواندن و نوشتن فایلها در متلب
فیلم آموزشی ایجاد خط فرمان برای ورودی کاربر در متلب
سید سراج حمیدی دانشآموخته مهندسی برق است و به ریاضیات و زبان و ادبیات فارسی علاقه دارد. او آموزشهای مهندسی برق، ریاضیات و ادبیات مجله فرادرس را مینویسد.
بر اساس رای 68 نفر
آیا این مطلب برای شما مفید بود؟
منبع: blog.faradars.org