MatlabTips
891 subscribers
462 photos
73 videos
54 files
304 links
آموزش MATLAB با "استفاده از ویدئو و متن" در سطوح مبتدی تا پیشرفته
پاسخ به سوالات تخصصی:
@roholazandie
Download Telegram
این نحوه نمایش قدرتمند است و تمامی جنبه هایی که ما از یک سیستم خطی ( وتغییر ناپذیر نسبت به زمان) میخواهیم را دارد. به طور مثال اگر سیستم ساده جسم متصل به فنر را در نظر بگیریم معادلات آن به صورت زیر خواهند بود(این معادلات به صورت گسسته در آمده اند)( معادلات از قوانین نیوتون به دست آمده اند و با جزییات آنها در اینجا کاری نداریم)
که در آن x یک دوتایی به صورت x=(r,v) است که مکان و سرعت جسم را نشان می دهند. اگر بخواهیم در 50 فریم زمانی معادله بالا را در متلب حل کنیم کافی است مانند سابق دیفرانسیل های زمانی کوچکی گرفته و معادله را به صورت زیر حل کنیم. در این جا u ورودی به صورت یک ضربه است که در زمان صفر مقدار 1 دارد و پس از آن صفر است.
Fs = 5;
dt = 1/Fs;
N = 50;
t = dt*(0:N-1);

A = [cos(dt) sin(dt);-sin(dt) cos(dt)];
B = [1-cos(dt);sin(dt)];
C = [-1 0];
D = 1;

u = [1 zeros(1,N-1)];

x = [0;0];
for k = 1:N
y(k) = C*x + D*u(k);
x = A*x + B*u(k);
end

stem(t,y,'v','filled')
xlabel('t')


که خروجی آن به صورت زیر خواهد بود:
تبدیل لاپلاس روشی جالب برای ساده سازی مساله است به این صورت که شما معادلات دیفرانسیل مساله را به یک تابع به نام تابع تبدیل، تغییر می دهید و در آن ورودی شما(یک پالس به جسمِ متصل به فنر) یک خروجی (به صورت حرکت جسمِ متصل به فنر) خواهد داشت. در واقع هر سیستم دینامیکی (با شرایط LTI) را می توان به صورت زیر نشان داد:
در نرم افزار متلب به صورت پیش فرض تابع ss2tf قرار داده شده است که ss(State space) را به tf(transfer function) تبدیل می کند. فقط کافی است شما ماتریس ها را به عنوان ورودی به آن بدهید. پس از آن ورودی(ضربه وارد به جسم) را با فیلتری با مشخصات تعیین شده از سوی تابع ss2tf به آن می دهید تا تمام خروجی را برای شما تولید کند:

[b,a] = ss2tf(A,B,C,D);
yt = filter(b,a,u);
stem(t,yt,'d','filled')
xlabel('t')

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

