جزوه آموزش ی مطلب ()MATLAB ?What is MATLAB • )MATLAB (MATrix LABoratory یک زبان برنامه نویس ی سطح با ال برای انجام برنامه های محاسباتی است. • دارای محیطی است که انجام محاسبات ،برنامه نویس ی او مشاهده نتایج آنها را به راحتی ی نمود. می توان پیاده ساز ا • یر اشاره نمود. ااز مهمترین کاربردهای آن می توان به موارد ز ا • ریاضیات او محاسبات عددی • ی آلگوهای مختلف پیاده ساز ا • ی ی او نمونه ساز ا مدل سازی ،شبیه ساز ا • ی تحلیل داده های آمار ا • ی او مهندس ی ترسیم نمودارهای مختلف آمار ا • پردازش تصویر • رباتیک Matlab High Level Languages such as C, Pascal etc. Assembly مطلب برنامه ای ترجمه شده ( )compileبا مزایا و معایب خاص خودش است. اگرچه مترجم آن وجود دارد اما از نظر سرعت تعریفی ندارد. مزایا سرعت بالی نمونه سازی یادگیری اسان به دلیل راهنمای بسیار کامل کتابخانه کامل برای توابع پردازش تصویر توانایی نمایش عالی گستردگی استفاده در مراکز آموزش ی و صنعتی معایب سرعت کم برای برخی از انواع پردازش ها مناسب نبودن برای پیاده سازی سیستم های مقیاس بزرگ برخی از ویژگی های محیط مطلب Matlab Series of Matlab commands m-files Command Line mat-files functions Input Output capability Command execution like DOS command window Data storage/ loading مطلب یک برنامه برای انجام محاسبات عددی است. در اوايل دهه 1980با زبان Cبازنويس ي شد. در اوايل دهه 1970توسط Cleve Moler,به وجود آمد .ا ا در 1984شركت Mathworkتأسيس شد. جبر خطی با استفاده ااز ماتریس طراحی شد. بار این برنامه برای حل مسایل ا نخستین ا به همین دلیل نام آن مخفف آزمایشگاه ماتریس ( )MATrix LABoratoryاست. ظیر تحلیل بسیار گسترش یافته او شامل توابع ااز پیش ساخته بسیاریا برای حل مسایل مختلف ن ا ا امروزه این برنامه دیگر محاسبات علمی است. داده ها ،پردازش سیگنال ،بهینه سازیا او انواع ا این برنامه همچنین شامل توابعی برای گرافیک دو و سه بعدی می باشد. همه چیز در مطلب به صورت یک ماتریس است. ظاهر شده او دستورا ا بر دستورا است .یک پرومپت روی صفحه محیط مطلب شبیه سیستم عامل لینوکس مبتنی ا نظر جلویا آن وارد می شود. مورد ا ظاهر می شود. ا وقتی که کلید > <Enterزده می شود دستورا وارد شده اجرا شده او پرومپت دیگریا اگر جمله ای با سمیکالونا (;) تمام شود هیچ نتیجه ای نمایش داده نمی شود .بدونا آن قبل ااز پرومپت بعدی حاصل ا دستورا نمایش داده می شود. .ظاهر می شود یر ا بار این برنامه اجرا می شود پنجره ز ا هنگامی که برای اولین ا • Current Directory ▫ View folders and m-files • Workspace ▫ View program variables ▫ Double click on a variable to see it in the Array Editor • Command Window • type commands Command History view past commands save a whole session Command window: Type your instructions here and press ENTER to execute them. Example: Declare a column matrix with values 1,2 and 3. Command history: a list of instructions executed by MATLAB is shown here. Workspace: shows a list of variables created by MATLAB. As you can see, the value of ‘aaa’ is shown. Another way to create a variable Is to press this button. MATLAB will prompt you to enter the variable name. As you can see, the variable name has been changed to bbb. 2) Or by double clicking on bbb. To assign a value to bbb, you can do it in two ways: 1) Using the command window. When you click on bbb, the variable editor window appears. You can type in new values into bbb by filling in the cells. An example is shown here. Try and do it yourself. To display variables at the console, you can type the variable name, or you can type disp(variable_name). To clear all variables from memory and close all figures, use the clear, close all command. As you can see, all workspace variables are deleted when you execute this command. To clear the command window, use the clc (clear console) command. Example: search for function mean To create an m-file, 1) type edit at the command window, or 2) Press this button. The previous command will display the editor window. The editor creates an m-file that can be used to write your MATLAB programs. To execute a program, press the RUN button. This window will appear. Press the Change Directory button. متغیرها • در مطلب نیازی به پیش تعریف متغیرها و تعیین نوع آنها در ابتدای برنامه نیست. ;int a ;double b ;float c • برای تعریف یک متغیر تنها کافی است که کمیت مورد نظر را به آن منسوب کنیم. مثال ;>> x = 5 ;>> x1 = 2 ;’>> y = ‘hello • پس از این انتساب ،هر یک از متغیر های تعریف شده یک ماتریس 1*1می باشند. • مطلب بین حروف بزرگ و کوچک فرق قائل است. >> X Undefined function or variable 'X'. بردارها و ماتریس ها • برای تعریف یک بردار سطری مانند ] x=[1 2 5 1به یکی از روش های زیر عمل می کنیم. ;]>> x = [1 2 5 1 ]>> x = [1,2,5,1 =x 1 2 5 1 • برای تعریف یک بردار ستونی به یکی از روش های زیر عمل می کنیم. ;]>> x1 = [1;2;5;1 ;’]>> x1 = [1 2 5 1 • برای محاسبه ترانهاده یک ماتریس به روش زیر عمل می کنیم. ;)• y = transpose(x1 • با توجه به آن که بردار فوق مختلط نیست می توان عمل فوق را با دستور زیر انجام داد. y=1 2 5 1 ’• y = x1 ‘ means complex conjugate of transposed :• دقت کنید • مثال >> z=[1+3i , 2-4i ; 2 , -5+10i]; >> z' ans = 1.0000 - 3.0000i 2.0000 2.0000 + 4.0000i -5.0000 -10.0000i >> transpose(z) ans = 1.0000 + 3.0000i 2.0000 2.0000 - 4.0000i -5.0000 +10.0000i . استفاده کنیم فاصله بین خطوط در نمایش پاسخ ها حذف می شودformat compact اگر از دستور تعریف بردارها و ماتریس های طوالنی • در صورتی که بخواهیم یک بردار طولنی دارای یک ریتم و آهنگ خاص تعریف کنیم می توانیم از روش زیر استفاده کنیم. 10 0 -0.5000 -1.0000 0 9 8 7 6 5 4 >> t = 1:10 =t 1 2 3 >> k =2:-0.5:-1 =k 2.0000 1.5000 1.0000 0.5000 >> phi = -pi:pi/6:pi = phi -3.1416 -2.6180 -2.0944 -1.5708 -1.0472 -0.5236 0.5236 1.0472 1.5708 2.0944 2.6180 3.1416 روش دیگر استفاده از دستور ) linspace(a,bیا ) linspace(a,b,nمی باشد. این دستور برای تولید بردارهایی با فواصل خطی استفاده می شود .مثال: )sai = linspace(-pi,pi,11 = sai 0 0.6283 1.2566 1.8850 -3.1416 -2.5133 -1.8850 -1.2566 -0.6283 2.5133 3.1416 ;)A = linspace(1,36,12 در صورتی که nرا مشخص نکنیم به صورت اتوماتیک 100در نظر گرفته می شود. ]>> B = [1:4; 5:8 =B 4 8 3 7 2 6 1 5 . استفاده می کنیمwho برای مشاهده نام متغیرهای ایجاد شده از دستور >> who Your variables are: B ans k phi sai t x z . استفاده می کنیمwhos برای دیدن لیست متغیرها به همراه سایز و نوع آنها از دستور >> whos Name Size Bytes Class B 2x4 64 double ans 1x100 800 double k 1x7 56 double phi 1x13 104 double sai 1x11 88 double t 1x10 80 double x 1x5 10 char z 2x2 64 double Attributes complex تولید بردارها با استفاده از توابع از پیش تعریف شده مطلب تولید یک ماتریس صفر به سایز :m*n )zeros(m,n )>> zeros(2,3 = ans تولید ماتریس یک به سایز :m*n 0 0 0 0 0 0 )ones(m,n )>> ones(1,3 = ans 1 تولید یک ماتریس تصادفی با توزیع یکنواخت روی بازه ):(0,1 1 1 )rand(m,n )>> rand(1,4 = ans 0.9134 0.1270 0.9058 0.8147 تولید یک ماتریس مربعی یکه به سایز :n*n )eye(n )>> X = eye(3 =X 0 0 1 0 1 0 1 0 0 برخی از توابعی که روی آرایه ها عمل می کنند: تمام مولفه های بردار xرا با هم جمع می کند: )sum(x ;]>> A=[1 2 3 )>> sum(A = ans 6 >> B =B 4 3 2 1 8 7 6 5 )>> sum(B = ans 12 10 8 6 ))>> sum(sum(B = ans 36 تمام مولفه های بردار xرا از اول تا آن مولفه با هم جمع می کند: )cumsum(x )>> cumsum(1:5 = ans 15 تمام مولفه های بردار xرا در هم ضرب می کند: 10 6 3 1 )prod(x >> A =A 3 2 1 )>> prod(A = ans >> B =B 1 2 3 4 5 6 7 8 )>> prod(B = ans 5 12 21 32 6 )max(x بزرگترین مولفه بردار xرا پیدا می کند: )>> max(A = ans 3 در ماتریسها با این دستور بزرگترین مولفه هر ستون پیدا می شود. )>> max(B = ans 8 کوچکترین مولفه بردار xرا پیدا می کند: 7 6 5 )min(x )sort(x مولفه های xرا مرتب می کند: ;]>> C=[2,-2,1,0,5,1,7 )>> sort(C = ans 7 5 2 1 1 0 -2 مقدار متوسط یا میانگین xرا پیدا می کند: )mean(x )>> mean(A = ans 2 ماتریس تنک :ماتریس است که تنها تعداد کمی از درایه های آن مقدار دارد و بقیه عناصر آن صفر است. برای صرفه جویی در میزان حافظه و افزایش سرعت از دستورات زیر استفاده می کنیم: :Sparse(m,n) یک ماتریس تنک به سایز مشخص شده تولید می کند .تمام درایه های این ماتریس صفر است. )>> zeros(2,3 = ans 0 0 0 0 0 0 )>> sparse(2,3 = ans All zero sparse: 2-by-3 :Sparse(A) قالب تعریف ماتریس Aرا به حالت تنک تبدیل می کند. )>> II=eye(3 )>> sparse(II = II = ans 0 0 1 1 )(1,1 0 1 0 1 )(2,2 1 0 0 1 )(3,3 :Speye(n) یک ماتریس یکه مربعی n*nرا به فرم تنک تبدیل می کند. )>> speye(3 = ans 1 )(1,1 1 )(2,2 1 )(3,3 ) :spones(Sبه جای تمام عناصر ماتریس Sعدد یک می گذارد. برای نمایش یک ماتریس تنک به فرم معمولی از دستور fullاستفاده می کنیم. )>> full(II = ans 1 0 0 0 1 0 0 0 1 نحوه نامگذاری (ایندکس) درایه های ماتریس • اندیس های یک ماتریس در مطلب از 1شروع می شوند( .نه مانند Cاز صفر) • اندیس ماتریس ها در مطلب اعداد مثبت می باشند. )A(-2), A(0 Error: ??? Subscript indices must either be real positive integers or logicals. )A(4,2 Error: ??? Index exceeds matrix dimensions. نحوه اتصال ماتریس ها • x = [1 2], y = [4 5], z=[ 0 0] A = [ x y] 1 2 4 5 B = [x ; y] 12 C = [x y ;z] 4 5 Error: ??? Error using ==> vertcat CAT arguments dimensions are not consistent. برای این منظورا می توان ااز دستورهای vertcat یاhorzcat یاcat .استفاده کرد • تعیین تعداد سطر و ستون های یک ماتریس )size(A >> B =B )>> size(B = ans 4 3 2 1 2 8 7 6 5 4 • تعیین طول یک بردار )length(A >> A =A )>> length(A = ans 3 3 2 1 )flipud(A • چرخش درایه های یک ماتریس از بال به پایین ]>> A=[1 2;3 4;-1 0 =A )>> B=flipud(A =B -1 0 3 4 1 2 • چرخش درایه های یک ماتریس از چپ به راست 2 1 4 3 0 -1 )fliplr(A ]>> A=[1 2;3 4;-1 0 )>> C=fliplr(A =C 2 1 4 3 0 -1 =A 2 1 4 3 0 -1 عملگرهای ماتریس ی + * ^ جمع ضرب توان / تفریق تقسیم اعمال عملگرها به صورت عضو به عضو A = [1 2 3; 5 1 4; 3 2 1] A= 1 2 3 5 1 4 3 2 -1 x = A(1,:) x= .* تقسیم هر درایه بر درایه متناظر ./ به توان رساندن نظیر به نظیر .^ b = x .* y c=x./y d = x .^2 b= c= 0.33 0.5 -3 d= y = A(3 ,:) y= 1 2 3 ضرب درایه در درایه 3 8 -3 3 4 -1 K= x^2 Erorr: ??? Error using ==> mpower Matrix must be square. B=x*y Erorr: ??? Error using ==> mtimes Inner matrix dimensions must agree. 1 4 9 برخی از توابع ماتریس ی عبارتند از: دترمینان ماتریس مربعی )det(a محاسبه وارون ماتریس )inv(a مقادیر و بردار ویژه ماتریس مربعی )eig(a تولید یک بردار از درایه های روی قطر اصلی یک ماتریس مربعی تولید ماتریس مربعی قطری )diag(a )diag(v کاربردهای دستور format این دستور فقط نحوه نمایش داده ها در صفحه نمایش را مشخص می کند و تاثیری روی دقت نگه داری آنها در حافظه ندارد. ))>> v=exp(-10*(1:5 اگر format shortیا همان formatانتخاب شود (اعداد بعد از نقطه اعشار)4 : =v * 1.0e-04 0.4540 0.0000 0.0000 0.0000 0.0000 اگر format short eانتخاب شود =v 4.5400e-05 2.0612e-09 9.3576e-14 4.2484e-18 1.9287e-22 اگر format longانتخاب شود (اعداد بعد از نقطه اعشار)14 : =v * 1.0e-04 0.453999297624848 0.000020611536224 0.000000000935762 0.000000000000042 0.000000000000000 اگر format long eانتخاب شود =v 4.539992976248485e-05 2.061153622438558e-09 9.357622968840175e-14 4.248354255291589e-18 1.928749847963918e-22 اگر format rationalانتخاب شود ،نمایش به صورت کسر متعارفی >> eps ><Enter = ans 1/4503599627370496 عملیات منطقی در مطلب عالمت های زیر برای مقایسه اعداد و حروف به کار می روند. == =~ => =< < > حاصل همه عملیات صفر (نادرست) و یک (درست)است. >> 3<5 = ans 1 ]>> [1 2]>=[0,3 = ans 0 1 ;]>> x=[1 2 -1 0 -5 4 -1.5 3 2.5 -.5 )>> x(x>0 مولفه های مثبت بردار را نشان می دهد. = ans 2.5000 3.0000 4.0000 2.0000 1.0000 x((x>=0)&(x<=3)) ans = 1.0000 2.0000 0 3.0000 2.5000 >> length(x((x>=0)&(x<=3))) ans = 5 & | >> m=[1 2 4; -2 3 -1]; >> ~(m>0) ans = 0 0 0 1 0 1 >> (m>0)|(m<=2) ans = 1 1 1 1 1 1 >> (m>0)&(m<=2) ans = 1 1 0 0 0 0 xor .عملگرهای منطقی به صورت زیر مشخص می شوند ~ آیا در بردار (ماتریس) مورد نظر مقداری با شرط مورد نظر وجود دارد؟ )any(A>3 آیا در بردار (ماتریس) مورد نظر تمام مقادیربا شرط مورد نظر را دارند؟ )all(A>3 در بردار (ماتریس) مورد نظر کدام مقدارها شرط مورد نظر را دارند؟ )>> find(v>3 = ans 4 )find(A>3 ;]>> v=[-2 1 3 5 )>> any(v<1 = ans 1 )>> any(v>6 = ans 0 )>> all(v<1 = ans 0 )>> all(v<6 = ans 1 توابع سمبلیک در مطلب توابع سمبلیک در مطلب از نسخه MATLAB 6.0در دسترس قرار گرفت. (برای تعیین ورژن برنامه از دستور verاستفاده کنید). مباحث تحت پوشش امکانات ارائه شده حساب دیفرانسیل و انتگرال مشتق ،انتگرال ،حد ،سری ،بسط تیلورا جبر خطی معکوس ،دترمینان ،مقدار ویژه ساده سازیا ساده کردن عبارات جبریا حل معادلت راه حل های سمبلیک و عددی معادلت جبریا و دیفرانسیل توابع ریاض ی خاص توابع ریاض ی خاص تبدیل ها فوریه ،لپالس ،تبدیل zو تبدیل های معکوس آنها معرفی توابع نمادین :برای هرنوع عملیات نمادین باید ابتدا متغیرهای مورد استفاده را معرفی نمود .این کار با دستورهای symو symsانجام می شود. ans =(a + b)^2 >> (a+b)^2 >> syms a b . یک چند جمله ای را به حاصلضرب چند عبارت چند جمله ای تجزیه می کند، این تابع:factor >> syms x >> n=(1:9)'; >> p=x.^n-1; >> f=factor(p); >> [p,f] ans = [ x - 1, x - 1] [ x^2 - 1, (x - 1)*(x + 1)] [ x^3 - 1, (x - 1)*(x^2 + x + 1)] [ x^4 - 1, (x - 1)*(x + 1)*(x^2 + 1)] [ x^5 - 1, (x - 1)*(x^4 + x^3 + x^2 + x + 1)] [ x^6 - 1, (x - 1)*(x + 1)*(x^2 + x + 1)*(x^2 - x + 1)] [ x^7 - 1, (x - 1)*(x^6 + x^5 + x^4 + x^3 + x^2 + x + 1)] [ x^8 - 1, (x - 1)*(x + 1)*(x^2 + 1)*(x^4 + 1)] [ x^9 - 1, (x - 1)*(x^2 + x + 1)*(x^6 + x^3 + 1)] )factor (عکس. برای بسط دادن عبارات سمبلیک به صورت سمبلیک به کار می رود، این تابع:expand >> expand((x-2)*(x-4)) ans = x^2 - 6*x + 8 >> expand(cos(x+y)) ans = cos(x)*cos(y) - sin(x)*sin(y) )substitution (مخفف. از این تابع برای جایگزاری یک عدد به جای متغیر سمبلیک به کار می رود:subs >> a=cos(x+y) a= cos(x + y) >> subs(a,x,0) ans = -cos(y) >> subs(a,y,0) ans = cos(x) >> subs(a,{x,y},[pi,0]) ans = -1 ی حل معادلت جبر ا . را پیدا می کندS=0 یک عبارت سمبلیک باشد تابع روبرو جوابهای معادلهS اگر:solve(S) >> syms a b c x >> S=a*x^2+b*x+c; >> solve(S) ans = -(b + (b^2 - 4*a*c)^(1/2))/(2*a) -(b - (b^2 - 4*a*c)^(1/2))/(2*a) >> pretty (ans) +-+ | 2 1/2 | | b + (b - 4 a c) | | - ------------------- | | 2a | | | | 2 1/2 | | b - (b - 4 a c) | | - ------------------- | | 2a | +-+ >> subs(ans,{a,b,c},[1,1,1]) ans = -0.5000 - 0.8660i -0.5000 + 0.8660i >> solve('cos(2*x)+sin(x)=1') ans = 0 pi/6 (5*pi)/6 >> ss=x^2+1 ss = x^2 + 1 >> x=sym(0) x= 0 >> eval(ss) ans = 1 >> solve(cos(2*x)+sin(x)-1) ans = 0 pi/6 (5*pi)/6 مشتق گیری از توابع سمبلیک در مطلب ) :diff(fاز تابع سمبلیک fمشتق می گیرد( .متغیر پیش فرض xمی باشد) برای تغییر متغیر به این صورت عمل می کنیم )>> diff(f,a = ans )x*cos(a*x >> syms a x ;)>> f=sin(a*x )>> diff(f = ans )a*cos(a*x این تابع از درایه های یک ماتریس هم مشتق می گیرد. ])>> A=[cos(a*x),sin(a*x),-sin(a*x),tan(a*x =A ])[ cos(a*x), sin(a*x), -sin(a*x), tan(a*x )>> diff(A = ans ])[ -a*sin(a*x), a*cos(a*x), -a*cos(a*x), a*(tan(a*x)^2 + 1 حل معادلت دیفرانسیل . دستور زیر برای حل معادله دیفرانسیل معمولی با شرایط اولیه به کار می رود: S = dsolve(eqn,cond) بدون شرط اولیهdy/dx=1+y^2 حل معادله دیفرانسیل >> dsolve('Dy=1+y^2') ans = tan(C3 + t) >> x=dsolve('Dx^2+x^2=1','x(0)=0') x= cosh((pi*i)/2 + t*i) cosh((pi*i)/2 - t*i) y(0)=1 حل همان معادله با شرط اولیه >> dsolve('Dy=1+y^2','y(0)=1') ans = tan(pi/4 + t) x(0)=0 وdy/dx(0)=0 با شرایط اولیهd2y/dx2=cos2x-y حل معادله دیفرانسیل مرتبه دوم >> y=dsolve('D2y=cos(2*x)-y','y(0)=1','Dy(0)=0','x') y= (5*cos(x))/3 + sin(x)*(sin(3*x)/6 + sin(x)/2) - (2*cos(x)*(6*tan(x/2)^2 - 3*tan(x/2)^4 + 1))/(3*(tan(x/2)^2 + 1)^3) >> simplify(y) ans = 1 - (8*(cos(x)/2 - 1/2)^2)/3 انتگرال گیری از توابع سمبلیک در مطلب ) :int(fاگر fیک تابع سمبلیک باشد این دستور انتگرال نامعین آن را حساب می کند. برای محاسبه انتگرال معین ،ابتدا و انتهای بازه را می نویسیم. )>> int(x^n = ans )])piecewise([n == -1, log(x)], [n ~= -1, x^(n + 1)/(n + 1 ))>> int(sin(2*x = ans sin(x)^2 ))>> int(exp(n*x = ans exp(n*x)/n ))>> int(exp(n*x^2 = ans ))(pi^(1/2)*erf((-n)^(1/2)*x))/(2*(-n)^(1/2 )>> int(exp(-x),0,inf = ans 1 )>> int(x^2,0,1 = ans 1/3 >> syms x >> ac=cos(x); >> ezplot(ac) به صورت پیش فرض در محدوده. را رسم می کندf(x) نمودار تابع:ezplot(f) .[ رسم می کند-pi,pi] cos(x) >> ezplot(ac,[0,2*pi]) 1 cos(x) 1 0.5 0.5 0 0 -0.5 -0.5 -1 -6 -4 -2 0 x 2 4 6 -1 0 1 2 3 4 x 5 6 tan(x) >> ezplot('tan(x)') 6 4 2 0 -2 x 2+y 2-36 = 0 6 -4 4 -6 -4 -2 0 x 2 4 6 y -6 >> fc='x^2+y^2-36'; >> ezplot(fc) >> axis equal; % طول محورها يکسان مي شود 2 0 -2 -4 -6 -6 -4 -2 0 x 2 4 6 exp(-x 2/2) 1 >> syms x >> k=sym(1/sqrt(2)); >> f=exp(-(k*x)^2); >> ezplot(f) 0.8 0.6 0.4 1/(4 cos(x) + 5) 0.2 1 0.9 0 0.8 -3 -2 -1 0 x 1 2 3 0.7 0.6 0.5 >> syms x >> f=1/(5+4*cos(x)); >> ezplot(f) 0.4 0.3 0.2 0.1 -6 -4 -2 0 x 2 4 6 رسم نمودار )’ :plot(x,y,’oاین دستور برای رسم بردار yبر حسب xبه کار می رود. ;>> x=-10:0.5:10 ;>> y=-x.^3+3*x.^2+1 )'>> plot(x,y,'o )>> plot(x,y 10 8 6 4 2 0 -2 -4 -6 -8 1500 1500 1000 1000 500 500 0 0 -500 -500 -1000 10 -10 8 6 4 2 0 -2 -4 -6 -8 -1000 -10 . با این دستور می توان نمودارهای دیگر را هم بر روی یک نمودار رسم کرد:hold on/off >> x=0:0.1:2*pi; >> x1=sin(x); >> x2=cos(x); >> x3=sin(x).^2-cos(2*x); >> plot(x,x1) >> hold on; >> plot(x,x2,'r') >> hold on; >> plot(x,x3,'.-k') >> legend('x_1','x_2','x3') 2 x1 x2 1.5 x3 1 0.5 0 -0.5 -1 0 1 2 3 4 5 6 7 >> hr=0:2:24; >> temp=[-2 -2 -1 0 .5 3 7 10 12 16 10 3 1]; >> bar(hr,temp,1) >> xlabel('Hours of The Day') >> ylabel('Temp, Celcius') 16 Voltage (V) :برچسب ها >> title('Plotting Test Program (PTP)') >> xlabel('Time (\mus)') >> ylabel('Voltage (V)','fontsize',18) 14 Plotting Test Program (PTP) 2 x1 x2 1.5 x3 1 0.5 0 -0.5 12 -1 Temp, Celcius 10 0 1 2 3 4 Time (s) 5 6 8 6 به صورت نمودارx را بر حسبy :bar(x,y,w) . رسم می کندw میله ای با عرض 4 2 0 -2 0 2 4 6 8 10 12 14 Hours of The Day 16 18 20 22 24 7 >> p=[10 3 6 5 2]; >> w=[0.5 1 1 0.5 1]; >> m={'Tehan','Shiraz','Esfahan','Tabriz','Ahvaz'} m= 'Tehan' 'Shiraz' 'Esfahan' 'Tabriz' 'Ahvaz' >> pie(p,w,m) Ahvaz Tabriz Tehan Esfahan Shiraz >> x=linspace(-2*pi,2*pi,20); >> figure(1); plot(x,tan(x),x,sin(x),x,cos(x)) >> fs='[tan(t) sin(t) cos(t)]'; >> figure(2), fplot(fs,[-2*pi 2*pi -5 5]) 15 10 5 5 4 0 3 2 -5 1 0 -10 -1 -15 -8 -6 -4 -2 0 2 4 6 8 -2 -3 -4 -5 -6 -4 -2 0 2 4 6 رسم نمودارهای سه بعدی می توان نمودارهای سه بعدی راsurf(x,y,z) وmesh(x,y,z) وplot3 (x,y,z) با استفاده ااز توابع .رسم نمود >> alfa=linspace(0,10*pi,400); >> x1=cos(alfa); >> y1=sin(alfa); >> z1=linspace(0,40,400); >> plot3(x1,y1,z1) 40 30 20 10 0 1 0.5 1 0.5 0 0 -0.5 -0.5 -1 -1 >> x=-10:0.5:10; >> y=x; >> z=-2*x.^3+x+3*y.^2-1; >> plot3(x,y,z) >> grid 3000 2000 1000 0 -1000 -2000 10 5 10 5 0 0 -5 -5 -10 100 -10 zp 50 >> [xp,yp]=meshgrid(-6:6,-4:4); >> zp=xp.^2+yp.^3; >> mesh(xp,yp,zp) >> xlabel('xp') >> ylabel('yp') >> zlabel('zp') 0 -50 -100 4 2 10 5 0 0 -2 yp -5 -4 -10 xp mesh plotting for Z=X2+Y2 18 16 20 14 15 12 10 10 8 5 6 0 4 4 2 4 2 0 2 0 -2 -2 -4 -4 >> [X,Y]=meshgrid(-3:0.1:3); >> Z=X.^2+Y.^2; >> mesh(X,Y,Z) >> colorbar >> title('mesh plotting for Z=X^{2}+Y^{2}') 0 >> [x,y,z]=peaks(30); >> surf(x,y,z) >> surf(x,y,z,'facecolor','red','edgecolor','none'); light 10 5 0 -5 -10 4 2 4 2 0 0 -2 -2 -4 -4 رسم کره با دستور sphere ;>> [X,Y,Z]=sphere )>> mesh(X,Y,Z ;>> axis equal گراف را متقارن مي کند % ;>>axis off محورها را محو مي کند% . ;>>hidden off قسمت هاي مخفي نمودار را نمايان مي کند% . برنامه نویس ی در مطلب • برای نوشتن برنامه (توالی چند دستور که در صورت اجرای آنها می توان به هدف مشخص ی رسید) باید از محیط دیگری موسوم به ادیتور ام-فایل ( )m-fileاستفاده نمود. • برای باز کردن ادیتور ام-فایل از دکمه ) New script (Ctrl+Nاز نوار ابزار بالی صفحه یا از منوی File New Scriptاز منوهای بالی صفحه استفاده نمود. • هر برنامه را باید با نام دلخواه و با پسوند ( .mبدون خط فاصله) ذخیره نمود. • برای اجرای برنامه می توان به یکی از دو روش زیر عمل نمود. -1با تایپ نام آن در محیط دستور و فشردن کلید Enter -2با فشردن دکمه Runدر محیط ادیتور ام-فایل انواع برنامه: -1برنامه اصلی ( :)script m-fileبرنامه اصلی است که اجرای آن باعث انجام عملیات مورد نظر می شود. -2تابع ( :)function m-fileتابع است و از داخل برنامه اصلی یا توابع دیگر صدا زده می شود. مسیر فعال ( )Active directoryچیست؟ در هر لحظه مطلب دایرکتوری فعال خود را چک می کند و تمامی توابع و برنامه های موجود در آن شاخه قابل اجرا هستند .این مسیر در پنجره Commandدر قسمت نوار بالی صفحه قابل مشاهده است. البته مطلب غیر از مسیر فعال دنبال توابع پیش فرض خود در سایر دایرکتوری ها هم می گردد. با استفاده از دستور pathمی توان تمامی این مسیرها را مشاهده کرد. :pwdبا استفاده از این دستور مسیر فعال نمایش داده می شود. دقت داشته باشید که نام متغیرهای استفاده شده در برنامه با متغیرهای پیش فرض یکسان نباشد. دقت داشته باشید که نام برنامه با توابع پیش فرض مطلب یکسان نباشد. ;x = pi/100:pi/100:10*pi ;y = sin(x)./x )plot(x,y grid • مثال :نمونه ای از یک برنامه ساده • مثال :برنامه ای با نام bank.mبنویسید که جدول سرمایه نهایی بر حسب سرمایه اولیه (به تومان) را با نرخ سود rپس از nسال برای 5نمونه از سرمایه به دست دهد. format bank ;]A=[75000 100000 300000 500000 1000000 ;r=0.09 ;n=10 ;B=A*(1+r)^n ]'nama=[A' B = nama 177552.28 236736.37 710209.10 1183681.84 2367363.67 75000.00 100000.00 300000.00 500000.00 1000000.00 در غیر این صورت ادامه برنامه به. در صورتی که شرط مورد نظر درست باشد وارد آن می شود:if • دستور شرطی . منتقل می شودend بعد از if condition 1 Statements elseif condition 2 a=input('please enter a number: '); Statements if a==2 Else Statements end disp('your entered number is 2') elseif a==3 disp('your entered number is 3') elseif a==4 disp('your entered number is 4') else disp('your entered number is not 2, 3 or 4') end clc . را حل کرد2 برنامه ای بنویسید که توسط آن بتوان معادله درجه:• مثال clear all; % This program solves equation a=input('Enter a (ax^2_bx+c) : '); b=input('Enter b (ax^2_bx+c) : '); c=input('Enter c (ax^2_bx+c) : '); if a==0 && b~=0 x=-c/b; answer=[x,x]; elseif a~=0 delta=b^2-4*a*c; x1=(-b+sqrt(delta))/(2*a); x2=(-b-sqrt(delta))/(2*a); answer=[x1,x2]; elseif a==0 && b==0 disp ('this is not an equation') answer =[]; end answer % Evaluation of Z • برنامه ای که اعداد مختلط را به صورت % the complex numbers are entered Z1 = 3+4*j; .• قطبی تبدیل می کند Z2 = 5+2*j; theta = (60/180)*pi; % angle in radians Z3 = 2*exp(j*theta); Z4 = 3+6*j; Z5 = 1+2*j; % Z_rect is complex number Z in rectangular form disp('Z in rectangular form is'); % displays text inside brackets Z_rect = Z1*Z2*Z3/(Z4+Z5); Z_rect Z_mag = abs (Z_rect); % magnitude of Z Z_angle = angle(Z_rect)*(180/pi); % Angle in degrees disp('complex number Z in polar form, mag, phase'); % displays text %inside brackets Z_polar = [Z_mag, Z_angle] function y=fact(n) % FACT – Display factorials of integers 1..n if isempty(n) error('No input argument assigned') elseif n < 0 error('Input must be non-negative') elseif abs(n-round(n)) > eps error('Input must be an integer') else for k=1:n kfac=prod(1:k); disp([num2str(k),' ',num2str(kfac)]) y(k)=kfac; end; end .• تابعی فاکتوریل اعداد را محاسبه می کند % maximum power transfer vs = 10; rs = 10e3; rl = 0:1e3:50e3; k = length(rl); % components in vector rl % Power dissipation calculation for i=1:k curr(i) = vs/(rs+rl(i)); pl(i) = rl(i)*curr(i)^2; end % Derivative of power is calculated using backward difference dp = diff(pl)./diff(rl); rld = rl(2:length(rl)); % length of rld is 1 less than that of rl % Determination of critical points of derivative of power prod = dp(1:length(dp) - 1).*dp(2:length(dp)); crit_pt = rld(find(prod < 0)); max_power = max(pl); % maximum power is calculated % print out results fprintf('Maximum power occurs at %8.2f Ohms\n',crit_pt) fprintf('Maximum power dissipation is %8.4f Watts\n', max_power) % Plot power versus load plot(rl/1000,pl*1000,'+') title('Power delivered to load') xlabel('load resistance in K Ohms') ylabel('power in mili watts') % Charging of an RC circuit c = 10e-6; r1 = 1e3; tau1 = r1*c; t = 0:0.002:0.05; v1 = 10*(1-exp(-t/tau1)); r2 = 10e3; tau2 = r2*c; v2 = 10*(1-exp(-t/tau2)); r3 = .1e3; tau3 = r3*c; v3 = 10*(1-exp(-t/tau3)); plot(t,v1,‘:k',t,v2,‘.-b', t,v3,‘-rs') axis([0 0.06 0 12]) title('Charging of a capacitor with three time constants') xlabel('Time, s') ylabel('Voltage across capacitor') text(0.03, 5.0, '+ for R = 1 Kilohms') text(0.03, 6.0, 'o for R = 10 Kilohms') text(0.03, 7.0, '* for R = 0.1 Kilohms') رسم نمودار شارژ خازنا function v = ideal(t,p) % ideal: Calculation of ideal gas specific volume % v=ideal(t,p) takes the vector of temperature (t) in K % and the vector of pressure (p) in Pa and returns the % matrix of specific volume (v) in m3/kmol. % Start of calculations R = 8314; % Gas constant (J/kmol.K) for k = 1:length(p) v(k,:) = R*t/p(k); % Ideal gas law end » p=1:10; t=300:10:400; » vol=ideal(t,p); » surf(t,p,vol) » view(135,45), colorbar H = zeros(5); for k=1:5 for l=1:5 H(k,l) = 1/(k+l-1); end end H H= 1.0000 0.5000 0.3333 0.2500 0.2000 0.5000 0.3333 0.2500 0.2000 0.1667 0.3333 0.2500 0.2000 0.1667 0.1429 0.2500 0.2000 0.1667 0.1429 0.1250 0.2000 0.1667 0.1429 0.1250 0.1111