Bind
[[meta bind study]]مطالب
- مدرس: علی جمشیدزاده
- کلاس: متلب مقدماتی
- لینک کد های کلاس : لینک کد در گیت هاب
- لینک جزوه کلاس : لینک جزوه کلاس در سایت
- لینک بخش راهنمایی خود متلب: لینک سایت متلب بخش راهنما
سرفصل متلب (4 جلسه)
بخش 1: مبانی و اصول اولیه متلب
- مقدمهای بر محیط متلب:
- پنجره دستور (Command Window)
- فضای کاری (Workspace)
- ویرایشگر (Editor) و ایجاد فایلهای اسکریپت (.m files)
- پنجره راهنما (Help) و نحوه جستجوی موثر دستورات و توابع
- متغیرها، آرایهها و ماتریسها:
- تعریف متغیرها و انواع دادههای اصلی
- ایجاد بردارها و ماتریسها: مستقیم، با استفاده از عملگر کولون (:)، توابع
linspace,logspace - اندیسگذاری و دسترسی به عناصر ماتریسها
- عملیات پایهای روی ماتریسها: جمع، تفریق، ضرب ماتریسی و ضرب درایهبهدرایه، ترانهاده، معکوس، دترمینان
- توابع ریاضی و داخلی مهم:
- توابع مثلثاتی، نمایی، لگاریتمی، قدر مطلق و …
- توابع مربوط به ماتریسها:
size,length,sum,mean,diag,eye,zeros,ones,rand
بخش 2: برنامهنویسی در متلب
- ترسیمات دوبعدی پایه:
- دستور
plotو سفارشیسازی اولیه: عنوان، برچسب محورها، لجند، شبکه (title,xlabel,ylabel,legend,grid) - ترسیم چندین نمودار روی یک شکل (
hold on,hold off,subplot)
- دستور
- فایلهای اسکریپت (Script Files) و توابع (Function Files):
- تفاوت اسکریپت و تابع
- نحوه تعریف تابع، ورودیها و خروجیها
- فضای کاری محلی توابع
- ساختارهای کنترل جریان:
- دستورات شرطی:
if-elseif-else,switch-case - عملگرهای رابطهای و منطقی
- دستورات شرطی:
- حلقههای تکرار:
- حلقه
for - حلقه
while - دستورات
breakوcontinue
- حلقه
- ورود و خروج دادهها:
- خواندن و نوشتن دادهها از/به فایلهای متنی ساده (مانند
.txtیا.csv) با توابعloadوsaveیاdlmread/dlmwrite(در صورت وجود زمان)
- خواندن و نوشتن دادهها از/به فایلهای متنی ساده (مانند
بخش ۳: جعبهابزار کنترل سیستم (Control System Toolbox)
- نمایش سیستمهای خطی تغییرناپذیر با زمان (LTI):
- تابع تبدیل (Transfer Function - TF):
- ایجاد مدل تابع تبدیل با دستور
tf - مشخص کردن صورت و مخرج
- ایجاد مدل تابع تبدیل با دستور
- فضای حالت (State-Space - SS):
- ایجاد مدل فضای حالت با دستور
ss - مشخص کردن ماتریسهای
- ایجاد مدل فضای حالت با دستور
- مدل صفر-قطب-بهره (Zero-Pole-Gain - ZPK):
- ایجاد مدل ZPK با دستور
zpk
- ایجاد مدل ZPK با دستور
- تبدیل بین مدلهای مختلف (
tf,ss,zpk)
- تابع تبدیل (Transfer Function - TF):
- اتصال سیستمها:
- اتصال سری (
seriesیا عملگر*) - اتصال موازی (
parallelیا عملگر+) - اتصال فیدبک (
feedback)
- اتصال سری (
- تحلیل پاسخ زمانی:
- پاسخ پله (
step) و تحلیل مشخصات آن (زمان صعود، زمان نشست، بیشینه جهش، زمان پیک) - پاسخ ضربه (
impulse) - پاسخ به ورودی دلخواه (
lsim) - دستور
stepinfoبرای استخراج مشخصات پاسخ پله
- پاسخ پله (
- تحلیل پاسخ فرکانسی:
- نمودار بود (Bode plot) با دستور
bodeوmargin - نمودار نایکوئیست (Nyquist plot) با دستور
nyquist - نمودار نیکولز (Nichols chart) با دستور
nichols
- نمودار بود (Bode plot) با دستور
- تحلیل مکان هندسی ریشهها (Root Locus):
- ترسیم مکان هندسی ریشهها با دستور
rlocus - ابزار گرافیکی
rltool(یاcontrolSystemDesigner) برای تحلیل و طراحی تعاملی
- ترسیم مکان هندسی ریشهها با دستور
- استخراج اطلاعات از مدلها:
- قطبها و صفرها (
pole,zero,pzmap) - بهره حالت ماندگار (
dcgain)
- قطبها و صفرها (
بخش ۴: طراحی مقدماتی کنترلکننده و شبیهسازی
- مقدمهای بر طراحی کنترلکنندههای PID:
- زیگلر نیکولز
- مفهوم عملکرد بخشهای تناسبی (P)، انتگرالی (I) و مشتقی (D)
- ایجاد شیء PID با دستور
pid - تنظیم دستی ضرایب PID و مشاهده اثر آن بر پاسخ سیستم حلقه بسته
- استفاده از ابزار
pidTunerبرای تنظیم خودکار ضرایب PID (معرفی و یک مثال)
- شبیهسازی سیستمهای حلقه بسته:
- ساخت سیستم حلقه بسته با استفاده از توابع اتصال (مثلاً
feedback) - تحلیل پاسخ زمانی و فرکانسی سیستم حلقه بسته
- ساخت سیستم حلقه بسته با استفاده از توابع اتصال (مثلاً
- مفاهیم پایداری:
- بررسی پایداری از روی قطبها، نمودار نایکوئیست و مکان هندسی ریشهها
- مقدمهای بر Simulink:
- معرفی بسیار کوتاه محیط Simulink
- ساخت یک مدل بلوکی ساده برای یک سیستم LTI و کنترلکننده PID
- اجرای شبیهسازی و مشاهده خروجی با بلوک Scope
جلسه 1 1404-03-21
مدیریت محیط
clc: پاک کردن پنجره دستور (Command Window).clear: پاک کردن همهی متغیرها از حافظه (Workspace).clear A: فقط متغیرAرا پاک میکند.
who: نمایش لیست کوتاه نام متغیرها.whos: نمایش لیست متغیرها با جزئیات کامل (اندازه و نوع).close all: بستن تمام پنجرههای نمودار (Figure).doc name: نمایش راهنمای کامل و جامع دستورname(بهتر ازhelp).
ساخت ماتریس و بردار
:(کولون): ساخت دنباله عددی با گام ثابت. (مثال:1:2:10)linspace(a, b, n): ساخت بردار باnنقطه بینaوb(فاصلهها یکسان).logspace(a, b, n): ساخت بردار باnنقطه بین و (فاصلهها لگاریتمی).zeros(m, n): ساخت ماتریسm×nبا تمام درایههای صفر.ones(m, n): ساخت ماتریسm×nبا تمام درایههای یک.eye(n): ساخت ماتریس همانیn×n(قطر اصلی ۱، بقیه صفر).rand(...): اعداد تصادفی با توزیع یکنواخت (بین ۰ و ۱).randn(...): اعداد تصادفی با توزیع نرمال (گوسی).randi([min, max], ...): اعداد صحیح تصادفی در یک بازه مشخص.
توابع ریاضی و محاسباتی
- ضرب ماتریسی (
*): ضرب استاندارد ماتریسها طبق قوانین ریاضی. - ضرب درایهبهدرایه (
.*): ضرب هر عنصر در عنصر متناظرش. (برای توان و تقسیم هم.^و./وجود دارد). A'(ترانهاده): جابجایی سطر و ستون ماتریسA.inv(A): محاسبه معکوس ماتریسA.det(A): محاسبه دترمینان ماتریسA.sum,mean,max,min: توابع آماری که به طور پیشفرض روی ستونها عمل میکنند.sum(A, 2): مجموع سطرها.sum(A, 'all'): مجموع کل عناصر.
round,floor,ceil: توابع گرد کردن (به ترتیب: به نزدیکترین، به پایین، به بالا).mod(a, m): محاسبه باقیمانده تقسیمaبرm.
جلسه 2 1404-03-22
دستورات ترسیم نمودار (Plotting)
plot(x, y): دستور اصلی برای ترسیم نمودار دوبعدیyبر حسبx.plot(x, y, '--r*'): ترسیم نمودار با استایل سفارشی (خطچین قرمز با نشانگر ستاره).title('...'): افزودن عنوان به بالای نمودار.xlabel('...'): تعیین برچسب برای محور افقی (x).ylabel('...'): تعیین برچسب برای محور عمودی (y).grid on: فعال کردن خطوط راهنمای شبکهای روی نمودار.legend('A', 'B'): ایجاد راهنما برای تشخیص نمودارهای مختلف در یک تصویر.hold on: نگه داشتن نمودار فعلی تا نمودارهای بعدی روی همان محور رسم شوند.hold off: غیرفعال کردن حالتhold on.figure: ایجاد یک پنجره جدید برای رسم نمودار.subplot(m, n, p): تقسیم پنجره بهmسطر وnستون و انتخاب خانهpبرای رسم نمودار بعدی.
اسکریپت در مقابل تابع (Script vs. Function)
اسکریپت (Script):
- یک فایل
.mحاوی مجموعهای از دستورات. - روی فضای کاری اصلی (Base Workspace) عمل میکند (متغیرها بعد از اجرا باقی میمانند).
- ورودی و خروجی رسمی ندارد.
- برای اجرای یک سری کارهای پشت سر هم استفاده میشود.
- یک فایل
تابع (Function):
- یک فایل
.mکه با کلمه کلیدیfunctionشروع میشود. - فضای کاری محلی و ایزوله خود را دارد (متغیرهای داخلی بعد از اجرا از بین میروند).
- ورودی و خروجی مشخص و رسمی دارد.
- برای ساخت ابزارهای ماژولار و قابل استفاده مجدد ایدهآل است.
- نکته مهم: نام فایل باید دقیقاً با نام تابع یکسان باشد.
- یک فایل
disp('...'): نمایش یک متن یا مقدار متغیر در پنجره دستور.
دستورات کنترلی و منطقی
- **عملگرهای رابطهای: > (بزرگتر)، < (کوچکتر)، == (برابر)، ~= (نابرابر).
- عملگرهای منطقی: && (و منطقی)، || (یا منطقی)، ~ (نقیض).
if-elseif-else: ساختار شرطی برای تصمیمگیری و اجرای کد بر اساس درست یا غلط بودن یک شرط.switch-case: ساختار شرطی بهینهتر برای مقایسه یک متغیر با چندین مقدار مشخص و گسسته.input('پیام'): نمایش یک پیام و دریافت ورودی از کاربر.
حلقههای تکرار
for: حلقه تکرار که برای تعداد دفعات مشخص اجرا میشود (مثلاً پیمایش اعضای یک بردار).length(vector): طول (تعداد اعضای) یک بردار را برمیگرداند.
while: حلقه تکرار که تا زمانی که یک شرط برقرار باشد به اجرا ادامه میدهد.break: دستور خروج فوری از حلقهیforیاwhile.continue: توقف تکرار فعلی و پرش به ابتدای تکرار بعدی حلقه.
ورودی و خروجی داده
save('file.mat', 'var1', ...): ذخیره متغیرهای مشخص شده در یک فایل باینری متلب (.mat).load('file.mat'): بارگذاری متغیرها از یک فایل.matبه فضای کاری.writematrix(A, 'file.csv'): نوشتن یک ماتریس (A) در یک فایل متنی مانندcsv.(مناسب برای اکسل).readmatrix('file.csv'): خواندن دادههای عددی از یک فایل متنی و وارد کردن آن به عنوان یک ماتریس.
جلسه 3 1404-03-22
ساخت مدلهای سیستم LTI
tf(num, den): ساخت مدل تابع تبدیل (Transfer Function).s = tf('s'): روش سادهتر برای نوشتن توابع تبدیل به صورت جبری.ss(A, B, C, D): ساخت مدل فضای حالت (State-Space).zpk(Z, P, K): ساخت مدل صفر-قطب-بهره (Zero-Pole-Gain).tf(sys)،ss(sys)،zpk(sys): تبدیل یک مدل به نمایش دیگر.
اتصال و ترکیب سیستمها
G2 * G1: اتصال سری (Series).G1 + G2: اتصال موازی (Parallel).feedback(G, H): اتصال فیدبک منفی با مسیر پیشروGو مسیر بازخوردH.
تحلیل پاسخ زمانی
step(sys): رسم و تحلیل پاسخ پله (Step Response).impulse(sys): رسم و تحلیل پاسخ ضربه (Impulse Response).stepinfo(sys): استخراج مشخصات عددی پاسخ پله (زمان نشست، بیشینه جهش و…).lsim(sys, u, t): شبیهسازی پاسخ سیستم به یک ورودی دلخواهu.
تحلیل پاسخ فرکانسی
bode(sys): رسم نمودار بود (Bode plot) برای تحلیل اندازه و فاز.margin(sys): نمایش حاشیه بهره (Gain Margin) و حاشیه فاز (Phase Margin) روی نمودار بود.nyquist(sys): رسم نمودار نایکوئیست برای تحلیل پایداری.
تحلیل مکان هندسی ریشهها
rlocus(sys): رسم مکان هندسی ریشهها (Root Locus) برای تحلیل اثر تغییر بهره.controlSystemDesigner(sys): باز کردن ابزار گرافیکی و تعاملی برای طراحی کنترلر.
استخراج اطلاعات از مدل
pole(sys): پیدا کردن قطبهای سیستم.zero(sys): پیدا کردن صفرهای سیستم.pzmap(sys): رسم نقشه قطب-صفر در صفحه مختلط.dcgain(sys): محاسبه بهره حالت ماندگار سیستم (پاسخ نهایی به ورودی پله).
جلسه 4 1404-03-23
مبانی کنترلکننده PID
بخش تناسبی (P - Proportional):
- کارکرد: واکنش به خطای لحظهای.
- اثر: افزایش سرعت پاسخ. ممکن است باعث خطای حالت ماندگار شود.
بخش انتگرالی (I - Integral):
- کارکرد: واکنش به مجموع خطاهای گذشته.
- اثر: حذف کامل خطای حالت ماندگار. افزایش بیش از حد آن باعث نوسان (Overshoot) میشود.
بخش مشتقی (D - Derivative):
- کارکرد: پیشبینی رفتار آینده خطا (مثل یک ترمز).
- اثر: کاهش نوسان و بهبود پایداری. به نویز حساس است.
روش زیگلر-نیکولز (Ziegler-Nichols):
- یک روش تجربی و کلاسیک برای پیدا کردن یک نقطه شروع مناسب برای ضرایب PID. مقادیر آن بهینه نیستند و نیاز به تنظیم دقیقتر دارند.
پیادهسازی در متلب و تحلیل پایداری
pid(Kp, Ki, Kd): دستور اصلی برای ایجاد یک شیء کنترلکننده PID در محیط متلب.pidTuner(P, 'pid'): باز کردن ابزار گرافیکی و خودکار متلب برای تنظیم بهینه ضرایب PID برای پلانتP.- اسلایدر Response Time: برای سریعتر یا کندتر کردن پاسخ سیستم.
- اسلایدر Transient Behavior: برای تنظیم بین پاسخ تهاجمی (Aggressive) و مقاوم (Robust).
- دکمه Export: برای صادر کردن کنترلر طراحیشده به محیط کاری (Workspace) متلب.
feedback(C*P, 1): ساخت سیستم حلقه-بسته با فیدبک واحد از کنترلرCو پلانتP.- تحلیل پایداری از روی قطبها:
- یک سیستم پایدار است اگر بخش حقیقی تمام قطبهای حلقه-بسته آن منفی باشد.
pole(T): دستور پیدا کردن قطبهای سیستم حلقه-بستهT.pzmap(T): رسم نقشه قطب-صفر برای مشاهده گرافیکی مکان قطبها.
شبیهسازی در Simulink
simulink: دستوری که محیط سیمولینک را باز میکند.
بلوکهای کلیدی در Simulink:
Step: منبع سیگنال برای ایجاد یک ورودی پله واحد.Transfer Fcn: بلوکی برای تعریف یک سیستم از طریق تابع تبدیل آن.Scope: نمایشگر خروجی برای مشاهده سیگنالها (مانند یک اسیلوسکوپ).Sum: بلوک جمعکننده. برای فیدبک منفی، ورودیهای آن را روی|+-تنظیم میکنیم تا خطا را محاسبه کند.PID Controller: بلوک اختصاصی برای کنترلکننده PID. ضرایبP,I,Dرا میتوان مستقیماً در آن وارد کرد.Mux(Multiplexer): برای ادغام چند سیگنال در یک خط و نمایش همزمان آنها روی یکScope.
مراحل ساخت مدل حلقه-بسته در Simulink:
- ورودی مرجع: از بلوک
Stepاستفاده کنید. - محاسبه خطا: خروجی
Stepرا به ورودی+بلوکSumو خروجی نهایی سیستم را به ورودی-آن وصل کنید. - اعمال کنترلر: خروجی
Sum(که همان خطا است) را به ورودی بلوکPID Controllerوصل کنید. - اعمال به پلانت: خروجی
PID Controllerرا به ورودی بلوکTransfer Fcn(پلانت) وصل کنید. - مشاهده خروجی: خروجی
Transfer Fcnرا بهScopeوصل کنید تا پاسخ نهایی را ببینید. - اجرا: روی دکمه Run (▶️) کلیک کنید تا شبیهسازی اجرا شود.
- نکته مهم: دکمه Tune… در تنظیمات بلوک
PID Controller، ابزارpidTunerرا مستقیماً از داخل سیمولینک باز میکند.
تمرین پایانی
سوال 1: ساخت و محاسبات ماتریسی
- یک ماتریس
Aبا ابعاد 4x4 بسازید که شامل اعداد صحیح 1 تا 16 باشد. - یک ماتریس همانی
Bبا ابعاد 4x4 بسازید و سپس تمام درایههای آن را در عدد 5 ضرب کنید. - با استفاده از اندیسگذاری، ستون سوم ماتریس
Aرا استخراج کرده و در متغیری به نامcol_Aذخیره کنید. - حاصل دو عملیات زیر را محاسبه کرده و در متغیرهای
C1وC2ذخیره کنید:C1 = A .* B(ضرب درایهبهدرایه)C2 = A * B(ضرب ماتریسی)
- به طور خلاصه در یک کامنت (با علامت
%) توضیح دهید که چرا مقادیرC1وC2با یکدیگر متفاوت هستند.
سوال 2: تحلیل دادههای ساده
ماتریس زیر بیانگر میزان فروش (به میلیون تومان) سه محصول مختلف در چهار ماه اول سال است. هر سطر نمایانگر یک ماه و هر ستون نمایانگر یک محصول است.
sales = [22 35 15; 25 38 18; 30 40 20; 28 33 17];- اسکریپتی بنویسید که مجموع فروش هر محصول در این چهار ماه را محاسبه و نمایش دهد.
- میانگین فروش هر محصول در این چهار ماه چقدر بوده است؟
- مجموع کل فروش در ماه سوم چقدر بوده است؟ (مجموع درایههای سطر سوم)
- د) با استفاده از تابع
size، تعداد ماهها و تعداد محصولات را از ماتریس استخراج کرده و در خروجی با دستورdispنمایش دهید.
سوال 3: پروژه کنترلر PID برای سروو موتور
برای پلانت یک سروو موتور با تابع تبدیل ، یک کنترلر PID طراحی کنید به طوری که پاسخ پله حلقه-بسته آن دارای بیشینه جهش (Overshoot) کمتر از ۱۰٪ و زمان نشست (Settling Time) کمتر از ۲.۵ ثانیه باشد.
- در متلب، با استفاده از ابزار
pidTunerکنترلر بهینه را پیدا کرده و آن را به Workspace منتقل کنید. - پاسخ پله سیستم نهایی را با
stepرسم کرده و باstepinfoوmarginمشخصات زمانی و پایداری آن را تأیید کنید. - در Simulink، همان سیستم حلقه-بسته را با ضرایب PID بدست آمده شبیهسازی کرده و خروجی
Scopeرا با نمودارstepمتلب مقایسه کنید تا از صحت کار خود مطمئن شوید.
سوال 4: پروژه سرکوب اغتشاش
برای پلانت که در ورودی آن یک اغتشاش پله (d) وارد میشود، یک کنترلر PI طراحی کنید به طوری که حاشیه فاز (Phase Margin) سیستم حلقه-باز حداقل ۶۰ درجه باشد. هدف اصلی، تحلیل و مشاهده توانایی کنترلر در سرکوب اغتشاش است.
- در متلب، ضرایب یک کنترلر PI را طوری تنظیم کنید که شرط حاشیه فاز برآورده شود.
- تابع حساسیت () که نشاندهنده اثر اغتشاش بر خروجی است را محاسبه کرده و پاسخ پله آن را تحلیل کنید.
- در Simulink، مدل حلقه-بسته را همراه با یک بلوک
Stepبرای اغتشاش (که بعد از کنترلر و قبل از پلانت اضافه میشود) بسازید. - شبیهسازی را اجرا کرده و مشاهده کنید که کنترلر چگونه پس از ورود اغتشاش، خروجی را به حالت مطلوب بازمیگرداند. این رفتار را با تحلیل تابع حساسیت در متلب مقایسه کنید.