@MatlabTips
#For_intermediate, #For_Advanced
#Dynamic_Systems, #LTI_Systems, #Laplace_Transform, #ss2tf
نویسنده:(#A_2)
🔵ترکیب تبدیلات لاپلاس🔵
سطح پیچیدگی:🌕🌕🌕🌕🌑
پیش‌نیاز:(کد نویسی متوسط و پیشرفته)
برای:(متوسط و پیشرفته)


همانطور که در بخش قبل دیدیم تابع های تبدیل مانند تبدیل لاپلاس بازنمایی جدیدی از سیستم در فضای جدیدی ارائه می دهند. این بازنمایی دارای مزیت های زیادی است. از آن جمله که می توان تمام سیستم را به صورت یک تبدیل کننده G دید که ورودی می گیرد و خروجی مشخصی تولید می کند. این طرز نمایش همچنین کمک می کند که سیستم های پیچیده را به اجزای کوچک تر بشکنیم و هر قسمت را جداگانه تحلیل و در نهایت با عملیات بسیار ساده آن ها را کنار هم قرار دهیم. حالت های زیرا را در نظر بگیرید
برای حالت نخست که دو سیستم به صورت سری پشت سر هم قرار گرفته اند کافی است شما تابع انتقال آن ها را در هم ضرب کنید. برای حالت موازی کافی است تابع انتقال ها را با هم جمع کنید و برای فیدبک می توان به صورت زیر عمل کرد:
Fs = 5;
dt = 1/Fs;
N = 50;
t = dt*(0:N-1);

A1 = [cos(dt) sin(dt);-sin(dt) cos(dt)];
B1 = [1-cos(dt);sin(dt)];
C1 = [-1 0];
D1 = 1;

[b1,a1] = ss2tf(A1,B1,C1,D1);
G1 = tf(b1,a1);

A2 = [sin(dt) cos(dt);-cos(dt) sin(dt)];
B2 = [sin(dt);1-cos(dt)];
C2 = [-1 1];
D2 = 0;

[b2,a2] = ss2tf(A2,B2,C2,D2);
G2 = tf(b2,a2);

G_Serie = G1*G2
G_Parallel = G1+G2
G_Feedback = G1*inv(1+G1*G2)

البته خود متلب برای این کار توابع آماده ای هم دارد که در شکل اول دیدیم.
وقتی توابع G را داشته باشید به سادگی با فراخوانی صورت و مخرج آن می توانید با استفاده از دستور filter خروجی نهایی را بگیرید.
Fs = 5;
dt = 1/Fs;
N = 50;
t = dt*(0:N-1);

A1 = [cos(dt) sin(dt);-sin(dt) cos(dt)];
B1 = [1-cos(dt);sin(dt)];
C1 = [-1 0];
D1 = 1;

[b1,a1] = ss2tf(A1,B1,C1,D1);
G1 = tf(b1,a1);

A2 = [sin(dt) cos(dt);-cos(dt) sin(dt)];
B2 = [sin(dt);1-cos(dt)];
C2 = [-1 1];
D2 = 0;

[b2,a2] = ss2tf(A2,B2,C2,D2);
G2 = tf(b2,a2);

G_Serie = G1*G2

u = [1 zeros(1,N-1)];
b = G_Serie.num{1};
a = G_Serie.den{1};
yt = filter(b,a,u);
stem(t,yt,'d','filled')
xlabel('t')


در قسمت بعد به جالب ترین نقطه سیستم های دینامیکی یعنی مساله غیر خطی بودن میرسیم.

@MatlabTips
#For_intermediate, #For_Advanced
#Dynamic_Systems, #LTI_Systems, #Laplace_Transform, #ss2tf
🔵رسم سه بعدی🔵
سطح پیچیدگی: 🌕🌓🌑🌑🌑
برای: مقدماتی
پیش‌نیاز:(آشنایی مقدماتی با کدنویسی)

دستور surface یک تابع سطح پایین برای ایجاد آبجکت های گرافیکی است. srufaceها در حقیقت plot ماتریسی از داده ها هستند که اندیس این ماتریس ها مبین x و y و مقادیر درون ماتریس ها مبین z هستند.
✔️مثال:
می خواهیم تابع زیر را در متلب با استفاده از دستور surface در یک بازه مشخص رسم کنیم.
z = x * e^(-x^2-y^2)
-2<x<2, -2<y<2

از دستور meshgrid برای تعریف (ساخت یک شبکه) X و Y استفاده می کنیم. در مرحله بعد ماتریس Z را تعریف خواهیم کرد و با استفاده از surface آن را رسم می کنیم.
[X,Y] = meshgrid(-2:0.2:2,-2:0.2:2);
Z = X.*exp(-X.^2 - Y.^2);
figure
surface(X,Y,Z)
view(3)

دستور surface مقدار Zها را متناظر با Xها و Yها رسم می کند. می توانید متغیر چهارمی نیز برای رنگ آمیزی وارد دستور surface کنید که در غیر اینصورت surface از مقادیر Z برای رنگ استفاده میکند که طبیعتا نوع رنگ با تغییر ارتفاع تغییر می یابد.
در پست بعدی نحوه پهن کردن یک تصویر بر روی یک surface را مطرح خواهیم کرد.
@MatlabTips
#For_intermediate
#Surface , #Plot
نویسنده:(#A_1)
نمودار سه بعدی با استفاده از surface
🔵حساسیت به شرایط اولیه🔵
سطح پیچیدگی:🌕🌕🌕🌕🌑
پیش‌نیاز:(کد نویسی متوسط و پیشرفته)
برای:(متوسط و پیشرفته)
“Ideas that require people to reorganize their picture of the world provoke hostility.”
― James Gleick, Chaos: Making a New Science

محمد بو عزیزی یک دستفروش ساده بود که مانند بقیه دستفروش ها هر روز در کنار خیابان بساط می کرد تا با سختی لقمه نانی به دست آورد. اما روز 17 دسامبر سال 2010 گویا یک روز ساده دیگر نبود چراکه بعد از چند ساعت بساط کردن یک مامور شهرداری بساطش را توقیف و او را تحقیر کرد. بوعزیزی برای اعتراض به این حرکت خود را در جلوی ساختمان شهرداری به آتش کشاند! این خود سوزی اعتراضات دیگر مردم را هم بر انگیخت تا جایی که آغازگر انقلاب تونس شد و سرانجام حکومت 23 ساله بن علی را ساقط کرد. اعتراضات به لیبی، اردن، سوریه، یمن، مصر، بحرین، عربستان، عمان و بسیاری از کشورهای عربی دیگر هم رسید و تعدادی از حکومت ها را ساقط کرد یا به جنگ داخلی، کشتار، سرکوب، گسترش گروههای تروریستی، آوارگی و مهاجرت میلیون ها نفر انجامید. اثرات آنچه امروز به نام "بهار عربی" میشناسیم هنوز هم قابل مشاهده است.
جدای از تحلیل های سیاسی بسیاری که در این مورد شده است، ساده ترین سوالی که پیش می آید این است که اگر آن روز بوعزیزی مریض میشد و به سر کارش نمیرفت یا مامور شهرداری به طور اتفاقی از آنجا رد نمیشد یا بوعزیزی خود را آتش نمی زد و به اعتراض ساده ای با چند فحاشی ماجرا را خاتمه می داد آیا تمام این اتفاقات می افتاد یا خیر؟ اگر "حساس بودن به شرایط اولیه" اینقدر مهم باشد کار جامعه شناسی دشوار می شود بنابراین جامعه شناسِ (فرضیِ) ما ممکن است پاسخ دهد: جوامع عربی مستعد این حرکت بودند: چه بوعزیزی این کار را میکرد یا نمیکرد این اتفاق رخ میداد بوعزیزی در حکم یک کبریت در انبار باروت بود" صرفنظر از اینکه این تمثیل برای شما چقدر متقاعد کننده است، لورنز نشان داد در معادلات ساده هم ممکن است تغییرات کوچک در شرایط اولیه منجر به تغییرات شدید در آینده سیستم شود. به این "واقعیت" اثر پروانه ای می گویند.
لورنز کشف کرد که دستگاه معادلات دیفرانسیل خطی زیر به شدت به شرایط اولیه حساس هستند:
دستگاه معادلات لورنز را می توان به صورت یک تابع در متلب پیاده سازی کرد:

function xprime = lorenz(t,x)
sig=10;
beta=8/3;
rho=28;
xprime=[sig*(x(2)-x(1)); x(1)*(rho - x(3))- x(2); x(1)*x(2) - beta*x(3)];

که در آن x(1)، x(2) و x(3) به ترتیب نشان دهنده x ، y و z هستند. همانطور که می بینید هر سه مشتق در متغیر xprime ذخیره می شوند. دستگاه معادلات لورنز را برای دو نقطه بسیار نزدیک [-8,7,28] و [-8,7,27] حل می کنیم( اگر با تعریف من از نزدیک مشکلی دارید می توانید تا جایی که می خواهید آنها را به هم نزدیک تر کنید). برای حل از ode23 استفاده می کنیم( در نتیجه تفاوتی ایجاد نمی کند)

x0=[-8 7 28];
tspan=[0,200];
[t,y1]=ode23(@lorenz,tspan,x0);

x0=[-8 7 27];
tspan=[0,200];
[t,y2]=ode23(@lorenz,tspan,x0);

close all
for t=1:1000
plot(y1(1:t,1),y1(1:t,3),'r',y2(1:t,1),y2(1:t,3),'b')
axis([-30 30 0 50])
drawnow
End


ویدیوی زیر سیر تحول سیستم را برای دو نقطه متفاوت با رنگ های آبی رو قرمز نشان می دهد. در ابتدا هر دو کنار هم حرکت می کنند و به تدریج آنقدر جدا می شوند که به کلی مسیر های متفاوتی را طی می کنند. در واقع یک شرایط اولیه کوچک منجر به تفاوت شدید در آینده شد.
معادله لورنز سرآغاز عصر جدیدی در درک سیستم های پیچیده و غیر خطی بود. عصری که پنداشت ساعت وار جهان را بیش از پیش به رویا بدل می کرد. در قسمت های بعدی به عمق کار لورنز و اثری که کار او در فهم سیستم های پیچیده کنونی داشت می پردازیم.
@MatlabTips
#For_intermediate, #For_Advanced
#Dynamic_Systems, #Chaos_Theory, #Dependence_on_Initial_Conditions, #Butterfly_Effect
نویسنده:(#A_2)
MatlabTips
MATLAB_Elementary_Compare_Files.mp4
مقایسه دو فایل در Matlab 👆👆👆