آموزش نرم افزار MATLAB

Σχετικά έγγραφα
محاسبه ی برآیند بردارها به روش تحلیلی

روش محاسبه ی توان منابع جریان و منابع ولتاژ

مثال( مساله الپالس در ناحیه داده شده را حل کنید. u(x,0)=f(x) f(x) حل: به کمک جداسازی متغیرها: ثابت = k. u(x,y)=x(x)y(y) X"Y=-XY" X" X" kx = 0

تحلیل مدار به روش جریان حلقه

مفاهیم ولتاژ افت ولتاژ و اختالف پتانسیل

قاعده زنجیره ای برای مشتقات جزي ی (حالت اول) :

سايت ويژه رياضيات درسنامه ها و جزوه هاي دروس رياضيات

ﯽﺳﻮﻃ ﺮﯿﺼﻧ ﻪﺟاﻮﺧ ﯽﺘﻌﻨﺻ هﺎﮕﺸﻧاد

تصاویر استریوگرافی.

جلسه ی ۱۰: الگوریتم مرتب سازی سریع

مدار معادل تونن و نورتن

جلسه 9 1 مدل جعبه-سیاه یا جستاري. 2 الگوریتم جستجوي Grover 1.2 مسا له 2.2 مقدمات محاسبات کوانتمی (22671) ترم بهار

جلسه 3 ابتدا نکته اي در مورد عمل توابع بر روي ماتریس ها گفته می شود و در ادامه ي این جلسه اصول مکانیک کوانتمی بیان. d 1. i=0. i=0. λ 2 i v i v i.

فصل پنجم زبان های فارغ از متن

تمرینات درس ریاض عموم ٢. r(t) = (a cos t, b sin t), ٠ t ٢π. cos ٢ t sin tdt = ka۴. x = ١ ka ۴. m ٣ = ٢a. κds باشد. حاصل x٢

سلسله مزاتب سبان مقدمه فصل : زبان های فارغ از متن زبان های منظم

همبستگی و رگرسیون در این مبحث هدف بررسی وجود یک رابطه بین دو یا چند متغیر می باشد لذا هدف اصلی این است که آیا بین

آزمایش 8: تقویت کننده عملیاتی 2

1) { } 6) {, } {{, }} 2) {{ }} 7 ) { } 3) { } { } 8) { } 4) {{, }} 9) { } { }

جلسه ی ۲۴: ماشین تورینگ

فصل اول هدف های رفتاری: پس از پایان این فصل از هنرجو انتظار می رود: 5 روش های اجرای دستور را توضیح دهد. 6 نوارهای ابزار را توصیف کند.

تخمین با معیار مربع خطا: حالت صفر: X: مکان هواپیما بدون مشاهده X را تخمین بزنیم. بهترین تخمین مقداری است که متوسط مربع خطا مینیمم باشد:

جلسه ی ۴: تحلیل مجانبی الگوریتم ها

جلسه 14 را نیز تعریف کرد. عملگري که به دنبال آن هستیم باید ماتریس چگالی مربوط به یک توزیع را به ماتریس چگالی مربوط به توزیع حاشیه اي آن ببرد.

جلسه 2 1 فضاي برداري محاسبات کوانتمی (22671) ترم بهار

فصل چهارم : مولتی ویبراتورهای ترانزیستوری مقدمه: فیدبک مثبت

هو الحق دانشکده ي مهندسی کامپیوتر جلسه هفتم

دانشکده ی علوم ریاضی جلسه ی ۵: چند مثال

جلسه ی ۵: حل روابط بازگشتی

هندسه تحلیلی بردارها در فضای R

آموزش SPSS مقدماتی و پیشرفته مدیریت آمار و فناوری اطالعات -

