خانه > پروژه و متمم و حل تمرین ها, آموزش نرم افزارهای مکانیک > ترسیم نمودارهای انتقال پذیری نیرو و انتقال پذیری تغییر مکان توسط نرم افزار متلب (آموزش متلب)

ترسیم نمودارهای انتقال پذیری نیرو و انتقال پذیری تغییر مکان توسط نرم افزار متلب (آموزش متلب)

با سلام…

امروز قصد داریم تا چند تا از نمودارهای ارتعاشاتی رو برای شما توسط نرم افزار متلب ورژن 7.7 (Matlab) ترسیم کنیم.حقیقتش زیاد قصد نداریم وارد جنبه ارتعاشی مسئله بشیم و فقط میخوایم توسط فرمول هایی که برای هر کدوم موجود هست اونا رو در متلب رسم کنیم و ببینیم که آیا واقعا این فرمول ها صادق هستند؟؟؟…

دو نموداری که بیشتر در مبحث ارتعاشات مورد بحث قرار میگیرند نمودارهای انتقال پذیری تغییر مکان(Td) و انتقال پذیری نیرو(Ft/KY) که بر حسب نسبت نوسانات (r) به تصویر کشیده می شوند…. قابل توجه هست که در شکل ها نمودار ها هر کدام بر حسب مقادیر ثابتی از زتا (Zeta) ترسیم شده اند که در ادامه اشاره خواهیم کرد…

Note: this is a tutorial for Plot the Vibration Diagrams such as Displacement Transmissibility , Force Transmissibility…. with Matlab 7.7 soft. this tutor write in Persian Lang. if you cant read you could use from Program Texts to plot these Diagrams.for read more click on the below Link….

من درد تو را زدست آسان ندهم

دل برنکنم زدوست تا جان ندهم

از دوست به یادگار دردی دارم

کان درد به صد هزار درمان ندهم

ابتدا از نمودار انتقال پذیری تغییر مکان شروع می کنیم..

این نمودار طبق فرمول زیر ترسیم میشود….(X/Y) همان انتقال پذیری تغییر مکان نام دارد که نسبت دامنه پاسخ به دامنه حرکت پایه می باشد و با Td هم نمایش داده میشود. در کنار این نمودار نمودار فازی را هم رسم می کنیم که بر حسب زاویه فاز به  نسبت نوسانات می باشد. فرمول های تصاویر زیر را ببینید.

این هم از دو نموداری که بر حسب زتا (zeta) های مشخص طبق دو فرمول بالا ترسیم میشود….

نمودار انتقال پذیری تغییر مکان بر حسب نسبت نوسان

نمودار زاویه فاز بر حسب نسبت نوسان

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

%Start
% Dispalcement Transmissibility-Frequency ratio Diagram
% Zeta=z , Dispalcement Transmissibility=t
z=0.05;
r=linspace(0,4,10000);
t=sqrt((1+((2*z)*r).^2)./((1-r.^2).^2+(2*z*r).^2));
hold on
plot(r,t)
z=0.1;
t=sqrt((1+((2*z)*r).^2)./((1-r.^2).^2+(2*z*r).^2));
hold on
plot(r,t)
z=0.2;
t=sqrt((1+((2*z)*r).^2)./((1-r.^2).^2+(2*z*r).^2));
hold on
plot(r,t)
z=0.25;
t=sqrt((1+((2*z)*r).^2)./((1-r.^2).^2+(2*z*r).^2));
hold on
plot(r,t)
z=0.5;
t=sqrt((1+((2*z)*r).^2)./((1-r.^2).^2+(2*z*r).^2));
hold on
plot(r,t)
z=1;
t=sqrt((1+((2*z)*r).^2)./((1-r.^2).^2+(2*z*r).^2));
hold on
plot(r,t)
axis ( [0 4 0 7] )
grid
%End

بسیار خب حال برنامه را میتوانید کپی کرده و نتیجه را همین حالا در متلب مشاهده کنید….

ولی آنچه مسلم است شما تنها برای مشاهده نمودار این مطالب را نمیخوانید!!!

شروع میکنیم…همانطور که میدانید ما برنامه های خود را در M-file ها مینویسیم ، چرا که قابلیت ویرایش دارند و هر قسمت متن را که خواسته باشیم میتوانیم اجرا کنیم در ورژن های جدید هم که ویرایشگر به آن اضافه شده و از بروز اشتباهات جلوگیری میکنند… در صورتی که در ستون اصلی متلب این ویژگی ها یافت نمیشود…

