متمتیکا


+ نوسانگرهای هماهنگ جفت شده - Mathematica

برنامه مخصوص متمتیکا 6

برنامه مخصوص متمتیکا 5 

 

برای توضیحات ادامه ی مطلب رو ببینید


برنامه ای که براتون نوشتم مربوط هستش به شبیه سازی حرکت دو جسم که با فنر به هم متصل شدن و هر کدوم از این اجسام هم از طرفین به یک تکیه گاه با فنر متصل شدن ، مثل شکل زیر :

 دستگاه فنر های جفت شده

معادلات حاکم بر این دستگاه بصورت زیر هست :

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 در یک دستگاه مختصات نشون میدیم .

بحث و بررسی این نوسانها به عهده ی خودتون . چیزی که برای ما مهمه اینه که حرکت این دو فنر رو بصورت واقعی و اون چیزی که واقعا اتفاق می‌افته نشون بدیم ، من تنها یک روش برای این کار به ذهنم رسید (که اونهم از جای دیگه ای دیده بودم ، 100% هم زاده ی ذهن خودم نیست  یول) اون هم اینه که ما برای ترسیم هم جسم یک تابع برای مختصاتش در لحظه ای خاص در نظر بگیریم ، مثل این :

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 بار این تابع رو نوشتم ، یکی به همین شکلی که اینحا براتون نوشتم هست ، که نمیدونم چرا جواب نمیده و دیگری اومدم همون توبع تعین مختصات رو تو این دستور کپی پیست کردم (خب اینم یه راهشه دیگه).

اگه فکر کردید کار تموم شد بدونید که سخت در اشتباهید ! این تابع که تعریف کردیم فقط مکان دو جسم رو در زمانی مشخص با یک نقطه نشون میده اما ما میخایم حرکت این اجرام رو ببینیم ، برای این کار دوباره (یا بهتر بگم سه باره!) باید یک تابع تعریف کنیم ، البته این دیگه تابع نیستش ، دستوره . برای این منظور از دستور تیبل استفاده میکنیم که زمانها رو طبق اون بازه ای که مشخص کردیم توی تابع کردپلات  بزاره . خب با اجرای این تیبل نتیجه رو که تعدادی نمودار هست ، میبینید که متاسفانه توی متمتیکا 6 با دوبار کلیک روی یک شکل ، بصورت انیمیشنی اجرا نمیشه (چیزی که توی 5 میشه) اما یه دستور بهتر هست که میتونیم از اون استفاده کنیم ، اونم دستور انیمیت هستش که آرگومان اون دقیقاً همون آرگومان دستور تیبل هست ، البته اینو فقط تو برنامه‌ی مخصوص متمتیکا 6 میتونید ببینید . در عوض تو برنامه ای که برای مخصوص 5 براتون گزاشتم روی یکی از شکلها که 2 بار کلیک کنید اون مجموعه به صورت متحرک بهتون نشون داده میشه .

با کمی خلاقیت میتونید برنامه ای بنویسید که حرکت چند فنر رو نمایش بده 

نویسنده : کامران اینانلو ; ساعت ۱٠:٠٥ ‎ب.ظ ; شنبه ٢۳ شهریور ۱۳۸٧
    پيام هاي ديگران()   لینک