به نام خدا دانشگاه آزاد اسالمی واحد نجفآباد دانشکده مهندسی برق مقدمهای بر توابع ریاضی رسم شکل و برنامهنویسی در نرم افزار MATLAB مدرس: ایمان صادقخانی
- نحوه تعریف و واردکردن یک ماتریس برای جداکردن درایههای هر سطر از کلید Space یا نماد " " استفاده میشود. برای تعریف سطر بعدی از نماد ";" استفاده نموده و یا کلید Eter را فشار دهید. >> A = [1 3; 4 5 6;7 8 9] A = 1 4 7 5 8 3 6 9 پس از واردکردن ماتریس A و زدن کلید Eter این ماتریس در Workspace ذخیره میشود. با دوبار کلیککردن بر نماد ماتریس A در Workspace پنجره Variable Editor باز خواهد شد که امکان ویرایش ماتریس A را فراهم خواهد نمود. نکته: استفاده از نماد ";" در آخر هر دستور مانع نمایش خروجی آن دستور در محیط کار و شلوغشدن آن میشود. دستور clc محیط کار را پاک میکند. همچنین دستور clear all متغیرهای موجود در Workspace را حذف خواهد نمود. ترانهاد ماتریس A با دستور 'A بدست خواهد آمد. دستور diag(a) قطر اصلی ماتریس A را در یک ستون نمایش خواهد داد. دستور sum(a) درایههای ماتریس A را بصورت ستونی جمع میکند. برای ماتریس فوق داریم: >> sum(a) as = 1 15 18 دستور magic() یک ماتریس ایجاد میکند که مجموع درایههای هر ستون آن با هم برابر است. مثال: دستورات زیر را وارد نموده و نتیجه را مشاهده نمایید: >> sum(magic(5)) >> sum(diag(a))
دستور size(a) تعداد سطر و ستونهای یک ماتریس را نشان میدهد. برای مثال: >> A=[1 3;5 6;4 9] >> size(a) as = 3 دستور sort(a) درایههای یک ماتریس را از کوچک به بزرگ مرتب میکند. برای مثال: >> sort(a) as = 1 3 4 6 5 9 - نمایش آرایههای یک ماتریس برای دسترسی به یک درایه خاص از ماتریس A از دستور A(,m) استفاده میکنیم که شماره سطر و m شماره ستون درایه مورد نظر میباشد. همچنین میتوان از دستور A(i) استفاده نمود که i شماره درایه مورد نظر بوده که بصورت زیر بدست میآید: A(1,1) A(1,) A(1,3) A = A(,1) A(,) A(,3) A(3,1) A(3,) A(3,3) A = A(1) A() A(3) A(4) A(5) A(6) A(7) A(8) A(9) - آشنایی با عملگر ":" >> A = 1::10 >> A(:,) این عملگر را با مثال توضیح خواهیم داد. این دستور اعداد 1 تا 11 را با گام نمایش میدهد. برای مشاهده سطر اول ماتریس A از دستور (:,1)A استفاده میکنیم. مثال: دستورات زیر را وارد نموده و خروجی را مشاهده کنید: >> sum(a(:)) 3
- ساخت چند ماتریس پرکاربرد دستور zeros(,m) دستور oes(,m) یک ماتریس m یک ماتریس m با درایههای صفر میسازد. با درایههای یک میسازد. دستور eye(,m) یک ماتریس m با درایههای صفر و قطر اصلی یک میسازد. دستور rad(,m) یک ماتریس m با درایههای تصادفی در بازه صفر و یک میسازد. - حذف یک سطر یا ستون ماتریس >> A(,:) = [] برای حذف سطر دوم ماتریس A از دستور زیر استفاده میشود: بطور مشابه دستور [] = (,:)A ستون دوم ماتریس A را حذف خواهد نمود. - دیگر دستورات پرکاربرد دستور det(a) دترمینان ماتریس A و دستور iv(a) معکوس این ماتریس را محاسبه خواهد نمود. - متغیرها >> a1 = 50; >> a = 'k'; >> a3 = 'I am studet'; انواع متغیرها در متلب عبارتند از: - اعداد >> a1 = 100; >> a =.3e3; >> a3 = 1+j; >> a4 = 1+i; انواع اعداد در متلب عبارتند از: 4
- عملگرها دستور A*B عمل ضرب دو ماتریس A و B را انجام میدهد البته باید قاعده ضرب ماتریسها برقرار باشد. برای ضرب نظیر به نظیر درایههای دو ماتریس )ضرب نقطهای( از دستور A.*B استفاده نمایید. همچنین اگر درایههای ماتریس A اعداد مختلط باشند دستور 'A عالوه بر ترانهاده کردن ماتریس A درایههای این ماتریس را نیز مزدوج میکند. برای جلوگیری از مزدوجشدن درایهها از دستور '.A استفاده نمایید. - توابع در متلب برای نمایش کلیه توابع متلب از دستور help elfu استفاده کنید. دستور si() سینوس عدد را نمایش میدهد. البته توجه نمایید که پیشفرض متلب ))رادیان(( بوده و عدد را بصورت رادیان درنظر میگیرد. برای واردکردن اعداد بصورت رادیان باید از نماد π استفاده نمود. این نماد در متلب بصورت pi تعریف شده است. مثال برای محاسبه سینوس 31 درجه از دستور si(pi/6) استفاده میشود. راه دیگر استفاده از دستور sid() است که عدد را برحسب درجه درنظر میگیرد. برخی توابع پرکاربرد در متلب عبارتند از: کاربرد نام تابع si sid asi sih asih cos cosd acos cosh acosh ta tad ata tah توابع مثلثاتی: سینوس بر حسب رادیان سینوس بر حسب درجه معکوس سینوس سینوس هایپربولیک معکوس سینوس هایپربولیک کسینوس بر حسب رادیان کسینوس بر حسب درجه معکوس کسینوس کسینوس هایپربولیک معکوس کسینوس هایپربولیک تانژانت بر حسب رادیان تانژانت بر حسب درجه معکوس تانژانت تانژانت هایپربولیک 5
atah cot cotd acot coth acoth sec csc exp() log log10 log pow() sqrt() abs() agle() complex(,m) coj() imag() real() roud() fix() floor() ceil() معکوس تانژانت هایپربولیک کتانژانت بر حسب رادیان کتانژانت بر حسب درجه معکوس کتانژانت کتانژانت هایپربولیک معکوس کتانژانت هایپربولیک سکانت کسکانت توابع نمایی: e محاسبه لگاریتم در پایه e لگاریتم در پایه 11 لگاریتم در پایه محاسبه )L )تابع محاسبه جذر توابع مختلط: محاسبه اندازه عدد مختلط محاسبه زاویه عدد مختلط ایجاد عدد مختلط + j m محاسبه مزدوج عدد مختلط بر حسب رادیان محاسبه قسمت موهومی عدد مختلط محاسبه قسمت حقیقی عدد مختلط توابع گردکردن: گردکردن عدد گردکردن عدد گردکردن عدد گردکردن عدد به سمت نزدیکترین عدد صحیح به سمت صفر به سمت منفی بینهایت به سمت مثبت بینهایت تابع نکته: abs() درصورتیکه یک عدد حقیقی باشد نقش قدرمطلق را انجام میدهد. همچنین برای محاسبه از دستور A^(m/) استفاده نمایید. m A 6
نکته: تبدیل دکارتی به قطبی با استفاده از دستور( cartpol(real,image و تبدیل قطبی به دکارتی نیز با استفاده از دستور( polcart(agle,absolute مثال: صورت میگیرد. دقت نمایید که زاویه در این دستورات برحسب رادیان است. برای >> [agle,absolute]=cartpol(3,4) agle = 0.973 absolute = 5 >> [real,image]=polcart(0.973,5) real = 3.0000 imag = 4.0000 - چند جملهایها در متلب نرمافزار متلب دارای چندین دستور ساده برای کار با چندجملهایهاست که اساس کار این توابع بردارهاست. میتوانید با تایپ دستور help polyfu این توابع را مشاهده نمایید. چند جملهایها بصورت یک ماتریس سطری و با ضرایب خود تعریف میشوند. 3 f ( x) 9x 5x 3x 7 >> f = [9-5 3 7]; دقت کنید درصورتیکه یکی از توانهای x )مثال x( موجود نبود بجای ضریب آن در ماتریس عدد صفر را قرار میدهیم. برای جمع دو چند جملهای باید مرتبه آنها برابر باشد: g( x) 6x >> g = [6 - ]; x 7
همانگونه که مشاهده میکنید درجه f از مرتبه 3 ولی درجه g از مرتبه است. بنابراین برای جمع دو چند جملهای باید مرتبه هر دو یکی شود. اینکار با اضافهکردن یک صفر بجای ضریب x 3 در g صورت میگیرد: >> g1 = [0 g]; >> h = f + g1; برای ضرب و تقسیم دو چند جملهای دیگر نیازی نیست مرتبه آنها یکی باشد: 3 f ( x) g( x) (9x 5x 3x 7)(6x x ) >> p = cov(f,g) f ( x) 9x g( x) 3 5x 6x 3x 7 x >> [a b] = decov(f,g) همانگونه که مشاهده میکنید برای اینکه خارج قسمت و باقیمانده تقسیم دو چندجملهای را داشته باشیم بایستی حاصل تقسیم را در یک ماتریس سطری دو ستونه بریزیم. برای محاسبه مقدار چند جملهای f در نقطه a از دستور polyval(f,a) استفاده میکنیم که a یک عدد است. برای محاسبه ریشههای چند جملهای f از دستور roots(f) استفاده مینماییم. برای بدستآوردن یک چند جملهای از روی ریشههای آن ابتدا باید آن ریشهها را در یک ماتریس ستونی قرار داده و سپس از دستور poly استفاده کنیم: >> r = [1;.3;-0.8;4]; >> poly(r) - حل دستگاه معادله مجهولی یکی دیگر از کاربردهای ماتریسها حل دستگاه معادالت است. دستگاه زیر را درنظر بگیرید: 3x1 5x x3 10 x1 x x3 x x 3x 6 1 3 8
میتوان معادله را با ماتریسهای زیر مشخص نمود: 3 5 A 1 1 1 x1 X x x3 10 B 6 1 3 ماتریس ضرایب: ماتریس مجهوالت: ماتریس جوابها: ماتریسهای A و B را وارد کرده و با یکی از دو دستور زیر ماتریس مجهوالت )X( بدست خواهد آمد: >> X = iv(a)*b >> X = A\B - نحوه نمایش اعداد در متلب پیشفرض متلب برای نمایش اعداد چهار رقم اعشار میباشد. برای تغییر آن از منوی File گزینه Prefereces را انتخاب نموده و در قسمت Commad Widow منوی کشویی Numeric format را باز کنید. حال میتوانید یکی از گزینهها را انتخاب نمایید. راه دیگر استفاده از دستور format میباشد یعنی نحوه نمایش دلخواه را پس از دستور format تایپ نمایید. برای مثال برای نمایش اعداد تا 16 رقم اعشار از دستور format log استفاده میشود. در جدول زیر فرمتهای مختلف نمایش اعداد بیان شده است. مفهوم آن در متلب نمایش اعداد با چهار رقم اعشار نمایش اعداد با شانزده رقم اعشار پنج رقم )چهار رقم اعشار( 03+1.37e 16 رقم )15 رقم اعشار( دو رقم اعشار اعداد بصورت مثبت منفی یا صفر نمایش داده میشوند اعداد بصورت کسری نمایش داده میشوند دستور format short format log format short e format log e format bak format + format rat 9
- رسم توابع در متلب این دستور براساس آرگومانهای ورودیاش توابع مختلف را رسم میکند. اگر این دستور بصورت تک آرگومانی مورد استفاده قرار گیرد و متغیر حقیقی باشد آنرا بر حسب اندیسش )شماره ستون درایههای آن متغیر در )Workspace رسم میکند و اگر متغیر موهومی باشد قسمت حقیقی برحسب قسمت موهومی رسم میگردد: >> y = :0.3:10; >> plot(y) >> z = 0.1+0.9i; >> = [0:0.01:10]; >> plot(z.^) اگر از این دستور بصورت دو آرگومانی استفاده شود آرگومان دوم را برحسب آرگومان اول رسم مینماید: >> x = 0:pi/100:*pi; >> y = si(x); >> plot(x,y) همچنین میتوان بدون تعریف متغیر واسط y و بطور مستقیم تابع را در دستور plot صورت تغییر x دیگر نیازی به تعریف مجدد y نمیباشد: وارد نمود. در این حالت در >> plot(x,si(x)) - چند تکنیک در دستور plot با دستورات ylabel xlabel و title میتوان توضیحاتی به محور x محور y و عنوان نمودار اضافه نمود: >> xlabel('x=0:\pi') >> ylabel('si(x)') >> title('y=si(x)') >> plot(x,si(x),x,cos(x)) برای رسم همزمان چند تابع بصورت زیر عمل مینماییم: 11
>> leg('si(x)','cos(x)') برای نمایش اطالعات بر روی نمودار از دستور leg استفاده میگردد: برای رسم همزمان همچنین میتوان از دستورات hold o و hold off استفاده نمود. دستور hold o شکل قبلی را حفظ کرده و شکل جدید را بر روی شکل قبلی رسم میکند. دستور hold off تمامی شکلهای قبلی را حذف کرده و شکل جدید را به تنهایی رسم مینماید: >> plot(x,si(x)) >> hold o >> plot(x,cos(x)) >> hold off >> plot(x,*si(x+)) دستور figure باعث بازشدن یک شکل جدید میشود. یعنی شکل قبلی در پنجره خود حفظ شده و یک پنجره جدید باز میشود و شکل جدید در پنجره جدید رسم میگردد. با استفاده از دستور subplot(a,b,) میتوان چند نمودار را در یک پنجره و بصورت مجزا نشان داد که b a و هر سه عدد هستند. a تعداد شکلها در راستای عمودی )تعداد سطر( b تعداد شکلها در راستای افقی )تعداد ستون( و شماره شکل موردنظر است. شکلها به ترتیب سطر )سطر اول سطر دوم و...( و از چپ به راست شمارهگذاری میشوند: >> subplot(,,1) >> plot(x,si(x)) >> subplot(,,) >> plot(x,cos(x)) >> subplot(,,3) >> plot(x,*si(x)) >> subplot(,,4) >> plot(x,cos(x-)) دستور axis برای تعیین محدوده محورهای افقی و عمودی بکار میرود. شکل کلی دستور بصورت ymax]) axis([xmi xmax ymi میباشد: >> plot(x,si(x)) >> axis([0 *pi -1.5 1.5]) 11
از دستور gird برای مشبککردن نمودار استفاده میشود. دستور text(m,,'matlab') کلمه matlab را در مختصات (m,) قرار میدهد: >> plot(x,si(x)) >> text(,0,'made by matlab') برای مشخصکردن نوع خط و رنگ نمودار از شکل کلی دستور plot استفاده میکنیم: plot(x,y,'color_style_marker') که color رنگ نمودار و style و marker نوع خط نمودار را بصورت زیر مشخص میکنند: حروف w b g r y m c و k به ترتیب مطابق با رنگهای آبی متمایل به سبز قرمز متمایل به صورتی زرد قرمز سبز آبی سفید و سیاه میباشند. برای خط توپر از ))-(( برای خط تیره از )):(( و برای خط نقطهچین از )).-(( استفاده میشود. برای نمایش نمودار با ))+(( ))o(( ))*(( و ))x(( از همین عالئم استفاده میشود. برای نمایش مربع لوزی پنج ضلعی شش ضلعی بر روی نمودار به ترتیب از حروف p d s و h استفاده میگردد. برای نمایش مثلث بر روی نمودار از ))>(( ))<(( و ))^(( استفاده میشود که این عالئم جهت رأس مثلث را نشان میدهند. >> plot(x,si(x),'r') >> plot(x,cos(x),'g:^) >> plot(x,*si(x+5),'-.d') مثال: دستور زیر را وارد نموده و نتیجه را مشاهده نمایید: >> x = 0:pi/100:*pi; >> plot(x,si(x),'r',x,si(x-*pi/3),'g:',x,si(x+*pi/3),'y-.') >> leg('va','vb','vc') توجه: برای اعمال دستورات grid axis leg title ylabel xlabel و text به صورتهای بیانشده باید نمودار از قبل رسم شده و باز باشد. 1
- رسم نمودار قطبی رسم نمودارهای قطبی نیز مشابه نمودارهای دکارتی بوده و تنها از دستور polar بجای plot استفاده میکنیم. r 0 1 0.5cos( ) >> th = 0:0.1:*pi; >> r =./(1-0.5*cos(th)); >> polar(th,r) - رسم نمودارهای سهبعدی برای رسم توابع سهبعدی از دستور plot3 استفاده میگردد. x t y si( t) z cos( t) >> t = 0:pi/100:*pi; >> plot3(t,si(t),cos(t)) مثال: دستور زیر را وارد نموده و نتیجه را مشاهده نمایید. >> t = 0:pi/100:50*pi; >> plot3(si(t),cos(t),t) - رسم توابع دو متغیره در متلب xyz تابع f(x,y) z = نشاندهنده سطحی است که در محورهای رسم شده است. فرض کنید میخواهیم تابع زیر را رسم کنیم: [( x y ) y ] z xe x y 13
meshgrid برای رسم این سطح ابتدا باید مجموعه نقاطی در صفحه ایجاد کنیم. اینکار با استفاده از تابع انجام میشود: >> [x y] = meshgrid(x,y); برای رسم تابع دو متغیره از دستور mesh استفاده میگردد: >> z = x.*exp(-((x-y.^).^+y.^)); >> mesh(x,y,z) توجه: به کاربرد عملگر نقطه در تعریف تابع باال توجه نمایید. برای رسم توابع دو متغیره از دستورهای دیگری نیز میتوان استفاده نمود: دستور cotour(x,y,z) پستی و بلندیهای تابع را نمایش میدهد )کاربرد در نقشهبرداری(. دستور cotour3(x,y,z) پستی و بلندیهای تابع را بصورت سه بعدی نمایش میدهد. دستور surf(x,y,z) همانند دستور mesh است با این تفاوت که سطح را سایه میزند. از دستورات meshc(x,y,z) meshz(x,y,z) و waterfall(x,y,z) نیز برای رسم توابع دو متغیره استفاده میشود. - نمودار میلهای برای رسم نمودار میلهای از دستور bar استفاده میشود. اگر بصورت یک بعدی استفاده شود متغیر را بر حسب اندیسش رسم میکند و اگر بصورت دو آرگومانی استفاده شود متغیر دوم را بر حسب متغیر اول رسم میکند. >> a = [3 9 6 10]; >> bar(a) >> a = [3 9 6;10 5 3;9 5 7]; >> b = [1388 1389 1390]; >> bar(b,a) برای رسم نمودار میلهای سهبعدی از دستور bar3 میشود: و برای رسم این نمودار بصورت افقی از دستور barh استفاده >> a = [3 9 6;10 5 3;9 5 7]; >> b = [1388 1389 1390]; >> bar3(b,a) >> barh(b,a) 14
- نمودار دایرهای برای رسم نمودار دایرهای از دستور pie استفاده میشود: >> q = [3 9 15 5]; >> pie(q) برای اینکه قسمتهای مختلف از هم جدا شوند از متغیر دوم استفاده میکنیم. اندازه متغیر دوم با متغیر اول برابر بوده و هر قسمت را که بخواهیم از بقیه جدا نشان داده شود درایهاش را غیرصفر قرار میدهیم: >> q = [3 9 15 5]; >> h = [0 1 0 0 1]; >> pie(q,h) برای رسم نمودار دایرهای سهبعدی از دستور pie3 استفاده میشود: >> q = [3 9 15 5]; >> h = [0 1 0 0 1]; >> pie3(q,h) - رسم کره و بیضی برای رسم کره از دستور sphere یا sphere() استفاده میشود که در آن تعداد قسمتهای تشکیلدهنده شکل است. برای رسم بیضی از دستور ellipsoid استفاده میگردد. معادله بیضی بصورت زیر است: x x y y z z c xr c yr c zr 0 که مرکز بیضی و [r x] r,y r,z شعاع بیضی در راستای محورهای مختلف است. دستور [x c,y c,z c] یک بیضی با مرکز و شعاع مشخصشده و متشکل از قسمت رسم میکند. برای ellipsoid(xc,yc,zc,xr,yr,zr,) مثال: [x, y, z] = ellipsoid(0,0,0,6,4,4,30); surfl(x, y, z) colormap witer axis equal 15
- آشنایی مقدماتی با دستورات مهندسی کنترل کمک میگیریم. برای مثال برای S 0. 1S 7. 5 G( s) 4 3 S 0. 1S 9S برای ساختن تابع تبدیل از مفهوم چندجملهایها استفاده کرده و از دستور tf ساختن تابع تبدیل زیر بصورت نشان داده شده عمل میکنیم: >> G = tf([1 0.1 7.5],[1 0.1 9 0 0]); yquist(g) برای رسم نمودار بود از دستور bode(g) نمودار نایکوئیست از دستور و برای رسم مکان هندسی از دستور rlocus(g) استفاده میشود. برای ایجاد ترکیب سری توابع تبدیل از دستور series استفاده میشود: >> sys = series(sys1,sys) برای ایجاد فیدبک از دستور feedback استفاده میگردد: >> sys = feedback(sys1,sys) >> sys = feedback(sys1,sys,+1) از 1+ در خط دوم برای ایجاد فیدبک مثبت استفاده شده است. برای رسم پاسخ پله از دستور step و برای رسم پاسخ ضربه از دستور impulse استفاده میشود: >> G = tf([1 0.1 7.5],[1 0.1 9 0 0]); >> sys=feedback(g,1); >> subplot(,1,1) >> step(sys) >> subplot(,1,) >> impulse(sys) 16
- آشنایی با متغیرها و توابع پیشرفته ریاضی برای تعریف متغیر از تابع sym به دو صورت زیر استفاده مینماییم: >> syms x y z a >> x = sym('x'); >> y = sym('y'); - روش اول: - روش دوم: در مبحث اعداد مختلط اگر متغیرها بصورت باال تعریف شوند متلب آنها را به عنوان اعداد مختلط درنظر گرفته و درنهایت عدد مختلط تشکیلشده از آنها را به عنوان عدد مختلط نمیشناسد. برای رفع این مشکل به یکی از دو روش زیر عمل میکنیم: >> syms x y real >> x = sym('x','real') >> y = sym('y','real') >> syms x y >> f = x+i*y; >> coj(f) >> syms x y real >> f = x+i*y; >> coj(f) - روش اول: - روش دوم: - چند مثال: >> syms x >> f = (cos(x))^+(si(x))^; >> simplify(f) >> syms x >> besselj(1/,x) >> pretty(as) دستور simplify یک عبارت ریاضی را در صورت امکان ساده میکند. 17
دستور pretty خروجی را بصورت استاندارد ریاضی نمایش داده و تابع besselj )بسل( تنها به عنوان یک مثال برای نشاندادن کاربرد دستور pretty استفاده شده است. - مشتق شکل کلی این دستور بصورت زیر میباشد: d f du diff ( f, u, ) >> syms x a >> f = si(a*x); >> diff(f) همانگونه که در مثال باال مشاهده میشود مشتقگیری بر حسب متغیر x صورت گرفته است. مبنای تعیین اولویت متغیرها در متلب بدین صورت است که ابتدا متغیر x درنظر گرفته میشود. اگر x وجود نداشت متغیری که به x نزدیکتر است لحاظ شده و اگر فاصله از دو طرف x یکسان بود مبنا ترتیب حروف الفباست. این قانون در متلب کلی است. برای تعیین متغیری که میخواهیم بر حسب آن مشتق گرفته شود از آرگومان دوم و برای تعیین مرتبه مشتق از آرگومان سوم استفاده میشود. برای مثال برای محاسبه مشتق سوم تابع باال بر حسب a از دستور زیر استفاده مینماییم: >> diff(f,a,3) - حد شکل کلی این دستور بصورت زیر میباشد: Lim xa f ( x) limit( f, x, a,' right') >> syms x h >> limit(si(x),x,pi/) >> limit((1+h/x)^x,x,if) >> limit(1/x,x,0) >> limit(1/x,x,0,'right') >> limit(1/x,x,0,'left') 18
بایستی خاطر نشان کرد که در متلب if نماد ))بینهایت(( و NaN نماد ))تعریف نشده(( است. از عبارتهای right و left برای محاسبه حد راست و چپ استفاده میشود. - انتگرال شکل کلی این دستور بصورت زیر میباشد: b f ( x) dx it( f, x, a, b) a >> syms x a b >> it(si(x)) >> it(cos(x),x,0,*pi) >> it(x^,) >> it(si(x),x,a,b) - سیگما شکل کلی این دستور بصورت زیر میباشد: b a f ( ) symsum( f,, a, b) >> syms x >> symsum(1/x^,x,1,if) - بسط و تجزیه یک تابع برای بسط یک تابع از دستور expad و برای تجزیه یک تابع به عبارتهای با درجه کمتر از دستور factor استفاده مینماییم: >> syms x y >> expad(si(x+y)) >> factor(x^-1) - حل معادالت یک مجهولی >> syms a b c x y برای حل معادالت یک مجهولی از دستور solve استفاده میکنیم. 19
>> s = a*x^+b*y+c; >> solve(s) برای تعیین متغیری که میخواهیم براساس آن حل صورت پذیرد از آرگومان دوم استفاده میکنیم: >> solve(s,c) >> solve(s,b) اگر معادله ما بصورت f(x)=g(x) بود بصورت زیر عمل میکنیم: >> syms x >> solve('cos(*x)+si(x)=1') >> solve('6*x^3+*x^=*x+1') همانگونه که در خروجی متلب برای دستور آخر مشاهده میشود جواب بصورت واضح نمایش داده نشده است. در اینچنین مواقع از دستور double استفاده نمایید: >> solve('6*x^3+*x^=*x+1') >> double(as) برای نمایش یک عدد با تعداد رقم دلخواه از دستور vpa اعشار بدین صورت عمل میکنیم: استفاده مینماییم. مثال برای نمایش عدد π با 51 رقم >> vpa(pi,50) - حل معادالت چند مجهولی برای حل دستگاه معادالت بصورت زیر عمل مینماییم. فرض کنید دستگاه معادالت زیر را داریم: xy 0 y x a >> syms x y a >> [x y] = solve('x*y^=0','x-y/=a') برای حل بصورت زیر عمل میکنیم: 1
- حل معادالت دیفرانسیل برای حل معادالت دیفرانسیل از دستور dsolve و برای تعریف اپراتور مشتق از عبارت D استفاده میکنیم. y 1 y >> syms y >> dsolve('dy=1+y^') برای تعیین شرایط اولیه و بدستآوردن جواب خصوصی معادله دیفرانسیل از آرگومان دوم استفاده میکنیم: >> dsolve('dy=1+y^','y(0)=1') - مثال d y cos(x) y dx, y(0) 1, dy (0) 0 dx >> syms x y >> dsolve('dy=cos(*x)-y','y(0)=1','dy(0)=0') همانطور که مشاهده میکنید چون متغیری را تعیین نکردیم متلب فرض میکند که y تابعی از t بوده و معادله را بر این اساس حل میکند در صورتی که در این مثال مشتق بر حسب x بوده و این جواب اشتباه است. برای رفع این مشکل متغیر x را به عنوان آرگومان آخر وارد میکنیم: >> dsolve('dy=cos(*x)-y','y(0)=1','dy(0)=0','x') برای حل دستگاه معادالت دیفرانسیل نیز بصورت زیر عمل میکنیم: >> syms f g >> [f g] = dsolve('df=3*f+4*g','dg=-4*f+3*g') - تبدیل فوریه و عکس آن برای تبدیل فوریه از دستور fourier و برای عکس تبدیل فوریه از دستور ifourier استفاده مینماییم. >> syms x >> f = exp(-x^); >> fourier(f) 1
>> syms w >> f = si(w)/w; >> ifourier(f) متغیر w در خروجی این دستور نماد ω در تبدیل فوریه است. - تبدیل الپالس و عکس آن برای تبدیل الپالس از دستور laplace و برای عکس تبدیل الپالس از دستور ilaplace استفاده مینماییم. >> syms t >> f = t^4; >> laplace(f) >> syms s a >> f = 1/(s-a)^; >> ilaplace(f) متغیر s در خروجی این دستور نماد متغیر تبدیل الپالس میباشد. - رسم نمودار >> syms x >> ezplot(si(x)) برای رسم نمودارهای دو بعدی از دستور ezplot استفاده مینماییم: برای تعیین محدوده رسم شکل از آرگومان دوم بصورت زیر استفاده میکنیم: >> ezplot(si(x),[-5*pi 10*pi]) ezplot('f(x)=f(y)') ezplot(f(x)-f(y)) از این دستور میتوان برای رسم نمودارهای f(x)=f(y) نیز به دو صورت و استفاده نمود: si( x ) cos( y) >> syms x y >> ezplot(si(x^)-cos(y)) >> ezplot('si(x^)=cos(y)')
برای رسم نمودارهای سه بعدی نیز از دستور ezsurf استفاده میکنیم: z x y >> syms x y >> ezsurf(x^+y^) - برنامهنویسی با متلب File > New > M File برای نوشتن برنامهها از محیط M فایل استفاده میکنیم. این محیط از طریق منوی قابل دسترسی است. - حلقه for این حلقه باعث اجرای قسمتی از برنامه به تعداد معین میشود. هنگامی از این دستور استفاده میکنیم که بدانیم حلقه چند بار میخواهد تکرار شود. شکل کلی این دستور به صورت زیر میباشد: for شمارنده دستورات مثالهای زیر را در محیط M فایل نوشته و اجرا نمایید تا با مفهوم این دستور بیشتر آشنا گردید. clc clear all a=zeros(5); for i=1:5 a(i,1)=1; a(i,3)=3; a(i,5)=5; a clc clear all v=rad(10,1) =legth(v); for i=1:/ v(i)=100; for i=/+1: v(i)=0; v' 3
clc a=zeros(5); for i=1:5 for j=1:5 a(i,j)=j; a tic for i=0:pi/100:*pi plot(i,si(i),'--rs','liewidth',,... 'MarkerEdgeColor','k',... 'MarkerFaceColor','g',... 'MarkerSize',10) hold o pause(0.1) toc نکته: از دستور pause برای ایجاد وقفه در اجرای دستور استفاده میشود. از عبارتهای tic و toc برای تعیین مدت زمان اجرای دستورات استفاده میگردد. کافی است عبارت میخواهید مدت زمان اجرای آن قسمت را مشاهده نمایید قرار دهید. tic را در ابتدا و عبارت toc را در انتهای قسمتی که - حلقه while اگر قبل از اجرای برنامه ندانید که حلقه باید چند بار تکرار شود از حلقه while استفاده میکنیم. شکل کلی این دستور به صورت زیر میباشد: while عبارت دستورات حلقه while تا زمانی تکرار میگردد که عبارت مربوط به آن نقض شود. عبارتهای مقایسهای عبارتند از: عبارت مساوی نامساوی کوچکتر بزرگتر کوچکتر مساوی بزرگتر مساوی نماد == ~= < > <= >= 4
مثالهای زیر را در محیط M فایل نوشته و اجرا نمایید تا با مفهوم این دستور بیشتر آشنا گردید. clc x=0; while x~=5 x=iput('eter a Number='); clc q='y'; while q~='' i=iput('eter a Number='); x=i*i; q=iput('do you wat to cotiue y/:','s'); disp('program fiished') - دستور if مهمترین دستور شرطی در متلب دستور if است. شکل کلی این دستور به دو صورت زیر میباشد: if شرط دستورات if elseif else شرط دستورات شرط دستورات دستورات مثالهای زیر را در محیط M فایل نوشته و اجرا نمایید تا با مفهوم این دستور بیشتر آشنا گردید. clc clear all for i=1:10 if i<=5 v(i)=0; else v(i)=1; v' 5
clc clear all for i=1:10 a(i)=i; if i<=5 b(i)=i*; else b(i)=i*5; [a' b'] clc clear all x=iput('please eter a umber:'); if x>100 disp('the umber is greater tha 100') else disp('the umber is less tha 100') برنامهای بنویسید که حروف y و d را تشخیص دهد: ch=iput('please eter a character','s'); if ch=='' disp('character is ') elseif ch=='y' disp('character is y') elseif ch=='d' disp('character is d') else disp('character is ot,y,d'); نکته: دستور legth طول یک بردار یعنی تعداد درایههای یک ماتریس تک ستونی یا تک سطری را نشان میدهد. دستور max دو خروجی دارد که خروجی اول ماکزیمم عدد موجود در بردار ورودی دستور و خروجی دوم آن شماره درایه متناظر با این مقدار ماکزیمم میباشد: clc clear all v=rad(15,1) =legth(v) [a b]=max(v) 6
- تعریف تابع در متلب این تکنیک را با دو مثال توضیح میدهیم. فرض کنید میخواهیم تابعی تعریف کنیم که دو ورودی و دو خروجی دارد. بعنوان مثال مقدار دو مقاومت را به عنوان ورودی دریافت و حاصل سری و موازی آنها را بعنوان خروجی برگرداند. fuctio [RS RP]=calc(R1,R); RS=R1+R; G=1/R1+1/R; RP=1/G; همانگونه که مشاهده میکنید RS و RP خروجیها و R1 و R ورودیهای تابعی به نام calc )اسم اختیاری( هستند. در خطوط بعد ارتباط بین ورودیها و خروجیها را تعریف مینماییم. سپس باید M فایل را با نام تابع تعریفشده ذخیره نمایید. حال میتوانید از این دستور استفاده کنید. یک M فایل جدید باز کرده و دستور زیر را در آن بنویسید )توجه نمایید که محل ذخیرهسازی هر دو M فایل در یک پوشه باشد(: clc a=iput('r1='); b=iput('r='); [series parallel]=calc(a,b) بعنوان مثالی دیگر فرض کنید میخواهیم تابعی تعریف کنیم که لگاریتم را در هر پایهای حساب نماید. واضح است که این تابع به دو ورودی برای خود عدد و پایه آن و یک خروجی برای مقدار لگاریتم نیاز دارد: fuctio A=logarithm(a,b); A=log(a)/log(b); clc d=iput('number='); e=iput('base='); Result=logarithm(d,e) حال برنامه زیر را در یک M فایل جدید نوشته و اجرا نمایید: 7
پیوست: فهرست نمادها و نحوه واردکردن آنها در شکلهای متلب منابع: رضا داژ و محمد آیت نرم افزار MATLAB 6.1 مؤسسه فرهنگی هنری دیباگران تهران چاپ دوم 1383. [] The Mathwork Ic., Gettig Started with MATLAB 6. ]1[ 8