خب M-file ها هم یک صفحه همانند Note pad دارند که به شما اجازه نوشتن برنامه ها را میدهند و با راست کلیک میتوانید هر قسمت از آن را که بخواهید اجرا کنید و نتیجه را در ستون اصلی متلب مشاهده کنید…

در برنامه ای که متن آن را در بالا مشاهده میکنید خط های متفاوتی وجود دارد که به ترتیب قصد توضیح آن را داریم..

درصدهایی که ابتدای خط میزنیم همیشه مانع خواندن آن سطر میشود… اصولا برای توضیحات بیشتر در میان خطوط برنامه استفاده میشوند مثلا شما بخواهید یک متغییر و یا نام خود یا تاریخ نگارشی را به اصل متن اضافه کنید ، میتوانید با نوشتن یک علامت % از خواندن آن خط و ایجاد خطا در برنامه جلوگیری کنید .

در این نوع ترسیم ابتدا متغییر زتا را ثایت میکنیم تا از متغیر های گوناگون کاسته و در نهایت به دو متغییر که دو میله نمودار دوبعدی ما هستند برسیم. برای این کار ما بایستی هر بار یک زتا را به معادله بفهمانیم، تعریف در متلب کار ساده ای است خطی که مقدار زتا را مشخص کرده را مشاهده کنید برای مثال z=0.05 ، این را که برای متلب وارد کنید، متلب سریعا یک ماتریس ،یک در یک، به نام z میسازد و مقدار 0.05  را درون آن میریزد.

انتهای این خط هم یک سمی کالن (;) گذاشته ایم تا نتایج محاسبات را نمایش ندهد در غیر این صورت در ستون اصلی متلب در جواب ،  نمایش مقدار زتا را هم انجام میداد که با این علامت از نمایش اضافی آن جلوگیری کرده ایم.

خب وقتی که مقدار زتا معلوم شد. دو متغییر بیشتر نمانده که یکی r است و دیگری Td ….این دو را میخواهیم توسط معادله ای که ذکر شده رسم کنیم…برای رسم شما ابتدا باید برای r که یک سمت معادله است مقادیر متفاوتی اتخاذ کنید تا در سمت دیگر معادله متلب برای شما این مقادیر را محاسبه کرده و نقاط دقت را برای رسم نمودارمان بدست آورد.

برای دادن مقادیر متفاوت مخصوصا برای رسم یک نمودار شما راه های متفاوتی دارید. بهترین راه تعریف یک ماتریس برای آن متغیر است که تک تک درایه های آن یکی از آن چند مقدار باشد… برای مثال وقتی شما میخواهید به r مقدار بدهید و به خصوص که این مقادیر در یک بازه خاص باشند میبایست به طریقی که ذکر میکنیم عمل کنید… بدین ترتیب که مثلا میخواهید برای رسم r در بازه 0 تا 4 نقاطی تعیین کنید. شما برای این کار یک ماتریس تعریف میکنید که 10000 مقدار در این بازه مورد نظر به شما  بدهد البته این مقدار فقط برای بالا بردن دقت رسم نمودار است. برای اینکه شما در یک بازه به این 10000 نقطه دست پیدا کنید می بایست از دستور linspace استفاده کنید.این دستور در یک بازه گفته شده مقدار نقاط تعیین شده را بیرون میکشد. البته نقاط با فاصله های مساوی!!

در متن برنامه بالایی از این دستور برای مقدار دهی به r استفاده کرده ایم که در بازه 0 تا 4 دقیقا 10000 نقطه به ما بدهد. متلب بعد از اجرای این برنامه برای r یک ماتریس یک در ده هزار تعریف کرده و تمام مقادیر را درون آن میریزد.

****توجه کنید که حال r یک ماتریس است به یک ردیف و 10000 ستون!!! هرگز آن را یک عدد نشمارید البته برای ما r یک متغییر است اما متلب قبل از این تمام مقادیر r را درون یک ماتریس ریخته است!!

حال به سراغ معادله اصلی میرویم… در اینجا به جای Td ما از حرف t استفاده کرده ایم. در نگارش معادله یک نکته بسیار با ارزش را برای جلوگیری از خطا میبایست انجام دهیم.

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

خب حالا این خط را هم که نوشتیم متلب تمام مقادیر r را درون معادله گذاشته و طبیعتا یک ماتریس هم برای t نتیجه می دهد. دیگر زمان رسم نمودار فرا رسیده فقط توجه داشته باشید قبل از رسم نمودار یک دستور hold on هست که به شما این اجازه رو میده تا نموداری که رسم کردید رو نگه دارید و نمودار های دیگر رو بهش اضافه کنه…. این دستور رو در انتهای هر رسم قرار دادیم…در نهایت نوبت به اجرای دستور plot میرسه که به این ترتیبه که شما متغیر هایی که قراره ترسیمشون کنید رو درون پرانتزی قرار میدید همانند دستور بالا…..

