توضیح فیزیک برنامه ی شبیه سازی حرکت و نوسان 2 فنر رو در ادامه ی مطلب ببینید
برنامه ای که براتون نوشتم مربوط هستش به شبیه سازی حرکت دو جسم که با فنر به هم متصل شدن و هر کدوم از این اجسام هم از طرفین به یک تکیه گاه با فنر متصل شدن ، مثل شکل زیر :
معادلات حاکم بر این دستگاه بصورت زیر هست :
m1 x1" + k1 x1 - k2 (x2 - x1)=0
m2 x2" + k3 x2 + k2 (x2 - x1)=0
تو این معادلات x1 و x2 جابجایی جسمهای m1 و m2 هستند . این کلیترین حالت این معادلات هستش ،اما اغلب برای بررسی این نوع حرکت جسمها رو هم وزن (m1=m2) و ضریب سختی هارو هم هماندازه (k1=k2=k3) میگیرن . من هم تو این برنامه به هر دو صورت این کارو کردم ، یعنی یه بار تمام پارامتر هارو مخالف و نامساوی هم در نظر گرفتم و یک بار هم بعضی از اونها رو مساوی و متقارن قرار دادم ؛ این دو صورت رو با val1 و val2 مشخص کردم . برای حل معادلات هم یک بار از val1 و یک بار هم از val2 استفاده میکنیم . میتونستیم تنها یک بار معادله رو حل کنیم و val1 و val2 رو به صورت جداگونه با . / توی جوابها جایگزاری کنیم اما من که این کارو کردم حل این معادله به صورت پارامتری زمان زیادی گرفت و در آخر هم به نتیجه نرسید
ابتدا حرکت نوسانی این اجسام رو نسبت به زمان نشون میدیم که انتظار هم داریم یک حرکت سینوسی رو ببینیم ، یک بار این حرکت نوسانی رو با توجه به شرایط val1 و یک بار هم با val2 پلات میکنیم و برای نمایش حرکت نوسانی این دو جسم و مقایسه ی اونها هر دو رو با دستور Show در یک دستگاه مختصات نشون میدیم .
بحث و بررسی این نوسانها به عهده ی خودتون . چیزی که برای ما مهمه اینه که حرکت این دو فنر رو بصورت واقعی و اون چیزی که واقعا اتفاق میافته نشون بدیم ، من تنها یک روش برای این کار به ذهنم رسید اون هم اینه که ما برای ترسیم هم جسم یک تابع برای مختصاتش در لحظه ای خاص در نظر بگیریم ، مثل این :
coord1[t_]={1+x1[t],0}/.ds1//Flatten
این دستور ، تابعی برای مختصات جسم اول تعریف میکنه که مختصهی x اون 1+x1[t] و مختصهیy اون صفر هست . پس با این حساب این جسم رو فقط ما روی محور x نشون میدیم . به عبارتی که برای مختصهی x هست توجه کنید ، همون طور که میبینید مکان اولیهی این جسم در x=1 در نظر گرفته شده . حالا شما کافیه که به این تابع یک زمان بدید (t) تا اون مختصاتی رو که جسم در اون زمان مستقر هست رو تحویل بده . خروجی این تابع فقط یک زوج عدد است که ما باید یک تابع دیگه تعریف کنیم که این زوج عدد رو نمایش بده ؛ برای این کار از ListPlot استفاده میکنیم :
coordplot[t_]:= ListPlot[{coord1[t],coord2[t]}
coord1[t] وcoord2[t]توابع تعین مختصات جسمهای m1 و m2 هستند ، که coord1[t] رو براتون توضیح دادم ، فرق coord2[t] با coord1[t] علاوه بر معادله ی حرکتش (x2[t]) توی مکان اولیه ش هست ، که مکان اولیه ی اون رو 2 دادیم . برنامه رو که ببینید میبینید که من 2 بار این تابع رو نوشتم ، یکی به همین شکلی که اینحا براتون نوشتم هست ، که نمیدونم چرا جواب نمیده و دیگری اومدم همون توبع تعین مختصات رو تو این دستور کپی پیست کردم (خب اینم یه راهشه دیگه).
اگه فکر کردید کار تموم شد بدونید که سخت در اشتباهید ! این تابع که تعریف کردیم فقط مکان دو جسم رو در زمانی مشخص با یک نقطه نشون میده اما ما میخایم حرکت این اجرام رو ببینیم ، برای این کار دوباره (یا بهتر بگم سه باره!) باید یک تابع تعریف کنیم ، البته این دیگه تابع نیستش ، دستوره . برای این منظور از دستور تیبل استفاده میکنیم که زمانها رو طبق اون بازه ای که مشخص کردیم توی تابع کردپلات بزاره . خب با اجرای این تیبل نتیجه رو که تعدادی نمودار هست ،
با کمی خلاقیت میتونید برنامه ای بنویسید که حرکت چند فنر رو نمایش بده