آزمون مقایسه میانگین های دو جامعه )نمونه های بزرگ(

فعالیت = ) ( )10 6 ( 8 = )-4( 3 * )-5( 3 = ) ( ) ( )-36( = m n m+ m n. m m m. m n mn

جلسه 12 به صورت دنباله اي از,0 1 نمایش داده شده اند در حین محاسبه ممکن است با خطا مواجه شده و یکی از بیت هاي آن. p 1

بسم اهلل الرحمن الرحیم آزمایشگاه فیزیک )2( shimiomd

جلسه ی ۳: نزدیک ترین زوج نقاط

تئوری جامع ماشین بخش سوم جهت سادگی بحث یک ماشین سنکرون دو قطبی از نوع قطب برجسته مطالعه میشود.

دکتر عباس روحانی دانشکده کشاورزی دانشگاه صنعتی شاهرود

جلسه 2 جهت تعریف یک فضاي برداري نیازمند یک میدان 2 هستیم. یک میدان مجموعه اي از اعداد یا اسکالر ها به همراه اعمال

جلسه 15 1 اثر و اثر جزي ی نظریه ي اطلاعات کوانتومی 1 ترم پاي یز جدایی پذیر باشد یعنی:

جزوه کارگاه برنامه نویسی

معادلهی مشخصه(کمکی) آن است. در اینجا سه وضعیت متفاوت برای ریشههای معادله مشخصه رخ میدهد:

فهرست جزوه ی فصل دوم مدارهای الکتریکی ( بردارها(

ویرایشسال 95 شیمیمعدنی تقارن رضافالحتی

شبکه های عصبی در کنترل

پنج ره: Command History

جلسه 22 1 نامساویهایی در مورد اثر ماتریس ها تي وري اطلاعات کوانتومی ترم پاییز

Spacecraft thermal control handbook. Space mission analysis and design. Cubesat, Thermal control system

Angle Resolved Photoemission Spectroscopy (ARPES)

جلسه ی ۱۸: درهم سازی سرتاسری - درخت جست و جوی دودویی

به نام خدا قابل استفاده برای کلیه دانشجویان مهندسی و علوم پایه مدرس: هوشمند عزیزی

فصل 5 :اصل گسترش و اعداد فازی

جلسه 16 نظریه اطلاعات کوانتمی 1 ترم پاییز

فصل دهم: همبستگی و رگرسیون

آزمایش 1: پاسخ فرکانسی تقویتکننده امیتر مشترك

مسائل. 2 = (20)2 (1.96) 2 (5) 2 = 61.5 بنابراین اندازه ی نمونه الزم باید حداقل 62=n باشد.

باشند و c عددی ثابت باشد آنگاه تابع های زیر نیز در a پیوسته اند. به شرطی که g(a) 0 f g

هد ف های هفته ششم: 1- اجسام متحرک و ساکن را از هم تشخیص دهد. 2- اندازه مسافت و جا به جایی اجسام متحرک را محاسبه و آن ها را مقایسه کند 3- تندی متوسط

هدف از این آزمایش آشنایی با رفتار فرکانسی مدارهاي مرتبه اول نحوه تأثیر مقادیر عناصر در این رفتار مشاهده پاسخ دامنه

فصل چهارم تعیین موقعیت و امتدادهای مبنا

Top Down Parsing LL(1) Narges S. Bathaeian

فهرست مطالب جزوه ی فصل اول مدارهای الکتریکی مفاهیم ولتاژ افت ولتاژ و اختالف پتانسیل تحلیل مدار به روش جریان حلقه... 22

دبیرستان غیر دولتی موحد

شاخصهای پراکندگی دامنهی تغییرات:

نویسنده: محمدرضا تیموری محمد نصری مدرس: دکتر پرورش خالصۀ موضوع درس سیستم های مینیمم فاز: به نام خدا

به نام ستاره آفرین قضیه ویریال جنبشی کل ذرات یک سیستم پایدار مقید به نیرو های پایستار را به متوسط انرژی پتانسیل کل شان

تمرین اول درس کامپایلر


به نام خدا دانشگاه آزاد اسالمی واحد نجفآباد دانشکده مهندسی برق نرم افزار MATLAB مدرس: ایمان صادقخانی

جلسه دوم سوم چهارم: مقدمه اي بر نظریه میدان

دانشکده علوم ریاضی دانشگاه گیلان آزمون پایان ترم درس: هندسه منیفلد 1 باشد. دهید.f (gx) = (gof 1 )f X شده باشند سوالات بخش میان ترم

:موس لصف یسدنه یاه لکش رد یلوط طباور

تلفات خط انتقال ابررسی یک شبکة قدرت با 2 به شبکة شکل زیر توجه کنید. ژنراتور فرضیات شبکه: میباشد. تلفات خط انتقال با مربع توان انتقالی متناسب

مینامند یا میگویند α یک صفر تابع

1 دایره فصل او ل کاربردهای بسیاری داشته است. یک قضیۀ بنیادی در هندسه موسوم با محیط ثابت دایره دارای بیشترین مساحت است. این موضوع در طراحی

ندرک درگ ندرک درگ شور

بسمه تعالی «تمرین شماره یک»

فصل سوم جریان های الکتریکی و مدارهای جریان مستقیم جریان الکتریکی

نظریه زبان ها و ماشین ها

راهنمای کاربری موتور بنزینی )سیکل اتو(

فصل سوم جبر بول هدف های رفتاری: در پایان این فصل از فراگیرنده انتظار می رود که :

به نام خدا. الف( توضیح دهید چرا از این تکنیک استفاده میشود چرا تحلیل را روی کل سیگنال x[n] انجام نمیدهیم

هندسه تحلیلی و جبر خطی ( خط و صفحه )

سینماتیک مستقیم و وارون

عنوان: رمزگذاري جستجوپذیر متقارن پویا

آشنایی با پدیده ماره (moiré)

جلسه ی ۱۱: درخت دودویی هرم

فصل چهارم : مولتی ویبراتورهای ترانزیستوری مقدمه: فیدبک مثبت

جلسه 28. فرض کنید که m نسخه مستقل یک حالت محض دلخواه

بسم هللا الرحمن الرحیم

I = I CM + Mh 2, (cm = center of mass)

تحلیل الگوریتم پیدا کردن ماکزیمم

مود لصف یسدنه یاه لیدبت

جلسه 23 1 تابع آنتروپی و خاصیت مقعر بودن نظریه اطلاعات کوانتمی 1 ترم پاییز

6- روش های گرادیان مبنا< سر فصل مطالب

زمین شناسی ساختاری.فصل پنجم.محاسبه ضخامت و عمق الیه

به نام حضرت دوست. Downloaded from: درسنامه

محاسبات کوانتمی 1 علم ساخت و استفاده از کامپیوتري است که بر پایه ي اصول مکانیک کوانتم قرار گرفته است.

فصل اول پیچیدگی زمانی و مرتبه اجرایی

هر عملگرجبر رابطه ای روی يک يا دو رابطه به عنوان ورودی عمل کرده و يک رابطه جديد را به عنوان نتيجه توليد می کنند.

Transcript:

آموزش نرم افزار MATLAB فهرست مطالب فصل اول : آشنایی با و کار با ماتریس ها فصل دوم : محاسبات سیمبولیک و چند جمله ای ها فصل سوم : کنترل جریان محاسبات )ساختارهای شرطی و حلقه ها( فصل چهارم : ترسیم نمودارهای دو بعدی و سه بعدی فصل پنجم : روش های حل عددی معادالت دیفرانسیل فصل ششم : شبیه سازی سیستم های دینامیکی )ساخت انیمشن( فصل هفتم : آموزش ساخت نرم افزار با شماره صفحه 7 3 64 3 یک نرم افزار قوی برای کسانی است که با محاسبات عددی و به ویژه جبر خطی گرفته شده و سروکار دارند. نام این نرم افزار از عبارت انگلیسی هدف اولیه آن عبارت است از قادر ساختن مهندسان و دانشمندان به حل مسائل شامل عملیات ماتریسی بدون نیاز به نوشتن برنامه در زبان های برنامه نویسی متداول همچون. همچنین با استفاده از این نرم افزار می توان نرم افزار های مهندسی با کاربردهای خاص طراحی نمود.در پایان به این نکته اشاره کنیم که نرم افزار در حال حاضر قوی ترین نرم افزار برای انجام محاسبات مهندسی به شمار می رود.

آشنایی با پنجره های و کار با ماتریس ها شامل : محیط اصلی برنامه نویسی نمایش خروجی برنامه ها و اجرای فرمان ها ی محل ذخیره ی داده ها 7 3 6 بایگانی فرامین اجرا شده در مکان فایلی که برنامه ی در حال اجرا در آن قرار دارد برای اینکه فرم پنجره های مقابل آن را تصحیح نمود : به حالت استاندارد مرتب شوند می توان از مسیر تعریف و مقدار دهی یک متغیر و ماتریس - پایه و اساس تحلیل بر اساس قوانین جبر ماتریس ها می باشد. باید به فرم ] 3 [ 7 نوشت. فاصله ایجاد نمود و برای تعریف سطر بعد باید از 7 : برای تعریف ] [ در 3 نکته : باید بین هر درایه با زدن کلید سمی کالن);( نمود. 1

به های زیر توجه کنید : [3] 7 7 3 [ ] 7 7 را در را در به فرم 7] [ 3 باید نوشت. به فرم ] 7 [ 7 3 باید نوشت. - قرارداد:هرماتریس سطری یا ستونی را بردار می نامیم. روش های فراخوانی درایه های یک ماتریس صدا می زنیم که m شماره ی سطر و توضیح:درایه های یک ماتریس را به صورت شماره ای می باشد که درایه در آن که در آن شماره ستون می باشد یا به صورت قرار دارد به طوری که مبدا شروع شمارش از سمت چپ ماتریس و قسمت باالی آن می باشد و به صورت ستونی شمارش صورت می گیرد. 7 [ داریم: 3 فراخوانی درایه سطر دوم و ستون سوم : با فرض ] 7 3 فراخوانی درایه ششم فراخوانی آخرین درایه ماتریس 4 3 7 3 فراخوانی ستون اول [ ] 6 فراخوانی سطر دوم فراخوانی پنج درایه اول 7 [ ] [ 7 ] 4 2

فراخوانی قطر ماتریس [ ] توابع آماده برای محاسبات خاص با ماتریس ها 7 3 6 4 7 3 6 4 کمترین مقدار بردار بیشترین مقدار بردار میانگین بردار ترانهاده ی ماتریس ابعاد ماتریس تعداد درایه های بردار تعداد درایه های ماتریس حاصلضرب درایه های بردار مجموع درایه های بردار درایه های بردار را مرتب می کند دترمینان معکوس ماتریس انحراف معیار بردار ضرب خارجی ماتریس ضرب درایه به درایه ضرب داخلی ضرب خارجی - تعریف بردار به صورت ] 7 [ به فرم خواهد بود. را به تا بازه ی قسمت مساوی تقسیم می کند. - 3

تولید ماتریس های خاص ) 7 3 سمی کالن 6 4 ماتریس در با درایه های یک ماتریس در با درایه های صفر ماتریس یکه مرتبه ماتریس در با درایه های رندوم بین صفر و یک تولید بردار با درایه های طبیعی و رندوم بین تا آشنایی با چند دستور پرکاربرد Command Window را پاک می کند داده های ذخیره شده در Work Space را پاک می کند پنجره های بسته نشده را می بندد جهت جلوگیری از نمایش خروجی در Command Window گرفتن ورودی از کاربر چاپ خروجی در : انواع داده ها در : عددها و ماتریس ها از نوع می باشند : آرایه هایی کاراکتری مانند : داده های پارامتری : ترکیبی از انواع آرایه ها } 7 { آرایه های عددی آرایه های رشته ای آرایه های سیمبولیک آرایه های سلولی 7 3 6 4

برای تشخیص نوع داده می توان از دستور استفاده نمود. * برای تبدیل آرایه ی عددی به رشته ای می توان از دستور 7 استفاده نمود. * برای تبدیل آرایه ی رشته ای به عددی می توان از دستور 7 استفاده * عمل نمود که در آن شماره آن نمود. * برای فراخوانی درایه های یک سلول باید به فرم } { درایه می باشد. حال وقت آن رسیده تا اولین برنامه نویسی در محیط این کار می توان با استفاده از یک خود را در آن نوشت. را تجربه کنیم که برای جدید ایجاد نمود و اولین برنامه { 7 3 7 : برنامه ای بنویسید که دستگاه معادالت مقابل را حل نماید. جواب:ابتدا دستگاه را به فرم ماتریسی بازنویسی می کنیم: [ 7 3 7 ] [ ] [ ] حال کافیست کدی بنویسیم که معکوس ماتریس نمایش دهد: را در ماتریس ضرب کند وحاصل را A=[2 3;1 2]; B=[8;5]; X=inv(A)*B; x=x(1); y=x(2); x=num2str(x); y=num2str(y); disp(['x=' x ' y=' y]) 5

** برای غیر فعال کردن بخشی از کد می توان از عالمت % استفاده نمود در واقع دستوراتی که بعد از عالمت % نوشته می شوند دیگر خوانده نمی شوند. ** غیر فعال کردن یک سطر فعال کردن یک سطری که غیر فعال شده اگر بخواهیم چند عدد و چند رشته ( ) را در کنار هم نمایش دهیم باید: ** ** داخل پرانتز دستور باید براکت [] قرار دهیم 7 تمامی المان های ورودی باید از نوع رشته باشند ) عددها را باید تبدیل به رشته نمود با استفاده از دستور 7 : برنامه ای بنویسید که ماتریس دلخواه را از کاربر گرفته و سپس میانگین مولفه های آنرا محاسبه نماید.)از دستور استفاده نشود( جواب : مجموع تمام درایه ها تعداد کل درایه ها میانگین a=input('a='); a=a(:); L=length(a); s=sum(a); m=s/l; disp(['average=' num2str(m)]) : برنامه ای بنویسید که ضرایب معادله درجه دوم را از کاربر بگیرد و سپس ریشه های آنرا چاپ نماید. disp('ax^2+bx+c=0') a=input('a='); b=input('b=' ); c=input('c=' ); 6

delta=b^2-4*a*c; x1=(-b+sqrt(delta))/(2*a) x2=(-b-sqrt(delta))/(2*a) ** برای جذر یک عدد می توان از دستور استفاده نمود. ** جهت چاپ شدن 7 دستور سمی کالن را قرار نمی دهیم. : برنامه ای بنویسید که دو عدد دلخواه سومی مقادیر را با هم عوض کند. را از کاربر بگیرد و بدون استفاده از متغیر a=input('a=' ); b=input('b=' ); a=a+b; b=a-b; a=a-b; disp(['a=' num2str(a) ' b=' num2str(b)]) با زدن بعد از سومین کوتیشن می توان بین خروجی فاصله ایجاد نمود. ** محاسبات سیمبولیک و چند جمله ها ای این محاسبات به کاربراین امکان رامی دهد که عملیات ریاضی مانند دیفرانسیل انتگرال حد و... را به صورتی انجام دهد که جواب معادله به صورت عددی نباشد و بر حسب یک نمااد مانناد نمایش داده شود. برای اجرای محاسبات سیمبولیک در ابتدا باید ثابت ها و متغیرهای مورد استفاده معرفی شوند که این کار را با استفاده از دستور انجام می دهیم. 7

برخی از توابع سیمبولیک مدل ریاضی فرم انتگرال گیری عددی { } { } بسط تیلور برای جمله اول حول یا L{ } L { } ترسیم تابع دلخواه مقدار تابع در مقدار تابع دو متغیره به ازای حل معادالت جبری و دستگاه معادالت حل معادله دیفرانسیل به روش تحلیلی جمع سری از تا ساده ترین فرم تابع تولید بخش حقیقی و بخش موهومی عدد قدر مطلق یک عدد و اندازه یک عدد مختلط تابع را به فرم ریاضی نمایش می دهد فاکتور گیری از عبارت سیمبولیک بسط عبارت سیمبولیک 8

حال به ذکر چند می پردازیم تا نحوه استفاده از دستورهای باال مشخص شود:. : مطلوبست محاسبه مشتق تابع می توان در این کدها را نوشت : : مطلوبست محاسبه انتگرال : مطلوبست تبدیل الپالس تابع : مطلوبست ترسیم تابع syms x;f=x^2+sin(x);diff(f). syms x;y=sin(x);int(y,0,pi). syms t;y=sin(t);laplace(y) در بازه ] 7 [. syms x;y=cos(x);ezplot(y,[0 2*pi]); ] 7 [ 7 خواهد بود در صورتی که بازه در دستور ذکر نشود بازه پیش فرض ** syms x y;ezplot(x^2+y^2-1). : مطلوبست ترسیم رابطه ی. : مطلوبست حل معادله syms x;solve(x^2-1). { : مطلوبست حل دستگاه معادالت 7 7 7 syms x y z;s=solve('x+y=2','z+y=2','x+z=2'); 9

حال برای فراخوانی جواب ها می توان به فرم زیر عمل نمود : x=s.x y=s.y z=s.z syms n;symsum(n^2,1,10) : مطلوبست حاصل سری.. 7 3 : مطلوبست محاسبه اندازه عدد مختلط abs(2+3i) : برنامه ای بنویسید که تابع دلخواه آنرا در یک نمودار با رنگهای مختلف رسم نماید. را از کاربر گرفته و سپس خود تابع و مشتق syms x f=input('f(x) ='); fdot=diff(f); a=ezplot(f); set(a,'color','r' ) hold on ezplot(fdot) grid on axis([-8 8-8 8]) و... را در فصل 4 به طور کامل شرح خواهیم داد. ** دستورهای 11 : برنامه ای بنویسید که تابع دلخواه فوریه آنرا به ازای دوره تناوب 7 را از کاربر گرفته و سپس خود تابع و سری و تعداد جمالت دلخواه سری فوریه رسم نماید. syms x n L=pi; N=input('N='); f=input('f(x)=');

a0=1/l*int(f,-l,l) ; an=1/l*int(f*cos(n*pi*x/l),-l,l) ; bn=1/l*int(f*sin(n*pi*x/l),-l,l) ; s=an*cos(n*pi*x/l)+bn*sin(n*pi*x/l) ; fourier=a0/2+symsum(s,n,1,n) ; ezplot(fourier,[-8 8]); hold on a=ezplot(f,[-pi pi]); set(a,'color','r') grid on axis([-8 8-8 8]) leg('fourier series','function') : مطلوبست حل تحلیلی معادله دیفرانسیل شرایط اولیه )رزونانس( خواهد بود. 3 4 با و ترسیم جواب معادله که بیانگر پدیده تشدید x=dsolve('d2x+.01*dx+10*x=sin(3.16*t)','x(0)=0','dx(0)=0'); ezplot(x,[0 40]) grid on title('x(t)') axis([0 40-10 10]) ** با توجه به باال به جای هر مرتبه ی مشتق باید از مرتبه ی مشتق می باشد که فقط در صورتی که در باال این موضوع را می بینیم. استفاده نمود که در آن باشد نیازی به نوشتن آن نیست که ** در صورتی که بخواهیم معادله دیفرانسیل را به فرم عمومی حل نماییم بایاد از وارد کاردن شرایط اولیه خودداری کنیم که در این صورت جواب کلی شامل ثابت هایی خواهد بود که مای توان آن ها را با استفاده از شرایط اولیه تعیین نمود. 11

گرفتن ورودی از کاربر به صورت گرافیکی را می توان با استفاده از دستور شرح می دهیم : انجام داد که نحوه استفاده از این تابع را با ی : برنامه ای بنویسید که زاویه و سرعت اولیه یک پرتابه را از کاربر بگیرد و برد آن محاسبه نماید. را * در سطر دوم سلول داده شود تا داده مورد نظر را به درستی در clc;clear al;close all u={'alpha=','v='}; uu=inputdlg(u); close(figure) alpha=str2num(uu{1}); vo=str2num(uu{2}); g=9.81; R=vo^2*sin(2*alpha)/g; disp(['range= ' num2str(r)]) در واقع سلولی شامل عناوینی می باشد که قرار است به کاربر نشان جای خود وارد کند و اما سطر سوم سلول شامل همان عددهایی است که کاربر وارد نموده است که به صورت رشته ای در آن ذخیره شده است که می توان با فراخوانی آن ها به فرم سلولی یعنی } { عددی که با دستور 7 چاپ خروجی به صورت گرافیکی انجام می شود از آن ها در برنامه استفاده نمود. و تبدیل آن ها به فرم برای نمایش یک متن دلخواه همراه با یک عدد دلخواه به صورت گرافیکی می توان از دستور به فرم مقابل استفاده نمود: برای نمایش 7 کافیست بنویسیم : [ 7 ] 12

ها ای چند جمله یک چند جمله ای در به صورت یک بردار سطری است که درایه های آن ضرایب چند جمله ای می باشند که به صورت نزولی مرتب شده اند. به عنوان چند جمله ای 3 را در به فرم ] 3 [ می توان نوشت. 7 3 6 4 7 7 توابع آماده برای کار با چند جمله ای ها مقدار چند جمله ای در مشتق چند جمله ای انتگرال چند جمله ای حاصلضرب دو چند جمله ای محاسبه ی ریشه های چند جمله ای کردن تابع با چند جمله ای درجه تبدیل چند جمله ای به عبارت سیمبولیک تبدیل عبارت سیمبولیک به یک بردار حال به ذکر چند می پردازیم تا نحوه استفاده از دستورهای باال مشخص شود :. در 7 7 : مطلوبست محاسبه مقدار تابع p=[1 0 2-1];polyval(p,2) : چند جمله ای را به صورت برداری نمایش دهید. 7 syms x;f=x^3+2*x-1;p=sym2poly(f) 13

. 7 : مطلوبست محاسبه ی ریشه های چند جمله ای p=[1 2 0 1];roots(p) [ ] : تابع را با یک چند جمله ای درجاه ی 5 در باازه ی تقریاب زده و دو نمودار را در یک رسم کنید. x=0:.01:8; y=sin(x); p=polyfit(x,y,5); q=poly2sym(p); a=ezplot(q,[0 8]); set(a,'color','r') hold on ezplot('sin(x)',[0 8]) grid on axis square axis([-8 8-8 8]) معرفی چند تابع مهم 7 3 6 4 جزء صحیح عدد به سمت نزدیکترین همسایگی گرد می کند 7 3 7 3 به سمت باال گرد می کند 7 7 به سمت صفر گرد می کند بر محاسبه ی باقیمانده ی تقسیم باشد یافتن شماره اندیس درایه ای که برابر با در ماتریس 14

کنترل جریان محاسبات )ساختارهای شرطی و حلقه ها( برای اینکه به برنامااه ی نوشته شده این قابلیت اضافه شود که بتواند در حین اجرا تصمیمات الزم را اتخاذ کرده و ترتیب اجرای دستورات را کنترل کند چندین دستور را برای کنترل جریان محاسبات معرفی می کند. { ساختارهای شرطی : { 7 حلقه های تکرار : { 3 توقف اجرای برنامه : حال با توضیح کلی ساختارهای باال و های متنوع به شرح هریک می پردازیم : ساختار شرطی : فرم کلی این ساختار به صورت مقابل خواهد بود : شرط دستورات 1 شرط 7 دستورات 2 15

.. دستورات نهایی همان طور که مشاهده می کنید در حالت کلی می توان ازیک دستور و ویک استفاده کرد.البته استفاده از و برنامه را قادر می سازد که تصمیم بگیرد چه دستورهایی باید اجرا شوند. : بیشمار اختیاری است.دستور برنامه ای بنویسید که با گرفتن ضرایب معادله درجه دوم مشخص کند که معادله مفروض دارای چه نوع جوابی خواهد بود. a=input('a='); b=input('b='); c=input('c='); delta=b^2-4*a*c; if delta>0 disp('rishe haghighi darad') elseif delta<0 disp('rishe haghighi nadarad' ) else disp('rishe mozaaf darad' ) : برنامه ای بنویسید که عدد دلخواهی را از کاربر بگیرد و زوج یا فرد بودن آن را تشخیص دهد. 16

n=input('n='); if mod(n,2)==0 disp('even' ) else disp('odd' ) ** در زبان های برنامه نویسی زمانی از دو مساوی استفاده می شود که بخواهد مقایسه صورت بگیرد به عنوان وقتی می نویسیم یعنی آیا مقدار برابر می باشد یا خیر اما وقتی می نویسیم به این معنی است که مقدار را درون متغیر می ریزیم. 7 ساختار : از این ساختار معموال برای تصمیم گیری چند گانه بر اساس مقادیر مختلف یک متغیر استفاده می شود. فرم کلی این ساختار به صورت مقابل خواهد بود : دستورات 7 دستورات 7.. دستورات نهایی 17

: برنامه ای بنویسید که عددی بین عدد زوج است یا فرد. تا دا از کاربر گرفته و سپس مشخص کند این a=input('a='); switch a case {2,4,6,8} disp('even') case {1,3,5,7,9} disp('odd') otherwise disp('zero') : برنامه ای بنویسید که با گرفتن یک کلمه درستی یا نادرستی آن را به کاربر اعالم کند. مانند از کاربر به عنوان پسورد pass=input('password=','s'); switch pass case 'atc' disp('password is valid') otherwise disp('password is not valid') ** برای ذخیره یک رشته باید در دستور کوتیشن قرارداد. در المان دوم ورودی حرف را را داخل : برنامه ای بنویسید که از کاربر دو کلمه و همچنین تابعی دلخواه را از کاربر بگیرد و سپس به ازای نوشتن نماید و به ازای ریشه های آن را چاپ نماید. را به طور دلخواه گرفته و تابع گرفته شده را رسم 18

u={'f(x)=',' plot or solve'}; uu=inputdlg(u); f=uu{1}; a=uu{2}; switch a case 'plot' ezplot(f) grid on case 'solve' solve(f) 3 حلقه این حلقه این امکان را به وجود می اورد که تعدادی از دستورات به دفعات از قبل تعیین شده تکرار شوند. فرم کلی این ساختار به صورت مقابل خواهد بود : دستورات که در آن یک بردار است که درهربارتکرار حلقه یک مقدار بردار گیرد به این ترتیب حلقه به تعداد درایه های بردار تکرار می شود. در قرار می : برنامه ای بنویسید که یک عدد دلخواه را ازکاربر گرفته وفاکتوریل آن را محاسبه نماید. n=input('n='); s=1; for i=1:n s=s*i; disp([num2str(n) '!=' num2str(s)]) 19

که حاصل آن عدد نپر خواهد بود. s=0; for i=0:100 s=s+1/factorial(i); disp(['sum= ' num2str(s)]) : مطلوبست محاسبه سری : برنامه ای بنویسید که انتگرال تابع مجموع ریمان محاسبه نماید. را در بازه ] [ با استفاده از s=0; dx=.01; for x=0:dx:pi s=s+sin(x); I=dx*s 6 حلقه این حلقه چند دستور را به تعداد دفعات نامحدود تکرار می کند.این دستورات داخل حلقه تا زمانی تکرار و اجرا می شوند که شرط جلوی دستور برقرار باشد. فرم کلی این ساختار به صورت مقابل خواهد بود : شرط دستورات 21

4 : مقدار در )تعداد جمالت بسط تیلور( را طوری پیدا کنید که اختالف مقادار واقعای تاابع با مقدار بسط تیلور آن در 4 کمتر از شود. syms x y=exp(x); n=0; d=1; while d>.01 n=n+1; p=taylor(y,n,6); q=subs(p,6.5); d=abs(q-exp(6.5)); disp(['n=' num2str(n)]) منتقل یا بازگشت به ابتدای حلقه با هنگامی که این دستور اجرا می شود کنترل برنامه به ابتدای حلقه ی دیگر اجرا نمی شوند.اگر حلقه ها تو در تو باشند می شود لذا دستورات پس از این دستور باعث منتقل شدن کنترل برنامه به اولین سطر اولین حلقه جاری می شود. : برنامه ای بنویسید که اعداد غیر مضرب 3 بین تا را چاپ نماید. for i=1:15 if mod(i,3)==0 continue disp(i) 21

4 خارج شدن از حلقه با هنگامی که این دستور اجرا شود کنترل برنامه به اولین خط بعد از حلقه ی یا منتقل می شود.اگر حلقه ها تودرتو باشند این دستور باعث خارج شدن از حلقه جاری می شود. : برنامه ای بنویسید که اول یا مرکب بودن عدد وارد شده از طرف کاربر را مشخص نماید. n=input('n='); k=0; for i=1:sqrt(n) if mod(n,i)==0 k=k+1; if k==1 && n~=1 disp('prime number') else disp('not prime number') توقف لحظه ای برنامه با هنگامی که برنامه در حین اجرا به دستور برسد کلید را فشار دهد و سپس اجرای برنامه از دستور بعد از متوقف می ماند تا اینکه کاربر صفحه ادامه می یابد. روش دیگر استفاده از این دستور به فرم می باشد که به این معنی است که زمانی که برنامه در حال اجرا به این دستور می رسد به مدت ثانیه متوقف می شود وسپس ادامه می یابد. 22

ایجاد گاهی اوقات ممکن است نیاز به توابعی با کاربری خاص داشته باشیم که در تعریف نشده اند لذا باید با تعریف یک آن را خودمان تولید نماییم. فرم کلی ایجاد تابع دلخواه به صورت مقابل می باشد : [ ] روابط دلخواه بین ورودی ها و خروجی ها نام تابع نباید با نام توابع موجود در یکی باشد. ** آن حتما در **هنگام ذخیره کردن تابع باید نامی را که برای این اختصاص می دهیم دقیقا همان نام تابع باشد. ** برای استفاده از تابع تعریف شده باید باشد. وارد نمی شوند ** در فانکشن ها به صورت پیش فرض امکان استفاده از داده های موجود در وجود ندارد و همچنین متغیرهای تعریف شده در فانکشن در برای رفع این مشکل از دو دستور زیر می توان استفاده نمود. : فراخوانی متغیر از محیط به محیط فانکشن.. : ارسال متغیر از محیط فانکشن به : تابعی تعریف کنید که را از کاربر به عنوان ورودی گرفته و خروجی تابع برد function d=range(v,a) g=9.81; d=v^2*sin(2*a)/g; و α پرتابه باشد. 23

حال در نمود و از خروجی آن استفاده کرد. و در هر برنامه ی دیگری مای تاوان از ایان تاابع اساتفاده 6 به عنوان اگر در تایپ کنید عدد بارد متناظر با این ورودی ها را به شما می دهد. حال به ذکر چند جامع می پردازیم تا از آنچه در این فصل آموختیم استفاده نماییم : : برنامه ای بنویسید که بردار دلخواهی را از کاربر بگیرد و آن را نماید. a=input('a='); n=length(a); for i=1:n for j=i+1:n if a(i)>a(j) c=a(j); a(j)=a(i); a(i)=c; a را به صورت عددی حل نماید. : برنامه ای بنویسید که معادله ی 7 x=-4:0.001:4; y1=sin(x); y2=x-2; d=abs(y1-y2); M=min(d); i=find(d==m); plot(x,y1,x,y2) hold on grid on plot(x(i),y1(i),'.r','markersize',15) x(i) 24

: برنامه ای بنویسید که با استفاده از روش نصف کردن ریشه ی یک معادله دلخواه را در بازه ای که ریشه در آن وجود دارد و توسط کاربر به درستی تعیین می شود محاسبه نماید. u={'a=','b=','f(x)='}; uu=inputdlg(u); close(figure) a=str2num(uu{1}); b=str2num(uu{2}); F=uu{3}; n=100; w=waitbar(0,'please wait...'); for i=1:n x=(a+b)/2; fx=subs(f,x); fa=subs(f,a); if fx*fa<0 b=x; elseif fx*fa>0 a=x; waitbar(i/n) close(w) if abs(fx)<.001 msgbox(['root=' num2str(x)]) else msgbox('error! Please Change Input Data') نشان دادن درصد پیشرفت برنامه با دستور برای نشان دادن درصد پیشرفت برنامه به کاربر می توان در حلقه ی نمود. به فرم مقابل عمل 25

... : برنامه ای بنویسید که با گرفتن تابعی دلخواه و بازه ای دلخواه انتگرال آن تابع را حساب u={'f(x)','a=','b=','n='}; T={'sin(x)','0','pi','200'}; u=inputdlg(u,'enter Data',1,T); f=u{1}; close(figure); a=str2num(u{2}); b=str2num(u{3}); n=str2num(u{4}); s=0; dx=(b-a)/n; i=1; w=waitbar(0,'please Wait... '); for x=a:dx:b s=s+dx*eval(f); waitbar(i/n) i=i+1; close(w) disp(['int = ' num2str(s)]) نماید. 26

** دستور تا حدودی مشابه دستور عمل می کند اما با سارعتی بااالتر باا ایان تفاوت که برای محاسبه ی مقدار یک تابع باید قبل از استفاده از آن مقدار دهی صاورت بگیارد برای روشن شدن مساله به زیر توجه کنید :. در 7 : مطلوبست محاسبه ی مقدار تابع syms x;y=x+sin(x);x=2;eval(y) ترسیم نمودارهای دو بعدی و سه بعدی معروف ترین و پرکاربرد ترین دستور برای ترسیم نمودار دستور می باشد این دستور با گرفتن دو بردار هم اندازه به عنوان ورودی تک تک درایه های آن ها را متناظر با هم به عنوان یک نقطه شناخته و این نقاط را در صفحه ی مختصات به هم وصل می کند. : تابع را در بازه ی ] 7 [ رسم کنید. x=0:.01:2*pi;y=sin(x);plot(x,y) دستورات زیادی در ارتباط با آن ها می پردازیم : ترسیم نمودار وجود دارد که جهت آشنایی به ذکار پرکااربردترین : به صورت پیش فرض پس از رسم یک نمودار اگر دستوری دیگر برای رسم یک نمودار دیگر صادر شود نمودار قبلی را پاک می کند لذا با نوشتن دستور می توان نمودار ها را با هم ترسیم کرد. : بااا اسااتفاده از ایاان دسااتور ماای تااوان عنااوان نمااودار خااود را تغییاار داد : 27

دستور می کند و : ترسیم چند نمودار در چند متفاوت که حتما باید قبل از قرار بگیرد که در آن نوع قرار گرفتن نمودارها را به فرم ماتریسی مشخص به عنوان ترتیب قرار گرفتن نمودار در فرم ماتریسی خواهد بود به زیر توجه کنید : : توابع و و را در سه نمودار جدا از هم رسم کنید. x=0:.01:pi; f=sin(x); g=cos(x); h=x; subplot(3,1,1) plot(x,f) subplot(3,1,2) plot(x,g) subplot(3,1,3) plot(x,h) ] [ : با استفاده از این دستور می توان محدوده نمودار را تعیین نمود و همچنین در ساخت انیمشن باعث ثابت ماندن صفحه ی انیمیشن می شود. : یکسان نمودن مقیاس محورها : بر چسب محور ها : بر چسب محور ها : برچسب مشخص کردن رنگ منحنی ها : برای شطرنجی کردن صفحه ی مختصات به کار می رود. 28

خواهی را نمایش داد. : با استفاده از این دستور مای تاوان در موقعیات ماتن دل : برای ترسیم توابع سیمبولیک قطبی می توان از این دستور استفاده کرد. : تابع قطبی را رسم کنید. syms t;ezpolar(1+cos(t)) اگر بخواهیم تابع قطبی باال را در فضای دکارتی رسم کنیم باید به فرم زیر کاد نویسای کنایم : تنظیمات رنگ اندازه ضخامت و... برای نمودار t=0:.01:2*pi; r=1+cos(t); x=r.*cos(t); y=r.*sin(t); plot(x,y) grid on axis([-8 8-8 8]) انتخاب رنگ منحنی ضخامت منحنی 7 نوع نمایش نقاط یک نمودار تنظیم اندازه ی نقاط ترسیم جعبه با رنگ دلخواه 29

جهت کسب اطالعات بیشتر دراین زمینه می توانید به را می توانید با تایپ در نرم افزار رجوع کنید که این کار انجام دهید. رود. : این تابع برای رنگ زدن داخل منحنی های بسته )والبته باز( به کار می : دایره ای به شعاع یک را با رنگ آبی رنگ زده و آن را رسم کنید. ترسیم های سه بعدی t=0:.01:2*pi; x=sin(t); y=cos(t); fill(x,y,'b') axis equal axis([-4 4-4 4]) در این زمینه دستورهای بیشماری وجود دارد که در این جا به توضیح برخی از آن ها می پردازیم : 3 : برای ترسیم های سه بعدی از این دستور استفاده می شود فقط باید دقت نماود کاه ورودی ها باید به صورت برداری باشند.. { : مطلوبست ترسیم منحنی فضایی t=0:.01:8*pi;x=sin(t);y=cos(t);z=t;plot3(x,y,z) 3 باشند. : مشابه دستور باال می باشد با ایان تفااوت کاه ورودی هاای آن بایاد سایمبولیک 31

. { : مطلوبست ترسیم منحنی فضایی سیمبولیک می باشد. syms t;ezplot3(sin(t),cos(t),t,[0 40]) :برای ترسیم رویه های سه بعدی به کار می رود که ورودی آن به صورت : مطلوبست ترسیم رویه ی در فضای سه بعدی. syms x y;ezmesh(x^2+y^2) ** برای استفاده از این دستور ابتدا باید را بر حسب دادن در ورودی می توان رویه ی و به دست آورد وسپس با قرار را ترسیم کرد. روش های حل عددی معادالت دیفرانسیل در این فصل با چهار الگوریتم از روش های حل عددی معادالت دیفرانسیل آشانا خاواهیم شاد که هریک را در جای خود شرح خواهیم داد. روش اول : خطی سازی در این روش با داشتن یک نقطه ی شروع می توان گام به گام با استفاده از تعریف مشتق به نقاط بعدی دست یافت با توجه به این که می دانیم در حل عددی ما به ضابطه تابع جواب نمی توانیم برسیم اما می توانیم مجموع نقاط جواب را تولید کنیم وسپس جواب معادله دیفرانسیل را ترسیم کنیم. 31

با توجه به نمودار مقابل با نوشتن فرمول مشتق برای نقطه به راحتی می توان را محاسبه نمود در واقع ما با داشتن نقطه ای دلخواه توانستیم نقطه ی بعدی را به دست آوریم و اگر این کار در یک حلقه انجام دهیم می توانیم به تمام نقاط یک نمودار دست پیدا کنیم : رابطه ی باال این قضیه را بیان می کند که مکان جدید برابر است با مجموع مکان یک لحظه قبل با حاصلضرب گام زمانی در سرعت یک لحظه قبل. با استفاده از همین استدالل می توان فرمولی را برای سرعت نوشت: بود : با فرض فرمول اساسی برای معادله ی مرتبه ی اول به فرم زیر خواهد با فرض 7 خواهد بود : فرمول اساسی برای معادله ی مرتبه ی دوم به فرم زیر { 32

: معادله ی را به ازای شرایط اولیه حل عددی نمایید و پاسخ معادله را ترسیم کنید. ti=0; tf=20; T=.01; x0=0; x(1)=x0; n=2; for t=ti:t:tf-t x(n)=t*(cos(t))+x(n-1); n=n+1; plot(ti:t:tf,x) grid on axis([0 tf -8 8]) : معادله ی نمایید و پاسخ معادله را ترسیم کنید. را به ازای شرایط اولیه حل عددی ti=0; tf=20; T=.01; x0=1; x(1)=x0; n=2; for t=ti:t:tf-t 33

x(n)=t*(t+sin(x(n-1)))+x(n-1); n=n+1; plot(ti:t:tf,x) grid on axis([0 tf -8 8]) مرتبه ی دوم : معادله ی و پاسخ معادله را ترسیم کنید. را به ازای شرایط اولیه { حل عددی نمایید ti=0; tf=40; T=.01; x0=0; v0=1; x(1)=x0; v(1)=v0; n=2; for t=ti:t:tf-t x(n)=t*v(n-1)+x(n-1); v(n)=t*(-sin(t))+v(n-1); n=n+1; plot(ti:t:tf,x) grid on axis([0 tf -10 10]) 3 4 : مطلوبست حل عددی معادله دیفرانسیل شرایط اولیه با و ترسیم جواب معادله که بیانگر پدیده تشدید ti=0; )رزونانس( خواهد بود. 34

tf=40; T=.01; x0=0; v0=0; x(1)=x0; v(1)=v0; n=2; for t=ti:t:tf-t x(n)=t*v(n-1)+x(n-1); v(n)=t*(-.01*v(n-1)-10*x(n-1)+ sin(3.16*t))+v(n-1); n=n+1; plot(ti:t:tf,x) grid on axis([0 tf -20 20]) : مطلوبست ترسیم پاسخ معادله ی که بیانگر معادله ی حرکت یک. { آونگ ساده می باشد به ازای و ti=0; tf=50; T=.0001; x0=pi/6; v0=0; x(1)=x0; v(1)=v0; n=2; for t=ti:t:tf-t x(n)=t*v(n-1)+x(n-1); v(n)=t*(-9.81*sin(x(n-1)))+v(n-1); n=n+1; plot(ti:t:tf,x) grid on 35

axis([0 tf -4 4]) ** برای معادالت غیر خطی و پیچیده مرتبه ی دوم باید در انتخاب مقدار دقت نمود که پاسخ با خطای زیاد ترسیم نشود در این اگر مقدار بیشتر از انتخاب شود و اگر را انتخاب کنیم خواهیم دید که جواب کامال اشتباه خواهد بود. دستگاه معادالت دیفرانسیل زمانی که سیستم دینامیکی مورد تحلیل بیش از یک درجه آزادی داشته باشد به تعداد درجات آزادی معادالت تعیین می شوند سیستم دو درجه آزادی دو معادله بیانگر چگونگی حرکت آن می باشند. { { : مطلوبست حل عددی دستگاه به ازای شرایط اولیه با توجه به حل تحلیلی می دانیم که جواب این دستگاه به صورت { خواهد بود حاال می خواهیم به صورت عددی این موضوع را تحلیلی تطبیق دارد یا خیر. تحقیق کنیم که آیا جواب عددی ما با جواب ti=0; tf=30; T=.0001; x0=0; vx0=1; y0=1; vy0=0; x(1)=x0; y(1)=y0; vx(1)=vx0; vy(1)=vy0; n=2; for t=ti:t:tf-t 36

x(n)=t*vx(n-1)+x(n-1); vx(n)=t*vy(n-1)+vx(n-1); y(n)=t*vy(n-1)+y(n-1); vy(n)=t*-vx(n-1)+vy(n-1); n=n+1; plot(ti:t:tf,x,'r') hold on plot(ti:t:tf,y,'b') grid on axis([0 tf -4 4]) روش دوم : الگوریتم این روش یکی از دقیق ترین روشهای حل عددی معادالت دیفرانسیل به شمار می رود که در واقع تابع 6 از همین روش برای حل معادالت استفاده می کند که در ادامه آن را نیز توضیح خواهیم داد. الگوریتم روش رونگه-کوتای مرتبه چهار : برای معادله ی قرار دهید : با شرایط اولیه و مقدار ثابات )گاام زماانی( که در فرمول باال مقادیر ها از روابط مقابل به دست می آیند : ( 7 7 ) 37

( 7 7 ) : مطلوبست حل عددی معادله ی دیفرانسیل به ازای شرایط اولیه به روش رونگه-کوتا با مقدار. ti=0; tf=20; h=0.01; f='x-sin(t)'; y0=1; y(1)=y0; n=1; for tn=ti:h:tf-h t=tn;x=y(n); k1=h*eval(f); t=tn+h/2;x=y(n)+k1/2; k2=h*eval(f); t=tn+h/2;x=y(n)+k2/2; k3=h*eval(f); t=tn+h;x=y(n)+k3; k4=h*eval(f); y(n+1)=y(n)+1/6*(k1+2*k2+2*k3+k4); n=n+1; plot(ti:h:tf,y) grid on axis square axis([-20 20-20 20]) 38

مرتبه ی دوم در این حالت ابتدا با نوشتن فضای حالت معادله ی مرتبه ی دوم را باه دو معادلاه ی مرتباه ی اول تبدیل می کنیم و سپس مشابه الگوریتم حل مرتبه ی اول عمل می کنیم : { { ( 7 7 7 ) ( 7 7 7 ) ( 7 7 7 ) ( 7 7 7 ) 39

: مطلوبست حل عددی معادله دیفرانسیل 7 با شرایط اولیه 3 و ترسیم جواب معادله. ابتدا فضای حالت معادله را می نویسیم : { { 7 ti=0; tf=20; h=.01; x0=3; v0=0; y1(1)=x0; y2(1)=v0; f='x2'; g='-20*x1-0.5*x2'; n=1; for tt=ti:h:tf-h t=tt;x1=y1(n);x2=y2(n); k1=h*eval(f); L1=h*eval(g); t=tt+h/2;x1=y1(n)+k1/2;x2=y2(n)+l1/2; k2=h*eval(f); L2=h*eval(g); t=tt+h/2;x1=y1(n)+k2/2;x2=y2(n)+l2/2; k3=h*eval(f); L3=h*eval(g); t=tt+h;x1=y1(n)+k3;x2=y2(n)+l3; k4=h*eval(f); L4=h*eval(g); n=n+1; y1(n)=y1(n-1)+1/6*(k1+2*k2+2*k3+k4); y2(n)=y2(n-1)+1/6*(l1+2*l2+2*l3+l4); plot(ti:h:tf,y1) 41

grid on axis([ti tf -8 8]) set(gcf,'color','c') روش سوم : حل توسط تابع در این روش با استفاده از تابع 6 می توانیم معادالت دیفرانسیل را به صورت عددی حل نماییم که همین جا الذم به ذکر است که بگوییم این روش یکی از ساده ترین و دقیق ترین روش ها به شمار می رود و از آن جایی که درصد خطای آن بسیار ناچیز است می توان گفت بهترین روش برای حل معادالت دیفرانسیل استفاده از توابع می باشد. در این روش ابتدا باید معادله ی دیفرانسیل را با تغییر متغییر به فضای حالت برد و سپس با نوشتن یک فانکشن به فرم زیر و نوشتن یک فایل که در آن از فانکشن نوشته شده استفاده می کنیم جواب را به دست می آوریم. : معادله ی دیفرانسیل حرکت یک جرم- فنر ساده به فرم می باشد. مطلوبست ترسیم پاسخ سیستم به ازای { { ابتدا فضای حالت معادله را می نویسیم : حال کافیست با توجه به فضای حالت فانکشن این معادله را بنویسیم : function xdot=f(t,x) xdot=zeros(2,1); xdot(1)=x(2); xdot(2)=-10*x(1); %%%%%%%%%%%%%%%%%%%%%%%% ti=0; tf=20; حال مربوطه را می نویسیم : 41

x0=1; v0=0; [t x]=ode45(@f,ti:.01:tf,[x0 v0]); plot(t,x(:,1)) grid on axis([0 tf -4 4]) ** در این روش حل عددی ماتریس ستون دوم سرعت می باشد و ماتریس دارای دو ستون خواهد بود که ستون اول مکان و به فرم یک بردار ستونی بردار زمان را نشان می دهد. ** تابع 6 سه ورودی می گیرد اولین ورودی نام فانکشن فضای حالت و دومین ورودی بردار زمان و سومین ورودی بردار شرایط اولیه. : مطلوبست ترسیم پاسخ سیستم جرم دمپر که فنر معادله دیفرانسیل حرکت آن به { و صورت است به ازای شرایط اولیه. { { { ابتدا فضای حالت معادله را می نویسیم : حال کافیست با توجه به فضای حالت فانکشن این معادله را بنویسیم : function xdot=f(t,x) xdot=zeros(2,1); xdot(1)=x(2); xdot(2)=-10*x(1)-0.5*x(2)+sin(t); حال مربوطه را می نویسیم : 42

ti=0; tf=20; x0=1; v0=0; [t x]=ode45(@f,ti:.01:tf,[x0 v0]); plot(t,x(:,1)) grid on axis([0 tf -4 4]) مطلوبست حل عددی معادله ی دیفرانسیل مرتبه ی اول وترسیم پاسخ معادله. به ازای : در معادالت مرتبه ی اول نیاز به نوشتن فضای حالت نداریم فقط در معادله ی اصلی اگر وجود داشته باشد باید به جای آن قرار دهیم : function xdot=f(t,x) xdot=zeros(2,1); xdot=cos(t)+x(1); %%%%%%%% m-file %%%%%%%%% ti=0; tf=20; x0=0; [t x]=ode45(@f,ti:.01:tf,x0); plot(t,x) grid on axis([0 tf -4 4]) ** توجه کنید که در اینجا باشد. به صورت یک بردار ستونی خواهد بود که بیانگربردار مکان می 43

دستگاه معادالت )سیستم های دو درجه آزادی( { که : مطلوبست ترسیم پاسخ های دستگاه معادالت توصایف کنناده ی حرکات سیساتم دو درجاه آزادی زیار مای باشاد باه ازای { و {. ابتدا فضای حالت معادله را می نویسیم : { { 7 حال کافیست با توجه به فضای حالت فانکشن این معادله را بنویسیم : function xdot=f(t,x) xdot=zeros(4,1); xdot(1)=x(2); xdot(2)=-10*(2*x(1)-x(3)); xdot(3)=x(4); xdot(4)=-10*(x(3)-x(1)); حال مربوطه را می نویسیم : ti=0; 44

tf=20; x0=1; vx0=0; y0=1; vy0=0; [t x]=ode45(@f,ti:.01:tf,[x0 vx0 y0 vy0]); plot(t,x(:,1),'r',t,x(:,3),'b') grid on axis([0 tf -4 4]) leg('x(t)','y(t)') ** توجه داشته باشید که همیشه خروجی اصلی یعنی ماتریس تعیین می گردد در اینجا ماتریس و ستون دوم و ستون سوم حالت را تعریف نموده ایم. و ستون چهارم با توجه به فضای حالت دارای چهار ستون خواهد بود که ستون اول شامل خواهد بود دقیقا به همان فرمی که فضای روش چهارم : با استفاده از سیمولینک در این روش ابتدا باید با ترسیم بلوک دیاگرام معادله ی دیفرانسیل را از فرم جباری باه حالات دیاگرام جعبه ای تبدیل نمود و سپس آن را در بخش سایمولینک شابیه ساازی نمود. تایپ کنید برای دسترسی به بخش سیمولینک کافیست در محیط. : با استفاده از سیمولینک معادله ی دیفرانسیل پاسخ سیستم را به ازای شرایط اولیه ترسیم نمایید. را حل نمایید وساپس Sine wave s scope 45

حال برای دیدن نمودار پاسخ کافیست پس از کلیک کنید تا نمودار را ببینید. کردن برنامه بر روی بلوک دابل : با استفاده از سیمولینک معادله ی دیفرانسایل وسپس پاسخ سیستم را به ازای شرایط اولیه صفر ترسیم نمایید. را حال نماییاد Sine wave s s scope ث شبیه سازی سیستم های دینامیکی )ساخت انیمشن( در این فصل خواهیم دید که می توان به سادگی سیستمهای دینامیکی را در شبیه سازی کرد و این به این معنی است که ما ابتدا با استفاده از علم دینامیک معادالت دیفرانسیل حرکت یک سیستم را استخراج می کنیم و سپس با حل عددی به روش 6 پاسخ سیستم را بدست می آوریم و در نهایت با یک الگوریتم ساده پاسخ سیستم را به فرم انیمشن نمایش می دهیم. الگوریتم به این فرم خواهد بود که ما ابتدا بردار و بردار مسیر حرکت را بدست می آوریم و سپس با ترسیم نقطه به نقطه ی این مجموعه نقاط در حلقه ی باعث ایجاد حرکت متحرک اشیا گرافیکی خواهیم شد. 46

اصول ساخت انیمشن با استفاده از دستور که در حلقه ی نوشته می شود : معموال اگر چند شی گرافیکی در انیمشن موجود باشد باید در ابتدای حلقه ی در حلقه از دستور را نوشت و بالفاصله پس از اولین دستور دستور استفاده نمود. درون حلقه ی باید از دستور در خط ماقبل آخر و یا به عبارت دیگر پس از تمامی دستورهای استفاده نمود. 7 ذکر چند می پردازیم : 3 درون حلقه باید در آخرین سطر دستور را نوشت که در واقع این دستور باعث می شود که انیمشن را ببینیم. حال برای اینکه اصول باال را بهتر درک کنیم به : کدی بنویسید که توپی را نشان دهد که بر روی مسیر تابع کند و مسیر حرکت منحنی را هم ترسیم نماید. حرکت rate=.05; x=0:rate:2*pi; y=sin(x); n=length(x); for i=1:n hold off plot(x(i),y(i),'.r','markersize',18) hold on plot(x(1:i),y(1:i)) grid on axis([0 8-4 4]) getframe; : کدی بنویسید که توپی را نشان دهد که بر روی مسیر دایره ای به شعاع 7 حرکت کند و مسیر حرکت منحنی را هم ترسیم نماید. 47

rate=.05; r=2; t=0:rate:2*pi; x=r*cos(t); y=r*sin(t); n=length(t); for i=1:n hold off plot(x(i),y(i),'.r','markersize',18) hold on plot(x(1:i),y(1:i)) grid on axis equal axis([-4 4-4 4]) getframe; : برنامه ای بنویسید که حرکت پرتابه را به صورت متحرک نشان دهد و به صورت انیمشن نشان دهید که برد پرتابه به ازای زاویه ی ماکزیمم خواهد شد. g=10; v0=20; alpha=pi/8; X1=[]; Y1=[]; X2=[]; Y2=[]; X3=[]; Y3=[]; rate=.03; a=6; p=1; while a>3 tf=2*v0*sin(alpha)/g; for t=0:rate:tf 48

hold off x=v0*cos(alpha)*t; y=-.5*g*t^2+v0*sin(alpha)*t; plot(x,y,'.r','markersize',25) hold on if p==1 X1=[X1 x]; Y1=[Y1 y]; plot(x1,y1) elseif p==2 X2=[X2 x]; Y2=[Y2 y]; plot(x1,y1,x2,y2) elseif p==3 X3=[X3 x]; Y3=[Y3 y]; plot(x1,y1,x2,y2,x3,y3) grid on axis square axis([0 44-24 24]) getframe; set(gcf,'color','c') p=p+1; alpha=alpha+pi/8; a=a-1; disp([' R1=' num2str(x1()) ' R2=' num2str(x2()) ' R3=' num2str(x3())]) : فانکشنی بسازید که با گرفتن مختصات ابتدا و انتهایی فنر فنری را ترسیم نماید. function myspring(a,b) n=8; L=sqrt((a(1)-b(1))^2+(a(2)-b(2))^2); x=0:.01:l; 49

y=.3*sin(n*pi*x/l); theta=atan((b(2)-a(2))/(b(1)-a(1))); X=cos(theta)*x-sin(theta)*y+a(1); Y=sin(theta)*x+cos(theta)*y+a(2); plot(x,y,'r','linewidth',2) hold on plot(a(1),a(2),'.k','markersize',15) plot(b(1),b(2),'.k','markersize',15) grid on axis([-8 8-8 8]) : مطلوبست شبیه سازی پدیده ی تشدید با استفاده از یک جرم دمپر که با - فنر - نیروی هارمونیک سینوسی تحریک می شود.)برای نمایش فنر از فانکشن باال استفاده نمایید( ابتادا باا نوشاتن دینامیاک سیساتم معادلاه ی حرکات را بدسات مای آوریام کاه باه فارم خواهد بود وسپس کافیست با اساتفاده از روش 6 آن را حل عددی نماییم تا بردار مقادیر مکان را بدست آوریم و در نهایت آن را شبیه سازی نماییم. function xdot=fq(t,x) M=1; k=10; c=0; xdot=zeros(2,1); xdot(1)=x(2); xdot(2)=(sin(3.16*t)-c*x(2)-k*x(1))/m; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% حال مربوطه را می نویسیم : M=1; k=10 c=0; x0=0; rate=.05; 51

[t x]=ode45(@fq,0:rate:100,[x0 0]); N=length(t); set(gcf,'color','c') for i=1:n hold off myspring([0 x(i,1)],[0 4]) hold on plot(0,x(i,1),'rs','markersize',17,'markerfacec olor','b') plot([-2 2],[4 4],'g','linewidth',3) plot(0,4,'.k','markersize',15) grid on axis square axis([-8 8-8 8]) getframe; : حرکت یک آونگ ساده را شبیه سازی نمایید. ابتادا باا نوشاتن دینامیاک سیساتم معادلاه ی حرکات را بدسات مای آوریام کاه باه فارم خواهد بود وساپس کافیسات باا اساتفاده از روش 6 آن را حال عددی نماییم تا بردار مقادیر θ را بدست آوریم و در نهایت آن را شبیه سازی نماییم. function xdot=fq(t,x) g=10; l=2; m=1; xdot=zeros(2,1); xdot(1)=x(2); xdot(2)=-g/l*sin(x(1)); 51

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% حال مربوطه را می نویسیم : alpha0=pi/2; l=2; rate=.05; m=1; [t x]=ode45(@fq,0:rate:18,[alpha0 0]); X=l*sin(x(:,1)); Y=-l*cos(x(:,1)); N=length(t); for i=1:n hold off plot([-1 1],[0 0],'g','linewidth',3) hold on plot([x(i) 0],[Y(i) 0],'b','linewidth',3) plot(0,0,'.k','markersize',25) plot(x(i),y(i),'.r','markersize',30) grid on axis square axis([-4 4-4 4]) getframe; ** به جای دستور نمود البته الزم به ذکر است که شود. می توان از دستور نیز برای ایجاد انیمشن استفاده توصیه می در اکثر مواقع استفاده از دستور 52

آموزش ساخت نرم افزار با محیط گرافیکی است که با استفاده از آن می توان برنامه ای ایجاد کرد که بتواند بین کاربر و برنامه کامپیوتری ارتباط برقرار کند به طوری که کاربر فقط از صفحه کلید و ماوس اطالعات مورد نیاز را وارد کرده و اجرا شود.برای وارد شدن به فضای فقط کافیست در تایپ کنید. حال به توضیح برخی از کنترل های رابط می پردازیم : که برای : دکمه مستطیلی شکلی است که با کلیک کردن روی این دکمه دستوراتی کلید توسط کاربر تعریف شده اند اجرا می شود. : با جا به جا کردن لغزنده کنترل و قرار دادن آن در مکان خاصی از طول مقداری از بازه تعریف شده انتخاب می شود. : یک کنترل گرافیکی برای گرفتن ورودی و یا چاپ خروجی. : کنترلی است که متن یا عددی را به صورت نوشته نمایش می دهد و بیشتر به عنوان برچسب استفاده می شود. : یک کنترل گرافیکی برای نمایش نمودارهای رسم شده می باشد. صفحه. : کنترل مستطیلی شکلی است برای تفکیک دکمه ها و متن ها و نظم بخشیدن به : یک کنترل گرافیکی می باشد که با روشن یا خاموش بودن آن می توان تغییرات دلخواهی را در نرم افزار ایجاد کرد. حال به معرفی چند دستور پرکاربرد در زمینه ی کار با می پردازیم : 53

: استفاده کرد که خروجی آن به صورت رشته ای خواهد بود.. برای گرفتن ورودی از کاربر می توان ازین دستور : چاپ خروجی در که در آن باید به صورت رشته ای باشد. : باید در سطر قبل از دستور ترسیم نوشته شود. آدرس دهی برای رسم منحنی در نمودار مشخص که حتما خواهد بود و برای انجام محاسبات دیگر نیازی به تبدیل ندارد. : فراخوانی مقدار لغزنده که به صورت عددی بودن یک خواهد بود و در غیر این صورت صفر. : خروجی این دستور در صورت روشن روش کلی ساخت نرم افزار برای ساخت یک بهتر است ابتدا کد مربوطه را در محیط تست نمود و پس از رفع خطاهای احتمالی برنامه و اطمینان از خروجی مطلوب حال آن را به سادگی می توان تبدیل به نمود.روش این تبدیل به این فرم خواهد بود که تمام کد را در )با راست کلیک کردن برروی دکمه ی مورد نظر می توان به آن دسترسی پیدا کرد( دکمه ی مورد نظر کپی کرده و تغییرات الزم را اعمال می کنیم. تغییرات معموال شامل تغییر در گرفتن ورودی چاپ مقدار و یا نمایش نمودار خروجی می باشد که با ذکر ی با آن آشنا می شویم. : نرم افزاری برای ترسیم بسازید به گونه ای که با گرفتن تابعی دلخواه و با فشار دادن دکمه تابع وارد شده را ترسیم نماید. 54

در ابتدا با تایپ نرم افزار ایجاد می کنیم. در محیط یک محیط جدید برای ساخت خواهاد باود را سااپس بااا در کااردن آیااتم هااای الزم کااه در ایاان مثااال شااامل و یک برای زیباتر شدن شکل ظاهری نارم افازار ایجاد می کنیم که در نهایت به فرم زیر خواهد شد. برای تنظیمات رنگ و یا خواص دیگر اشیا می توان با دابل کلیک برروی آن ها به قسمت مشخصات آن دسترسی پیدا کرد. 55

مخصوص به خود صدا زد لذا برای ** برای فراخوانی هر رابط کنترلی باید آن را با آن را مربوطه می توان با کلیک بر روی آن در سمت چپ وپایین آگاهی از مشاهده نمود. حال کافیست کد مربوطه را در کالبک دکمه کپی نموده و تغییرات الزم را اعمال کنیم. f=get(handles.edit1,'string'); axes(handles.axes1) ezplot(f( حال ساخت این نرم افزار به همین سادگی به اتمام رسیده و می توان از آن استفاده نمود. : نرم افزاری بسازید که با گرفتن تابع و بازه ی دلخواهی انتگرال آنرا به صورت عددی محاسبه نماید و حاصل انتگرال را در یک نمایش دهد. ابتدا یک نماییم. به فرم زیر ایجاد نمایید و سپس کافیست کد اصلی را در کالبک دکمه کپی y=get(handles.edit1,'string'); a=get(handles.edit2,'string'); a=str2num(a); b=get(handles.edit3,'string'); b=str2num(b); s=0; dx=.01; for x=a:dx:b s=s+eval(y); s=s*dx; s=num2str(s); set(handles.edit4,'string',s) 56

در اینجا ساخت این نرم افزار هم به اتمام رسید و اکنون می توان از آن استفاده نمود. 57

و اما در پایان با شعری از فریدون مشیری این جزوه را به پایان می برم : زندگی صحنه ی یکتای هنرمندی ماست هر کسی نغمه ی خود خواند و از صحنه رود صحنه پیوسته به جاست خرم آن نغمه که مردم بسپارند به یاد 58

مولف : سینا نوری زاده دانشجوی مهندسی مکانیک دانشگاه خواجه نصیر 59