این عملیات ها را برای هر زتای مشخص تکرار میکنیم…. فقط بدونید که دیگه لازم به تعریف ماتریس r نیست چون این ماتریس مقادیر مختلف در یک بازه مشخصه که تغییر نکرده اند…..پس لازم نیست دوباره تعریف کنید چون در حافظه موقت باقی خواهد ماند….

درنهایت به یک دستور دیگر میرسیم به نام axis. این دستور برای شما محدوده نمودار های میله ای یا همون محور های اصلی رو مشخص میکنه. اولی محدوده محور افقیه و دومی محدوده محور قائم که برای نمودار بالا کاملا مشخصه چه محدوده ای قرار داره…..

دستور grid هم به شما شبکه بندی نمودار رسم شده رو امکان میده!!…. حال از نمودار رسم شده لذت ببرید…..


حال ترسیم نمودار فازی رو بررسی میکنیم….

%Start
% Phase angel-r Diagram
%zeta=z , f=Phase angel
z=1;
r=0:0.01:3;
f=atan((2*z*r.^3)./(1+(4*z.^2-1)*r.^2)).*(180./pi);
hold on;
plot(r,f)
z=0.5;
f=atan((2*z*r.^3)./(1+(4*z.^2-1)*r.^2)).*(180./pi);
hold on;
plot(r,f)
z=0.25;
f=atan((2*z*r.^3)./(1+(4*z.^2-1)*r.^2)).*(180./pi);
for n=1:301
if f(1,n)<0
f(1,n)=f(1,n)+180;
end
end
hold on;
plot(r,f)
z=0.1;
f=atan((2*z*r.^3)./(1+(4*z.^2-1)*r.^2)).*(180./pi);
for n=1:301
if f(1,n)<0
f(1,n)=f(1,n)+180;
end
end
hold on;
plot(r,f)
z=0.05;
f=atan((2*z*r.^3)./(1+(4*z.^2-1)*r.^2)).*(180./pi);
for n=1:301
if f(1,n)<0
f(1,n)=f(1,n)+180;
end
end
hold on;
plot(r,f)
z=0;
f=atan((2*z*r.^3)./(1+(4*z.^2-1)*r.^2)).*(180./pi)+180;
hold on;
plot(r,f)
axis([0,3,0,180])
grid
%End

رسم این نمودار حقیقتش یکم شونه های ما رو اذیت کرد (مثل اون بابایی که فرقون شونه هاشو اذیت میکرد!!!!)

عرض کنم خدمت شما ، همونطور که میدونید این دفعه قراره از یک معادله مثلثاتی مقدار بگیرید اونم از معادله آرک تانژانت. خب اینجا یکم کلاه ما با متلب توی هم میره چرا که ما میخوایم مقادیر زاویه رو از صفر تا 180 بده در صورتی که در هلپ متلب گفته شده آرک تانژانت رو در بازه 90 درجه تا -90 درجه محاسبه میکنه و اینجوری بود که اصولا به ما مقادیر اشتباه رو میداد. تا اینکه یک کلکی سوار کردیم تا بتونیم از متلب جواب درست رو بگیریم.این برنامه هم عینا همانند بالا است اما با یکسری تفاوت های جالب.

برای مقدار دهی به r از یک روش دیگه که باز هم یک ماتریس مقادیر برای r میسازه استفاده کردیم اما اینجوری که در اون بازه ای که ما میخوایم نقاطی با فاصله ای که ما براش تعریف میکنیم نسبت به هم میده…. در مثال بالا در بازه 0 تا 3 با فواصل 0.01 نقاطی به ما میده که به عبارتی میشه یک ماتریس 1 در 301 یا ماتریسی با یک ردیف و 301 ستون!!!. این ماتریس r  هست که متلب به ما تحویل میده خب با این ماتریس هست که معادله زاویه فاز رو فراخوانی میکنید البته با رعایت سیستم علامت گذاری برای ماتریس ها که در بالا ذکر شد….

اگر دقت کنید برای زاویه فاز از حرف f استفاده کردیم که در نهایت با ماتریس مقادیر r آن هم یک ماتریس (301*1) می شود.

مشکل ما از زمانی شروع میشه که زاویه f به نزدیکی های 90 درجه میرسد. این مشکل برای زتای 0.25 و زتاهای کوچکتر بروز می کند. چرا که هنگامی که مقدار زاویه آرک تانژانت منفی گردد متلب دیگر بازه 0 تا 90 درجه را ادامه نمیدهد و بازه منفی را دنبال میکند تا جواب مورد نظر را پیدا کند. برای همین هم برای جواب در بازه 0 تا -90 جستجو میکند و یک زاویه – به عنوان جواب به ما میدهد. در نتیجه در ماتریس پاسخ f ما مقادیر منفی را مشاهده خواهیم کرد….

برای رسم نمودار هم به مشکل خواهیم خورد… چرا که ما مقادیر منفی برای زاویه فاز نمیخواهیم!!!. حال یک راه پیشنهاد میکنیم. متلب که فهم و شعور ندارد!!!! ما باید شعور خود را به کار  بیندازیم اینجاست که قدرت خدا بر همه آشکار میگردد!!؟؟ ( ساخته بشر کجا ساخته خالق بشر کجا!!!)… حال به روش سقراط معما را حل میکنیم…. مگر ما به دنبال زاویه مثبت که در ادامه 90 درجه بود نمیگردیم…؟؟ خب …. مگر مقادیر ماتریسی که به ما متلب میدهد درست نیست؟؟؟؟ خب…. مگر این مقادیر از 90 درجه به سمت بازه های منفی میل نمیکنند؟؟؟؟خب… مگر کره زمین گرد نیست؟؟؟؟ خب…. مگر دایره مثلثاتی گرد نیست؟؟؟؟؟ خب مگر غیر این است که برای مقدار هر تانژانت دو زاویه میتوانیم بگوییم؟؟؟؟ خب مگر جز این است که این دو زاویه با هم 180 درجه که دقیقا نصف دایره کامل است تفاوت دارند؟؟؟؟؟ خب….. مگر غیر از این است که به آن مقادیر منفی اگر 180 درجه اضافه کنی همان مقادیر مثبتی را که میخواهی می یابی؟؟؟؟ خخخخخببببب…. خب دیگه نگو بگو چه جوری 180 به درایه های یک ماتریس اونم درایه های منفی ماتریس اضافه کنم!!!!! سقراطم دیگه جوابی نداره بده چون بلد نیست با متلب کار کنه!!!

حال که فهمیدید قراره چکار کنیم….برای این کار که قراره به درایه های منفی ماتریس f که همون ماتریس زاویه ما هست هر کدوم یک 180 درجه اضافه کنیم تا تبدیل به یک زاویه مثبت بشند طوریکه همون جواب قبلی رو به ما بدند….. برای این کار شما باید برنامه یک بازرسی رو بنویسی!!! …. یعنی اینکه تک تک درایه های ماتریس رو چک کنه ببینه کدوم منفی هست اگر منفی بود 180 تا اضافه کنه و دوباره مقدار جدید رو جایگزینش کنه خب این ماتریس f رو هم که مشخصاتش رو داریم… پس بسم الله.. از حلقه for و شرط if  با هم استفاده کردیم..

for n=1:301
if f(1,n)<0
f(1,n)=f(1,n)+180;
end
end

خب این بازرسی برای تک تک درایه هاست پس باید اول تعداد حلقه رو تعریف کنیم که اینجا تعداد ستون های ماتریس f همون تعداد حلقه ما ست که برابر با 301. بعد از اون شرط رو به کار بردیم. اون طرز نگارش برای معرفی درایه های یک ماتریس هست. الان در برنامه در روبروی if نوشته شده که که درایه ی سطر یک ، ستون n ام را چک کن ببین کوچکتر ازصفر است یا نه؟؟. خب در متلب اگر شرط روبروی if درست باشد به خط پایین که همون دستور شرط است رفته و آنرا اجرا میکند… خب با خودتان بگویید ما چه کاری با درایه های منفی ماتریس زاویه داشتیم….. آها یادمان آمد!! میخواستیم 180 درجه به آنها اضافه کنیم و جایگزین مقدار فعلی کنیم….که دستوری که در زیر آمده است همین را خواسته…. اگر هم شرط ارضا نشود به مرحله بعدی رفته تا اینکه تمام n ها را چک کند و دستور را خاتمه دهد… توجه کنید end اول برای if و end دوم برای for است.

خب حال ماتریس خواسته شده حاضر است….برای باقی زتا ها هم همین کار را میکنیم و نیازی به تعریف دوباره r برای آنها نداریم….اگر برای زتای 1 و 0.5 این شرطو حلقه را نزدیم برای این است که مقدار زاویه آنها اصلی منفی نمیشد و به عبارت بهتر مقدار آنها از 90 درجه تجاوز نمیکرد…..رسم که کنید نمودار زیر را به شما خواهد داد نتیجه!!!!!!

