در این شکل m جرم جسم، c سرعت گیر(اصطکاک) و k قدرت فنر است. Wf هم فرکانس نیروی وارده است. با تغییر در این مقادیر میتوانید حالت های مختلف نمودار را ببینید.
@MatlabTips
#For_intermediate, #For_advance
#Differential_equations, #Dynamical_systems, #ode45, #Second_order_ode
نویسنده:(#A_2)
@MatlabTips
#For_intermediate, #For_advance
#Differential_equations, #Dynamical_systems, #ode45, #Second_order_ode
نویسنده:(#A_2)
#Video_GUI
ساخت یک شمارنده که با هر بار کلیک رنگ آن بصورت تصادفی تغییر می کند.👆
ساخت یک شمارنده که با هر بار کلیک رنگ آن بصورت تصادفی تغییر می کند.👆
🔵توابع اینلاین🔵
سطح پیچیدگی:🌕🌑🌑🌑🌑
پیشنیاز:(آشنایی مقدماتی با متلب)
برای: مقدماتی
فرض کنید تابع زیر را که بر حسب t است می خواهیم رسم کنیم:
می توان تابع h را در پنجره فرمان به عنوان یک تابع اینلاین بصورت زیر نمایش داد:
حالا میخواهیم با نوشتن عبارات مناسب این تابع را رسم کنیم:
✔️توجه:
1⃣متغیر tدر تعریف اینلاین تابع h آرگومان ورودی است. این صرفا یک متغیر مشقی است و تنها ورودی یک تابع است. شما می توانید هر طور که مایلید نام متغیرتان را اسم گذاری کنید.
2⃣شما می توانید توابعی با بیش از یک متغیر با فرمت اینلاین تعریف کنید:
@MatlabTips
#Inline
#For_intermediate
نویسنده: (#A_1)
سطح پیچیدگی:🌕🌑🌑🌑🌑
پیشنیاز:(آشنایی مقدماتی با متلب)
برای: مقدماتی
فرض کنید تابع زیر را که بر حسب t است می خواهیم رسم کنیم:
h(t) = cos(8t) + cos(9t);
می توان تابع h را در پنجره فرمان به عنوان یک تابع اینلاین بصورت زیر نمایش داد:
h = inline('cos(8*t) + cos(9*t)')
حالا میخواهیم با نوشتن عبارات مناسب این تابع را رسم کنیم:
x = 0 : pi/40 : 6*pi;
plot(x, h(x)), grid
✔️توجه:
1⃣متغیر tدر تعریف اینلاین تابع h آرگومان ورودی است. این صرفا یک متغیر مشقی است و تنها ورودی یک تابع است. شما می توانید هر طور که مایلید نام متغیرتان را اسم گذاری کنید.
2⃣شما می توانید توابعی با بیش از یک متغیر با فرمت اینلاین تعریف کنید:
f = inline('x.ˆ2 + y.ˆ2', 'x', 'y' );
f(1, 2)
ans =
5
@MatlabTips
#Inline
#For_intermediate
نویسنده: (#A_1)
🔵نقطه تعادل🔵
سطح پیچیدگی:🌕🌕🌕🌕🌑
پیشنیاز:(کد نویسی متوسط)
برای:(متوسط و پیشرفته)
درک معادلات دیفرانسیل مخصوصا زمانی که مشتق های بالاتر در آن ظاهر می شود دشوار است. حل کردن برخی از معادلات دیفرانسیل مانند مساله سه جسم ذهن بسیاری را به خود مشغول کرده بود. یک روش که به فهم مساله کمک می کند توسط هنری پوانکاره ابداع شد. در این روش به جای حل معادله بر حسب زمان معادله را در مختصات جدیدی متشکل از متغیرهای مساله به عنوان محورها حل می شود. هر نقطه در این فضای جدید متناظر با یک حالت (state) است زیرا در آن حالت سیستم یک وضعیت مشخص دارد و کاملا می توان به صورت یکتا آن را از حالات دیگر تمیز داد.
برای فهم موضوع یک مثال کلاسیک و ساده را در نظر می گیریم. اگر معادله پاندول را در نظر بگیرید به صورت زیر است:
سطح پیچیدگی:🌕🌕🌕🌕🌑
پیشنیاز:(کد نویسی متوسط)
برای:(متوسط و پیشرفته)
درک معادلات دیفرانسیل مخصوصا زمانی که مشتق های بالاتر در آن ظاهر می شود دشوار است. حل کردن برخی از معادلات دیفرانسیل مانند مساله سه جسم ذهن بسیاری را به خود مشغول کرده بود. یک روش که به فهم مساله کمک می کند توسط هنری پوانکاره ابداع شد. در این روش به جای حل معادله بر حسب زمان معادله را در مختصات جدیدی متشکل از متغیرهای مساله به عنوان محورها حل می شود. هر نقطه در این فضای جدید متناظر با یک حالت (state) است زیرا در آن حالت سیستم یک وضعیت مشخص دارد و کاملا می توان به صورت یکتا آن را از حالات دیگر تمیز داد.
برای فهم موضوع یک مثال کلاسیک و ساده را در نظر می گیریم. اگر معادله پاندول را در نظر بگیرید به صورت زیر است:
که در آن ثابت C میزان اصطکاک و k متناظر با عکس طول پاندول است. برای حل این معادله دیفرانسیل کافی است تابع آن را به صورت زیر بنویسیم:
اگر توجه کنید مقدار dx(1) زاویه پاندول (مکان آن) و dx(2) سرعت آن را مشخص می کند(سرعت مشتق مکان است). حالا با فرض c=1 و k=1 و در بازه زمانی صفر تا 20 ثانیه آن را حل می کنیم:
که به صورت زیر تبدیل می شود:
function dx = pendulum(t,x)
global c k
dx = zeros(2,1);
dx(1) = x(2);
dx(2) = -c*x(2)-k*sin(x(1));
اگر توجه کنید مقدار dx(1) زاویه پاندول (مکان آن) و dx(2) سرعت آن را مشخص می کند(سرعت مشتق مکان است). حالا با فرض c=1 و k=1 و در بازه زمانی صفر تا 20 ثانیه آن را حل می کنیم:
global c k
c = 0; k = 1;
[t,x] = ode45(@pendulum,[0 20],[1 1]);
plot(x(:,1),x(:,2))
که به صورت زیر تبدیل می شود:
اگر قدری به این شکل دقت کنید متوجه می شوید که بر اساس شرایط اولیه پاندول از نقطه 1 با سرعت صفر(نقطه 1 و 0) شروع کرده است(پاندول با قدری زاویه رها شده است) و اندک اندک از زاویه و سرعتش کاسته شده تا در نقطه صفر و صفر متوقف شده است( صفر اولی مربوط به مختصات اول و زاویه آن است که صفر شده و دومی سرعت آن است که به صفر رسیده است)
حال فرض کنید که اصطکاک نداریم و همچنین سرعت اولیه را برابر با 1.5 در نظر بگیرید(در کد بالا کافی است شرایط اولیه را از [1,1] به [1,1.5] تغییر دهید و c=0) در این صورت معادله به صورت زیر می شود:
حال فرض کنید که اصطکاک نداریم و همچنین سرعت اولیه را برابر با 1.5 در نظر بگیرید(در کد بالا کافی است شرایط اولیه را از [1,1] به [1,1.5] تغییر دهید و c=0) در این صورت معادله به صورت زیر می شود:
این بار مقدار سرعت اولیه را به قدری افزایش می دهیم تا کاملا بچرخد(در کد بالا به به جای [1,1] بگذارید [1,3] و c=0)
اما نکته ی جالب تر این است که در صورتی که ما اصطکاک را در نظر بگیریم می دانیم با هر شرط اولیه ای از لحاظ مکان یا سرعت شروع کنیم در نتیجه تاثیری ندارد یعنی در نهایت همه ی پاندول های واقعی از حرکت باز می ایستند. بنابراین در آن صورت همه ی مسیر ها به نقطه صفر(زاویه) و صفر(سرعت) ختم می شود. در اصطلاح معادلات دیفرانسیل به این نقطه، نقطه ی تعادل (equilibrium) گفته می شود. به طور مثال برای پاندول بررسی شده می توان نقطه تعادل را به صورت زیر محاسبه کرد:
نمودار زیر نشان می دهد که تمامی خطوط به نقطه صفر و صفر ختم می شوند.
c = 1; k = 1;
intval = linspace(-1,1,10);
figure;hold on;
for ii=1:10,
for jj=1:10,
[t,x] = ode45(@pendulum,[0 20],[intval(ii) intval(jj)]);
plot(x(:,1),x(:,2));
end
end
نمودار زیر نشان می دهد که تمامی خطوط به نقطه صفر و صفر ختم می شوند.
بررسی نقطه تعادل در سیستم های مختلف بسیار پر اهمیت است. زیرا حتی اگر ما ندانیم چگونه معادلات را باید حل کنیم، یافتن نقطه تعادل به ما نشان می دهد عاقبت کار سیستم چه خواهد شد. در قسمت های بعدی به مثال های جالب تری میپردازیم. همچنین سعی میکنیم به مطالب کاربردی و جالب تری از مبحث سیستم های دینامیکی بپردازیم.
@MatlabTips
#For_intermediate, #For_advance
#Differential_equations, #Dynamical_systems, #Equilibrium_point
نویسنده:(#A-2)
@MatlabTips
#For_intermediate, #For_advance
#Differential_equations, #Dynamical_systems, #Equilibrium_point
نویسنده:(#A-2)
🔵حساب بی نهایت کوچک ها🔵
سطح پیچیدگی:🌕🌕🌕🌕🌕
پیشنیاز:(کد نویسی متوسط و پیشرفته)
برای:(متوسط و پیشرفته)
همانطور که قبلا هم اشاره شد حساب دیفرانسیل و انتگرال به عنوان ابزاری برای حل معادلات مکانیک توسعه یافت. در آن زمان باور بر این بود که مکانیک سماوی و مکانیک زمینی از قوانین متفاوتی پیروی می کنند. آیزاک نیوتون با نشان دادن اینکه تمامی اجسام در طبیعت صرفنظر از اندازه و مکانشان از قوانین سه گانه او پیروی می کنند این باور کهن که از زمان ارسطو برجای مانده بود را باطل کرد. او این ادعا را با پیش بینی های دقیقی از حرکت اجرام و سیارات به اثبات رساند. اما نکته ای که کمتر به آن پرداخته شده است این است که حتی خود نیوتون به دشوار بودن حل معادلاتش برای سیارات منظومه شمسی پی برد به همین خاطر اثر سیارات بر هم را ناچیز درنظر گرفت و حرکت همه آن ها را متاثر از جرم خورشید محاسبه کرد. این ساده سازی لطمه ی چندانی به پیش بینی ها وارد نکرد.
پیچیدگی مساله در این بود که معادلات دیفرانسیل را می شد برای دو جسم به صورت تحلیلی حل کرد اما حل کردن آن برای سه جسم غیر ممکن به نظر می رسید! کاخ باشکوهی که نیوتون از معادلاتش ساخته بود به نظر شکننده تر از نگاه اول میرسید زیرا قادر به حل مساله برای حتی 3 جسم تقریبا هم جرم نبود!
اگر معادلات نیوتون را برای سه جسم بنویسیم به صورت زیر می شوند:
سطح پیچیدگی:🌕🌕🌕🌕🌕
پیشنیاز:(کد نویسی متوسط و پیشرفته)
برای:(متوسط و پیشرفته)
همانطور که قبلا هم اشاره شد حساب دیفرانسیل و انتگرال به عنوان ابزاری برای حل معادلات مکانیک توسعه یافت. در آن زمان باور بر این بود که مکانیک سماوی و مکانیک زمینی از قوانین متفاوتی پیروی می کنند. آیزاک نیوتون با نشان دادن اینکه تمامی اجسام در طبیعت صرفنظر از اندازه و مکانشان از قوانین سه گانه او پیروی می کنند این باور کهن که از زمان ارسطو برجای مانده بود را باطل کرد. او این ادعا را با پیش بینی های دقیقی از حرکت اجرام و سیارات به اثبات رساند. اما نکته ای که کمتر به آن پرداخته شده است این است که حتی خود نیوتون به دشوار بودن حل معادلاتش برای سیارات منظومه شمسی پی برد به همین خاطر اثر سیارات بر هم را ناچیز درنظر گرفت و حرکت همه آن ها را متاثر از جرم خورشید محاسبه کرد. این ساده سازی لطمه ی چندانی به پیش بینی ها وارد نکرد.
پیچیدگی مساله در این بود که معادلات دیفرانسیل را می شد برای دو جسم به صورت تحلیلی حل کرد اما حل کردن آن برای سه جسم غیر ممکن به نظر می رسید! کاخ باشکوهی که نیوتون از معادلاتش ساخته بود به نظر شکننده تر از نگاه اول میرسید زیرا قادر به حل مساله برای حتی 3 جسم تقریبا هم جرم نبود!
اگر معادلات نیوتون را برای سه جسم بنویسیم به صورت زیر می شوند:
که در آن r با دو نقطه روی آن مشتق دوم r و به معنای شتاب است. M ها جرم اجسام هستند و G ثابت جهانی گرانش است. اگر بخواهم یکی از این معادلات را در متلب بنویسم می توانم به صورت زیر عمل کنم:
چند نکته در مورد این نحوه ی کد زنی وجود دارد:
a نشان دهنده شتاب و برابر با همان مشتق دوم است.
rh ها فاصله نرمال شده هستند و بر rm تقسیم شده اند بنابراین در معادله آخر یکی از توان های مخرج در rh محاسبه شده است.
به جای فاصله معمول از نمادگذاری dx استفاده کرده ایم زیرا می خواهیم معادلات را در دیفرانسیل های کوچک حل کنیم.بنابراین dx ها در کد اصلی با اندیس c تغییر می کنند.(یک دنباله از دیفرانسیل ها!)
در اینجا این معادله را نمی خواهیم حل کنیم زیرا اصلا راه حل تحلیلی ندارد به جای آن به صورت عددی آن را حل می کنیم برای اینکار با هر بار محاسبه شتاب، سرعت و مکان بعدی را با فرمول های زیر(فیزیک دبیرستان) محاسبه کرده و به دیفرانسیل زمانی بعدی می رویم:
روح معادلات دیفرانسیل در درک معادلات در بی نهایت کوچک ها است. معادلات بالا همان معادلات حرکت هستند که برای زمانهای کوچک dt(دیفرانسیل t) نوشته شده اند.
برای درک کامل برنامه هایی که نوشته شده و چون حجم آن ها زیاد است رادر این جا نمی آوریم بلکه در فایل .m قرار می دهیم تا دانلود کنید و خودتان بررسی کنید.
برای راحتی شما حالت های مختلف از سه جسم با مکان ها و وزن های اولیه متفاوت قرار داده ایم که تست کنید. خودتان هم می توانید حالت های دلخواه را تنظیم کنید. به طور مثال حالت اول به صورت زیر می شود:
dx12=X2-X1;
dy12=Y2-Y1;
dz12=Z2-Z1;
r12=[dx12 dy12 dz12];
r13=[dx13 dy13 dz13];
rm12=(dx12^2+dy12^2+dz12^2)^(1/2);
rm13=(dx13^2+dy13^2+dz13^2)^(1/2);
rh12=r12/rm12;
rh13=r13/rm13;
a1=G*((m2/rm12^2)*rh12+(m3/rm13^2)*rh13);
چند نکته در مورد این نحوه ی کد زنی وجود دارد:
a نشان دهنده شتاب و برابر با همان مشتق دوم است.
rh ها فاصله نرمال شده هستند و بر rm تقسیم شده اند بنابراین در معادله آخر یکی از توان های مخرج در rh محاسبه شده است.
به جای فاصله معمول از نمادگذاری dx استفاده کرده ایم زیرا می خواهیم معادلات را در دیفرانسیل های کوچک حل کنیم.بنابراین dx ها در کد اصلی با اندیس c تغییر می کنند.(یک دنباله از دیفرانسیل ها!)
در اینجا این معادله را نمی خواهیم حل کنیم زیرا اصلا راه حل تحلیلی ندارد به جای آن به صورت عددی آن را حل می کنیم برای اینکار با هر بار محاسبه شتاب، سرعت و مکان بعدی را با فرمول های زیر(فیزیک دبیرستان) محاسبه کرده و به دیفرانسیل زمانی بعدی می رویم:
X1(c+1)=X1(c)+VX1(c)*dt+(1/2)*a1(1)*dt^2;
VX1(c+1)=VX1(c)+a1(1)*dt;
روح معادلات دیفرانسیل در درک معادلات در بی نهایت کوچک ها است. معادلات بالا همان معادلات حرکت هستند که برای زمانهای کوچک dt(دیفرانسیل t) نوشته شده اند.
برای درک کامل برنامه هایی که نوشته شده و چون حجم آن ها زیاد است رادر این جا نمی آوریم بلکه در فایل .m قرار می دهیم تا دانلود کنید و خودتان بررسی کنید.
برای راحتی شما حالت های مختلف از سه جسم با مکان ها و وزن های اولیه متفاوت قرار داده ایم که تست کنید. خودتان هم می توانید حالت های دلخواه را تنظیم کنید. به طور مثال حالت اول به صورت زیر می شود: