🔵ترکیب تبدیلات لاپلاس🔵
سطح پیچیدگی:🌕🌕🌕🌕🌑
پیشنیاز:(کد نویسی متوسط و پیشرفته)
برای:(متوسط و پیشرفته)
همانطور که در بخش قبل دیدیم تابع های تبدیل مانند تبدیل لاپلاس بازنمایی جدیدی از سیستم در فضای جدیدی ارائه می دهند. این بازنمایی دارای مزیت های زیادی است. از آن جمله که می توان تمام سیستم را به صورت یک تبدیل کننده G دید که ورودی می گیرد و خروجی مشخصی تولید می کند. این طرز نمایش همچنین کمک می کند که سیستم های پیچیده را به اجزای کوچک تر بشکنیم و هر قسمت را جداگانه تحلیل و در نهایت با عملیات بسیار ساده آن ها را کنار هم قرار دهیم. حالت های زیرا را در نظر بگیرید
سطح پیچیدگی:🌕🌕🌕🌕🌑
پیشنیاز:(کد نویسی متوسط و پیشرفته)
برای:(متوسط و پیشرفته)
همانطور که در بخش قبل دیدیم تابع های تبدیل مانند تبدیل لاپلاس بازنمایی جدیدی از سیستم در فضای جدیدی ارائه می دهند. این بازنمایی دارای مزیت های زیادی است. از آن جمله که می توان تمام سیستم را به صورت یک تبدیل کننده G دید که ورودی می گیرد و خروجی مشخصی تولید می کند. این طرز نمایش همچنین کمک می کند که سیستم های پیچیده را به اجزای کوچک تر بشکنیم و هر قسمت را جداگانه تحلیل و در نهایت با عملیات بسیار ساده آن ها را کنار هم قرار دهیم. حالت های زیرا را در نظر بگیرید
برای حالت نخست که دو سیستم به صورت سری پشت سر هم قرار گرفته اند کافی است شما تابع انتقال آن ها را در هم ضرب کنید. برای حالت موازی کافی است تابع انتقال ها را با هم جمع کنید و برای فیدبک می توان به صورت زیر عمل کرد:
البته خود متلب برای این کار توابع آماده ای هم دارد که در شکل اول دیدیم.
وقتی توابع G را داشته باشید به سادگی با فراخوانی صورت و مخرج آن می توانید با استفاده از دستور filter خروجی نهایی را بگیرید.
در قسمت بعد به جالب ترین نقطه سیستم های دینامیکی یعنی مساله غیر خطی بودن میرسیم.
@MatlabTips
#For_intermediate, #For_Advanced
#Dynamic_Systems, #LTI_Systems, #Laplace_Transform, #ss2tf
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 در یک بازه مشخص رسم کنیم.
از دستور meshgrid برای تعریف (ساخت یک شبکه) X و Y استفاده می کنیم. در مرحله بعد ماتریس Z را تعریف خواهیم کرد و با استفاده از surface آن را رسم می کنیم.
دستور surface مقدار Zها را متناظر با Xها و Yها رسم می کند. می توانید متغیر چهارمی نیز برای رنگ آمیزی وارد دستور surface کنید که در غیر اینصورت surface از مقادیر Z برای رنگ استفاده میکند که طبیعتا نوع رنگ با تغییر ارتفاع تغییر می یابد.
در پست بعدی نحوه پهن کردن یک تصویر بر روی یک surface را مطرح خواهیم کرد.
@MatlabTips
#For_intermediate
#Surface , #Plot
نویسنده:(#A_1)
سطح پیچیدگی: 🌕🌓🌑🌑🌑
برای: مقدماتی
پیشنیاز:(آشنایی مقدماتی با کدنویسی)
دستور 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)
🔵حساسیت به شرایط اولیه🔵
سطح پیچیدگی:🌕🌕🌕🌕🌑
پیشنیاز:(کد نویسی متوسط و پیشرفته)
برای:(متوسط و پیشرفته)
“Ideas that require people to reorganize their picture of the world provoke hostility.”
― James Gleick, Chaos: Making a New Science
محمد بو عزیزی یک دستفروش ساده بود که مانند بقیه دستفروش ها هر روز در کنار خیابان بساط می کرد تا با سختی لقمه نانی به دست آورد. اما روز 17 دسامبر سال 2010 گویا یک روز ساده دیگر نبود چراکه بعد از چند ساعت بساط کردن یک مامور شهرداری بساطش را توقیف و او را تحقیر کرد. بوعزیزی برای اعتراض به این حرکت خود را در جلوی ساختمان شهرداری به آتش کشاند! این خود سوزی اعتراضات دیگر مردم را هم بر انگیخت تا جایی که آغازگر انقلاب تونس شد و سرانجام حکومت 23 ساله بن علی را ساقط کرد. اعتراضات به لیبی، اردن، سوریه، یمن، مصر، بحرین، عربستان، عمان و بسیاری از کشورهای عربی دیگر هم رسید و تعدادی از حکومت ها را ساقط کرد یا به جنگ داخلی، کشتار، سرکوب، گسترش گروههای تروریستی، آوارگی و مهاجرت میلیون ها نفر انجامید. اثرات آنچه امروز به نام "بهار عربی" میشناسیم هنوز هم قابل مشاهده است.
جدای از تحلیل های سیاسی بسیاری که در این مورد شده است، ساده ترین سوالی که پیش می آید این است که اگر آن روز بوعزیزی مریض میشد و به سر کارش نمیرفت یا مامور شهرداری به طور اتفاقی از آنجا رد نمیشد یا بوعزیزی خود را آتش نمی زد و به اعتراض ساده ای با چند فحاشی ماجرا را خاتمه می داد آیا تمام این اتفاقات می افتاد یا خیر؟ اگر "حساس بودن به شرایط اولیه" اینقدر مهم باشد کار جامعه شناسی دشوار می شود بنابراین جامعه شناسِ (فرضیِ) ما ممکن است پاسخ دهد: جوامع عربی مستعد این حرکت بودند: چه بوعزیزی این کار را میکرد یا نمیکرد این اتفاق رخ میداد بوعزیزی در حکم یک کبریت در انبار باروت بود" صرفنظر از اینکه این تمثیل برای شما چقدر متقاعد کننده است، لورنز نشان داد در معادلات ساده هم ممکن است تغییرات کوچک در شرایط اولیه منجر به تغییرات شدید در آینده سیستم شود. به این "واقعیت" اثر پروانه ای می گویند.
لورنز کشف کرد که دستگاه معادلات دیفرانسیل خطی زیر به شدت به شرایط اولیه حساس هستند:
سطح پیچیدگی:🌕🌕🌕🌕🌑
پیشنیاز:(کد نویسی متوسط و پیشرفته)
برای:(متوسط و پیشرفته)
“Ideas that require people to reorganize their picture of the world provoke hostility.”
― James Gleick, Chaos: Making a New Science
محمد بو عزیزی یک دستفروش ساده بود که مانند بقیه دستفروش ها هر روز در کنار خیابان بساط می کرد تا با سختی لقمه نانی به دست آورد. اما روز 17 دسامبر سال 2010 گویا یک روز ساده دیگر نبود چراکه بعد از چند ساعت بساط کردن یک مامور شهرداری بساطش را توقیف و او را تحقیر کرد. بوعزیزی برای اعتراض به این حرکت خود را در جلوی ساختمان شهرداری به آتش کشاند! این خود سوزی اعتراضات دیگر مردم را هم بر انگیخت تا جایی که آغازگر انقلاب تونس شد و سرانجام حکومت 23 ساله بن علی را ساقط کرد. اعتراضات به لیبی، اردن، سوریه، یمن، مصر، بحرین، عربستان، عمان و بسیاری از کشورهای عربی دیگر هم رسید و تعدادی از حکومت ها را ساقط کرد یا به جنگ داخلی، کشتار، سرکوب، گسترش گروههای تروریستی، آوارگی و مهاجرت میلیون ها نفر انجامید. اثرات آنچه امروز به نام "بهار عربی" میشناسیم هنوز هم قابل مشاهده است.
جدای از تحلیل های سیاسی بسیاری که در این مورد شده است، ساده ترین سوالی که پیش می آید این است که اگر آن روز بوعزیزی مریض میشد و به سر کارش نمیرفت یا مامور شهرداری به طور اتفاقی از آنجا رد نمیشد یا بوعزیزی خود را آتش نمی زد و به اعتراض ساده ای با چند فحاشی ماجرا را خاتمه می داد آیا تمام این اتفاقات می افتاد یا خیر؟ اگر "حساس بودن به شرایط اولیه" اینقدر مهم باشد کار جامعه شناسی دشوار می شود بنابراین جامعه شناسِ (فرضیِ) ما ممکن است پاسخ دهد: جوامع عربی مستعد این حرکت بودند: چه بوعزیزی این کار را میکرد یا نمیکرد این اتفاق رخ میداد بوعزیزی در حکم یک کبریت در انبار باروت بود" صرفنظر از اینکه این تمثیل برای شما چقدر متقاعد کننده است، لورنز نشان داد در معادلات ساده هم ممکن است تغییرات کوچک در شرایط اولیه منجر به تغییرات شدید در آینده سیستم شود. به این "واقعیت" اثر پروانه ای می گویند.
لورنز کشف کرد که دستگاه معادلات دیفرانسیل خطی زیر به شدت به شرایط اولیه حساس هستند:
دستگاه معادلات لورنز را می توان به صورت یک تابع در متلب پیاده سازی کرد:
که در آن x(1)، x(2) و x(3) به ترتیب نشان دهنده x ، y و z هستند. همانطور که می بینید هر سه مشتق در متغیر xprime ذخیره می شوند. دستگاه معادلات لورنز را برای دو نقطه بسیار نزدیک [-8,7,28] و [-8,7,27] حل می کنیم( اگر با تعریف من از نزدیک مشکلی دارید می توانید تا جایی که می خواهید آنها را به هم نزدیک تر کنید). برای حل از ode23 استفاده می کنیم( در نتیجه تفاوتی ایجاد نمی کند)
ویدیوی زیر سیر تحول سیستم را برای دو نقطه متفاوت با رنگ های آبی رو قرمز نشان می دهد. در ابتدا هر دو کنار هم حرکت می کنند و به تدریج آنقدر جدا می شوند که به کلی مسیر های متفاوتی را طی می کنند. در واقع یک شرایط اولیه کوچک منجر به تفاوت شدید در آینده شد.
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
#For_intermediate, #For_Advanced
#Dynamic_Systems, #Chaos_Theory, #Dependence_on_Initial_Conditions, #Butterfly_Effect
نویسنده:(#A_2)
🔵رسم نمودار با plotly🔵
سطح پیچیدگی:🌕🌑🌑🌑🌑
پیشنیاز:(کد نویسی پایه)
برای:همه
در مورد رسم نمودارهای مختلف با متلب مطالب زیادی وجود دارد و رسم یک نمودار زیبا علاوه بر دانش نیاز به قدری سلیقه و هنر هم دارد. بسیاری از شما حتما با پکیج های نرم افزاری دیگری مانند پایتون و آر هم آشنایی دارید یا حداقل اسمی از آن ها شنیده اید. این پکیج ها هم روش های خاص خود را برای رسم نمودار دارند. اما ممکن است برای شما هم پیش آمده باشد که بخواهید نمودار خود را به همان صورت تعاملی ( یعنی با چرخاندن و زوم کردن و غیره) و نه به صورت یک عکس به کامپیوتر دیگری منتقل کنید بدون آنکه نیاز باشد تمامی نرم افزار متلب را بر روی آن نصب کنید! متاسفانه خاصیت انحصاری نرم افزار متلب مانع از این کار می شود. اما توسعه ابزارهای رسم وب در چندین سال اخیر به حدی رسیده است که حتی قدرت بیشتری از ابزارهای تخصصی به ما می دهند. این ابزار ها مبتنی بر زبان جاوااسکریپت بوده و قابل اجرا توسط مرورگرهای مختلف می باشند.
ابزار plotly یک ابزار مبتنی بر وب(به صورت آفلاین و آنلاین) برای رسم نمودارهاست که قابلیت اتصال به متلب، پایتون و آر را دارد. در این قسمت به نحوه راه اندازی و استفاده از آن که بسیار ساده است می پردازیم.
1- ابتدا فایل MATLAB-api-master را دانلود کرده( 200KB) و آن را اکسترکت کنید و در جایی مانند ریشه درایو C (یا هر جای دیگری) قرار دهید.
سطح پیچیدگی:🌕🌑🌑🌑🌑
پیشنیاز:(کد نویسی پایه)
برای:همه
در مورد رسم نمودارهای مختلف با متلب مطالب زیادی وجود دارد و رسم یک نمودار زیبا علاوه بر دانش نیاز به قدری سلیقه و هنر هم دارد. بسیاری از شما حتما با پکیج های نرم افزاری دیگری مانند پایتون و آر هم آشنایی دارید یا حداقل اسمی از آن ها شنیده اید. این پکیج ها هم روش های خاص خود را برای رسم نمودار دارند. اما ممکن است برای شما هم پیش آمده باشد که بخواهید نمودار خود را به همان صورت تعاملی ( یعنی با چرخاندن و زوم کردن و غیره) و نه به صورت یک عکس به کامپیوتر دیگری منتقل کنید بدون آنکه نیاز باشد تمامی نرم افزار متلب را بر روی آن نصب کنید! متاسفانه خاصیت انحصاری نرم افزار متلب مانع از این کار می شود. اما توسعه ابزارهای رسم وب در چندین سال اخیر به حدی رسیده است که حتی قدرت بیشتری از ابزارهای تخصصی به ما می دهند. این ابزار ها مبتنی بر زبان جاوااسکریپت بوده و قابل اجرا توسط مرورگرهای مختلف می باشند.
ابزار plotly یک ابزار مبتنی بر وب(به صورت آفلاین و آنلاین) برای رسم نمودارهاست که قابلیت اتصال به متلب، پایتون و آر را دارد. در این قسمت به نحوه راه اندازی و استفاده از آن که بسیار ساده است می پردازیم.
1- ابتدا فایل MATLAB-api-master را دانلود کرده( 200KB) و آن را اکسترکت کنید و در جایی مانند ریشه درایو C (یا هر جای دیگری) قرار دهید.
2- نرم افزار متلب را باز کنید و Set path را بزنید. این گزینه درنسخه های جدید متلب به صورت شکل زیر است و در نسخه های قدیمی تر به صورت File>Set Path می باشد.
3- در پنجره باز شده Add with subfolders را زده و پوشه MATLAB-api-master را انتخاب کنید. و در نهایت تکمه save را بزنید.
4- دستور getplotlyoffline('https://cdn.plot.ly/plotly-latest.min.js') را در خط فرمان بزنید و چند لحظه منتظر شوید تا پیام موفقیت داده شود.(برای این مرحله حتمن نیاز است که متصل به اینترنت باشید)
حالا شما می توانید برای هر نموداری که میکشید یک نسخه قابل حمل به سایر کامپیوتر ها هم داشته باشید. فقط کافی است که یک خط دستور پس از رسم عادی متلب قرار دهید. به نمونه زیر توجه کنید:
پس از اجرای کد بالا ابتدا متلب یک نمودار رسم می کند سپس متلب مرورگر پیش فرض سیستمتان را باز می کند و نمودار plotly را هم نشان می دهد.
همانطور که می بینید تنها یک خط(خط آخر) باید اضافه کنید(همیشه مستقل از نوع رسم همین یک خط کافی است!). تنها باید توجه کنید که فایل خروجی به صورت یک فایل html است که با اسم بعد از filename (در مثال بالا sine) کنار کد هایتان قرار می گیرد. من آن را در زیر قرار داده ام که دانلود کنید و خود ببینید.
4- دستور getplotlyoffline('https://cdn.plot.ly/plotly-latest.min.js') را در خط فرمان بزنید و چند لحظه منتظر شوید تا پیام موفقیت داده شود.(برای این مرحله حتمن نیاز است که متصل به اینترنت باشید)
حالا شما می توانید برای هر نموداری که میکشید یک نسخه قابل حمل به سایر کامپیوتر ها هم داشته باشید. فقط کافی است که یک خط دستور پس از رسم عادی متلب قرار دهید. به نمونه زیر توجه کنید:
[X,Y] = meshgrid(-8:.5:8);
R = sqrt(X.^2 + Y.^2) + eps;
Z = sin(R)./R;
surf(Z);
fig2plotly(gcf, 'offline', true, 'filename', 'sine');
پس از اجرای کد بالا ابتدا متلب یک نمودار رسم می کند سپس متلب مرورگر پیش فرض سیستمتان را باز می کند و نمودار plotly را هم نشان می دهد.
همانطور که می بینید تنها یک خط(خط آخر) باید اضافه کنید(همیشه مستقل از نوع رسم همین یک خط کافی است!). تنها باید توجه کنید که فایل خروجی به صورت یک فایل html است که با اسم بعد از filename (در مثال بالا sine) کنار کد هایتان قرار می گیرد. من آن را در زیر قرار داده ام که دانلود کنید و خود ببینید.
نمودار های plotly به حدی زیبا هستند که شاید شما هم مانند من به رسم خود متلب ترجیحشان بدهید. فراموش نکنید که این نمودار ها قابل جابجا کردن روی بقیه platform ها را دارند. در قسمت های بعدی چند نمودار دیگر هم با این ابزار رسم می کنیم.
@MatlabTips
#For_beginner ,
#For_intermediate, #For_Advanced
#Plotly #Plot #Portability
نویسنده:(#A_2)
@MatlabTips
#For_beginner ,
#For_intermediate, #For_Advanced
#Plotly #Plot #Portability
نویسنده:(#A_2)