حال به رسم نمودار انتقال پذیری نیرو میپردازیم….

معادلات حاکم به همراه نمودار مربوطه را مشاهده میکنید….


نمودار مربوطه هم به شکل زیر است

این نمودار هم با توجه به فرمول ساده ای که داشت برای زتا های مختلف رسم خواهد شد….

%Start
% Force Transmissibility
% Zeta=z , f=Force Transmissibility
%For each zeta we can plot new digram that written below
z=0.1;
r=linspace(0,4,1000);
f=r.^2.*sqrt((1+(2*z*r).^2)./((1-r.^2).^2+(2*z*r).^2));
hold on
plot(r,f,›-.›)
z=0.2;
f=r.^2.*sqrt((1+(2*z*r).^2)./((1-r.^2).^2+(2*z*r).^2));
hold on
plot(r,f,›-.›)
z=0.35;
f=r.^2.*sqrt((1+(2*z*r).^2)./((1-r.^2).^2+(2*z*r).^2));
hold on
plot(r,f)
z=0.5;
f=r.^2.*sqrt((1+(2*z*r).^2)./((1-r.^2).^2+(2*z*r).^2));
hold on
plot(r,f,›-.›)
z=1;
f=r.^2.*sqrt((1+(2*z*r).^2)./((1-r.^2).^2+(2*z*r).^2));
hold on
plot(r,f)
z=0;
f=r.^2.*sqrt((1+(2*z*r).^2)./((1-r.^2).^2+(2*z*r).^2));
hold on
plot(r,f)
axis([0,4,0,4])
grid
%End

این نمودار توضیح خاصی ندارد.

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

در این نمودار به دلخواه برای رسم از دستورنقطه خط استفاده شده که برای این کار در دستور پلات کافی است بعد از وارد نمودن متغیر ها. شما علامت (‹.-‹) را وارد  کنید تا برای شما خط را به صورت نقطه  خط رسم کند.این هم نمودار رسم شده.


نمودار آخر نسبت Z/X را بر حسب تغییرات نسبت فرکانس r نشان میدهد.


این هم از نمودار مربوطه که از رسم معادلات بالا ناشی میگردد.

برای رسم این نمودار هم همانند نمودار های پیشین از برنامه زیر استفاده میکنیم .

%Start
%Responce of a damped system under the harmonic motion
%Base motion-r Diagram
%Zeta=z , m=(Z/Y)
z=0;
r=linspace(0,4,10000);
m=r.^2./sqrt((1-r.^2).^2+(2*z*r).^2);
hold on
plot(r,m)
z=1;
m=r.^2./sqrt((1-r.^2).^2+(2*z*r).^2);
hold on
plot(r,m)
z=.1;
m=r.^2./sqrt((1-r.^2).^2+(2*z*r).^2);
hold on
plot(r,m)
z=.15;
m=r.^2./sqrt((1-r.^2).^2+(2*z*r).^2);
hold on
plot(r,m)
z=.25;
m=r.^2./sqrt((1-r.^2).^2+(2*z*r).^2);
hold on
plot(r,m)
z=.5;
m=r.^2./sqrt((1-r.^2).^2+(2*z*r).^2);
hold on
plot(r,m)
axis([0,4,0,7])
grid
%End

برنامه بالا هم هیچ نکته خاص و اضافی ندارد و از همان نکاتی که در بالا اشاره شد بهره برده است.در نهایت این نمودار را در شکل زیر خواهیم داشت.

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

قابل توجه بعضیا!!!!!

آبشار با سقوط آغاز می گردد!!!

  1. Ali
    دسامبر 19, 2010 در 11:02 ق.ظ.

    مرسی کارم راه افتاد.

  1. No trackbacks yet.

پاسخی بگذارید

در پایین مشخصات خود را پر کنید یا برای ورود روی شمایل‌ها کلیک نمایید:

نشان‌وارهٔ وردپرس.کام

شما در حال بیان دیدگاه با حساب کاربری WordPress.com خود هستید. بیرون رفتن / تغییر دادن )

تصویر توییتر

شما در حال بیان دیدگاه با حساب کاربری Twitter خود هستید. بیرون رفتن / تغییر دادن )

عکس فیسبوک

شما در حال بیان دیدگاه با حساب کاربری Facebook خود هستید. بیرون رفتن / تغییر دادن )

عکس گوگل+

شما در حال بیان دیدگاه با حساب کاربری Google+ خود هستید. بیرون رفتن / تغییر دادن )

درحال اتصال به %s

%d وب‌نوشت‌نویس این را دوست دارند: