MatlabTips
891 subscribers
462 photos
73 videos
54 files
304 links
آموزش MATLAB با "استفاده از ویدئو و متن" در سطوح مبتدی تا پیشرفته
پاسخ به سوالات تخصصی:
@roholazandie
Download Telegram
🔵انتگرال عددی با استفاده از روش مونت کارلو🔵
سطح پیچیدگی:🌕🌕🌑🌑🌑
پیش‌نیاز: خواندن پست قبلی مربوط به مونت کارلو
برای: پیشرفته و متوسط
📝هدف از این پست : کاربردی از شبیه سازی مونت کارلو در انتگرال گیری


در پست‌های قبلی دیدیم که چگونه با استفاده از روش مونت کارلو توانستیم عدد p را تقریب بزنیم و ایده‌ای برای میانگین گیری دمای کره زمین ارائه دادیم. اما شاید اینها کاربردهایی خیلی پیش‌پا افتاده از این روش است. شاید باور کردن این موضوع برای شما هم دشوار باشد که از این روش در پروژه‌های عظیمی مانند پروژه منهتن (پروژه ساخت بمب هسته‌ای) هم به کمک مهندسین آمده است. اما مشهورترین روش استفاده، به کارگیری این روش توسط انریکو فرمی در سال 1930 بود که از روشی تصادفی برای تعیین مشخصات نوترون تازه کشف‌شده بود.
اینها را گفتم که به عظمت این روش پی ببریم و این اندیشه در ذهنمان نماند که برای مسائل ساده جوابگو است.
در این پست میخواهیم انتگرال یک تابع را با استفاده از روش مونت کارلو بدست آوریم و آن را با مقدار واقعیش مقایسه کنیم. میدانیم که هر چقدر تعداد نمونه های مونت کارلو بیشتر باشد، دقت بهتری میدهد و البته پرواضح است که این روش برای انتگرالهایی با سطوح یا حجم¬های بدترکیب و زشت و یا توابع پیچیده چندمتغیره کاربرد دارد. در مقام مقایسه من از یک تابع مقدماتی شروع میکنم.
فرض کنید تابع شما به صورت زیر باشد:
انتگرال تابع مساحت زیر نمودار منحنی پیوسته هست. برای بدست آوردن انتگرال با مونت کارلو به دو پارامتر نیازمندیم:
دامنه انتگرال. در شکل بال از 0 تا xmax ادامه دارد.
دوم بیشینه تابع در محدوده انتگرال گیری که آن را fmax میگیریم.
دو مقدار xmax و fmax ابعاد یک مستطیل را تشکیل میدهند که تابع را محیط کرده است. انتگرال تابع بخشی از مستطیل است.
درست مانند مثالهای قبلی یک سری اعداد تصادفی تولید میکنیم (xr,fr) و چک میکنیم که این نقطه در بالای منحنی است یا زیر آن.

مراحل:
1⃣تولید یک جفت عدد رندم به نام r1 وr2 . دقت کنید که این دو عدد بین 0و1 باشد.
2⃣محاسبه xr=r1*xmax و fr=r2*fmax. (مشخص است، من در محدوده فضای جستجو اعداد تصادفی تولید میکنم)
3⃣چک کنیم که آیا نقطه زیر منحنی است یا خیر (fr<f(xr))
4⃣اضافه کردن یک عدد به شمارنده در صورتی که نقطه زیر منحنی افتاد
5⃣تکرار مراحل بالا به تعداد کافی
6⃣انتگرال را با نسبت گیری تعداد نقاطی که زیر منحنی افتاده اند با تعداد کل نقاط شبیه سازی ضربدر کل ناحیه مستطیلی بدست می آید.

🖊توجه: از آنجایی که این روش ماهیت تصادفی دارد، اگر شما دو بار اجرا بگیرید با تعداد نمونه های یکسان، جواب متفاوتی به شما میدهد.
clc
clear all
f = @(x) exp(x);
xmax = input('insert xmax:\n');
fmax = input('insert maximum of function:\n');
n = input('number of simulation:\n');
cnt = 0;
for i = 1 : n
r1 = rand;
r2 = rand;
xr = r1 * xmax;
fr = r2 * fmax;
if fr < f(xr)
cnt = cnt + 1;
end
end
area = cnt/n * xmax * fmax;
disp(['the area under the curve is: ' num2str(area)])
err = abs(integral(f,0,xmax)-area);
fprintf('error of monte carlo is %2.4f',err)

#For_advanced , #For_intermediate , #Monte_Carlo , #Integral
@MatlabTips
🔵حل و فصل خطاهای out of memory🔵
سطح پیچیدگی:🌕🌓🌑🌑🌑
پیش‌نیاز: آشنایی با مبانی حافظه
برای: پیشرفته
📝هدف از این پست : استفاده بهینه از حافظه. این پست برای کسانی است که مقام متلب رو بخوان بیشتر درک کنن.


هنگامی که متلب به سیستم عامل درخواست یک مقدار حافظه میدهد و آن مقدار بیش از حافظه موجود است، خطای out of memory دریافت میشود. برای جلوگیری از این حالت چند روش وجود دارد که در چند پست به آن میپردازیم:
🗝پیشنهادات کلی
اگر همچین پیامی دیدید در وهله اول سعی کنید از تکینکهای "استفاده بهینه از حافظه" که در پستهای قبلی اشاره شد استفاده کنید. اما اگر همچنان این خطا پافشاری کرد اقدامات زیر را انجام دهید:
1⃣جهت کاهش فرگمنتیشن حافظه داده ها را فشرده کنید
2⃣در صورت امکان، ماتریس های بزرگ را به چندین ماتریس کوچک تقسیم کنید تا در هر زمان حافظه کمتری صرف شود.
3⃣اگر میتوانید اندازه داده هایتان را کاهش دهید.
4⃣مطمئن شوید که قیدی خارجی بر روی دسترسی متلب به حافظه وجود نداشته ابشد.(در سیستم های unix از دستور limit برای چک کردن این موضوع استفاده کنید)
5⃣حافظه بیشتری به سیستمتان اضافه کنید.
اینها یک سری نکات کلی بود و هر نکته باید به تفصیل پرداخته شود. در پست های جداگانه ای تشریح خواهیم کرد.

#Memory , #Out_of_memory , #For_advanced
@MatlabTips
🔵فشرده‌سازی داده‌ها در حافظه🔵
سطح پیچیدگی:🌕🌓🌑🌑🌑
پیش‌نیاز: آشنایی با مبانی حافظه
برای: پیشرفته
📝هدف از این پست : استفاده بهینه از حافظه.

گفته شد که متلب از روش heap برای مدیریت حافظه استفاده میکند، پس طولانی کردن اجراهای متلب ممکن است به فرگمنت شدن حافظه بینجامد. هنگامی که حافظه فرگمنت شود، مکان های بسیاری از فضاهای خالی وجود دارد ولی تکه تکه هستند و به دلیل عدم پیوستگی نمیتوانند متغیرهای بزرگ را که جدیدا تعریف شده اند در خود جای دهند(دقت کنید که برای جاسازی یک آرایه در حافظه نیاز به یک بلوک پیوسته از حافظه داریم).
1⃣ در صورتی که خطای out of memory دریافت کردید، تابع pack برخی از داده ها را در حافظه فشرده میکند، بنابراین بلوک های پیوسته بزرگتر آزاد میشود.
#For_advanced , #Out_of_memory , #Memory
@MatlabTips
روز گذشته خبر فرود موفقیت‌آمیز راکت شرکت فضایی اسپیس ایکس بر روی سکوی شناور منتشر شد. این اتفاق را می‌توان انقلابی بزرگ در صنعت فضایی دانست که می‌تواند شروع عصری تازه در ارسال راکت و ماهواره‌‌بر به فضا باشد. روز گذشته یکی از موشک های فالکون ۹ این شرکت به شکل موفقیت آمیزی بر روی سکوی شناور فرود آمد.
این پروژه شاهکار نظریه کنترل به عنوان شاخه ای از ریاضیات است که از قرن شانزدهم با نیوتون و لایبنیتز آغاز شد و با لاپلاس، لاگرانژ، لیاپانوف و کولموگروف به اوج رسید. این نظریه در قلب سیستم هایی قرار دارد که قابلیت خودتنظیمی در مقابل تغییرات و کنترل شرایط پیچیده مانند همین فرود را دارند.
اسپیس ایکس تا کنون چندین بار در انجام این پروژه شکست خورده بود تا این که بالاخره توانست یک راکت را برای ماموریت فضایی اعزام کند و پس از انجام ماموریت، آن را به سلامت به زمین بازگرداند. موفقیت این پروژه بدین معناست که از این پس شرکت‌های فضایی می‌توانند از راکت‌هایی که برای ماموریت‌های فضایی مانند حمل ماهواره اعزام می‌شوند، دوباره استفاده کنند و این به معنای کاهش شگفت‌انگیز هزینه‌های پروژه‌های فضایی است.
#News
@MatlabTips
با توجه به این برخی دوستان تصور می کنند فیلم ویدیوی بالا به صورت برعکس نمایش داده شده و فیک است، منابع زیر را برای بررسی بیشتر علاقه مندان قرار می دهیم:
[1] https://www.theguardian.com/science/video/2016/apr/09/spacex-falcon-9-rocket-successfully-lands-on-ocean-platform-video
[2] https://www.space.com/32517-spacex-sticks-rocket-landing-sea-dragon-launch.html
🔵پایه‌ریزی یک برنامه🔵
سطح پیچیدگی:🌕🌓🌑🌑🌑
پیش‌نیاز: ندارد
برای: همه
📝هدف از این پست : برنامه نویسی اصولی

هنگامی که تصمیم میگیرید چگونه یک برنامه را بنویسید، برنامه را بگیرید و به تعدادی برنامه های کوچکتر و مستقل تقسیم کنید.
وظیفه هر برنامه را به عنوان یک تابع جداگانه تعریف کنید.
توابع را به شکل متناسبی کوتاه انتخاب کنید بطوری که هر تابع یک وظیفه انجام دهد.
#Programming , #For_all
@MatlabTips
تقریبا 1100 گونه از خفاش وجود دارد و هیچکدام از آنها کور نیستند. در نور به خوبی میبینند. چون در غار زندگی میکنند و تاریک است از سیستم سونیک برای راه یابی در تاریکی استفاده میکنند.
#Science_Facts
@MatlabTips
جلوگیری از خطای out of memory با استفاده از افزایش java heap memory به روایت تصویر.
#Out_of_memory , #For_advanced
@MatlabTips
Forwarded from Programmer Jokes
🔵بازسازی موتور اجرایی متلب🔵
📝هدف از این پست: آشنایی با نسخه جدید متلب 2015b

در نسخه 2015b با عنایت به موتور اجرایی جدید روشی که کدهای متلب اجرا میشد تغییرات اساسی کرد. معماری بهبودیافته ای که برنامه های متلب را اجرا میکند سریعتر است و بعلاوه یک پلتفرم نیز برای بهبود در نسخه های آینده هم فراهم میکند و جالب اینجاست که همه اینها بدون کوچکترین تغییری در کد شما اتفاق می افتد(کافی است نسخه متلب خود را ارتقا دهید). و حالا نظر برخی از متخصصین تراز اول دنیا در این باره:
🖊یر التمن یکی از غول های متلب و نویسنده کتاب روش های افزایش سرعت در متلب میگوید:
من با افراد مختلفی کار کردم و زمان زیادی را صرف کمک کردن به کاهش زمان اجرای کدهای متلب آنها کردم. اما زمانی که متوجه شدم که موتور جدید چقدر در بهبود عملکرد موثر است واقعا شگفت زده شدم. حتی یکی از همین افراد گزارش داد که یکی از پروسس های بسیار مهم در برنامه اش دو برابر سریعتر در نسخه 2015b کار میکند.

🖊آقای روبرت دانفورث مهندس، تحلیلگر مدلسازی و تست کمپانی کوهلر میگوید:
موتور اجرایی جدید متلب در نسخه 2015b زمان اجرا کدهای متلب ما را نصف کرده است.

🖊پروفسور انریکو نوبیل متخصص ترمودینامیک و انتقال حرارت میگوید:
برنامه های من در حجم های دو بعدی و یه بعدی برای انتقال حرارت و جریان شاره ها بشدت بهبود یافته است - تقریبا 35 درصد - خسته نباشید!
🖊مهندس ایرج فرجی مدیر کانال matlab_tutorial میگوید:
از ورژن 2010 استفاده کنید چرا که سریعتر است!!!!!!!!!!!!!!!!!!!!!

🌕انشتین🌕 یک جمله فوق العاده زیبا دارد که جا دارد اینجا گفته شود:
🖊دو چیز انتها ندارد: جهان هستی و حماقت بشر. در مورد اولی مشکوکم، اما دومی را یقین دارم.

مرجع:
https://blogs.mathworks.com/loren/2016/02/12/run-code-faster-with-the-new-matlab-execution-engine/
#R2015b , #News , #Facts
@MatlabTips
از آنجایی که سیاه چاله ها نوری ساطع نمیکنند، ردیابی آنها برای منحمان دشوار است. اما زمانیکه یک سیاهچاله به اندازه کافی به یک شی، مانند ستاره، نزدیک میشود و شروع به مکیدن جرم آن میکند، ماده ای که به درون گرانشش کشیده میشود به اندازه ای داغ مشود که شروع به درخشیدن میکند و انرژی به فرم اشعه X آزاد میکند. با مشاهده این نور بوسیله تلسکوپهای فضایی، دانشمندان قادرند مخفیگاه سیاهچاله ها را در کیهان تشخیص دهند.
🔵با ما همراه شوید.🔵
#Facts
@MatlabTips
🔵آرایه ای از توابع🔵
سطح پیچیدگی:🌕🌕🌑🌑🌑
پیش‌نیاز: برنامه نویسی مقدماتی
برای: متوسط و پیشرفته

همانطور که در قسمت قبل شرح داده شد با توابع هم می توان مانند متغیر ها برخورد کرد. اگر اینطور باشد می توان تابع ها را مانند متغیر ها در آرایه ها ذخیره کرد. برای این کار کافی است به صورت زیر عمل کنیم:
f = {@(x)x.^2;
@(y)y+10;
@(x,y)x.^2+y+10};

در این صورت می توانید تابع های داخل آرایه را آدرس دهی کنید و سپس مقدار ورودی را به آن ها پاس کنید. با توجه به توابع بالا به مثال های زیر دقت کنید:
x = 1;
y = 10;

f{1}(x)
f{2}(y)
f{3}(x,y)
ans =
1

ans =
20

ans =
21

@MatlabTips
#Lambda_Function , #Anonymous_Function
از آمدنم نبود گردون را سود
وز رفتن من جلال و جاهش نفزود
وز هیچ کسی نیز دو گوشم نشنود
کاین آمدن و رفتنم از بهر چه بود
(درخت زندگی و جایگاه انسان(هوموساپینس) در آن)
🔵فرگمنتیشن سینمایی🔵
سطح پیچدگی: 🌓🌑🌑🌑🌑
پیش نیاز: ندارد
برای: همه
📝هدف از این پست: درک مفهوم fragmentaion و پیوستگی حافظه

یه روز تصمیم میگیرید، با خونواده برید سینما که دور هم باشید. میرید گیشه و میگید چهار تا صندلی کنار هم میخام. گیشه‌ای برمیگرده بهتون میگه چهار تا صندلی کنار هم ندارم (یعنی صندلی ها contiguous یا پیوسته نداره). از اونجایی که نیت ما دور هم بودن و کنار هم بودن بوده ترجیح میدم بریم تو پارک کنار هم بشینیم تا اینکه تو سینما جداجدا بشینیم و بازی خیره کننده الناز شاکر دوست و امثالهم ببینیم.
در این مثال مرد گیشه‌ای 4 تا مشتری رو از دست داد، صرفا به دلیل اینکه نتونسته بود صندلی ها رو مدیریت کنه و به هر مشتری یه صندلی پخش و پلا داده بود. بنابراین فضای ماتریسی صندلی های (دقت کنید که تو سینما صندلی ها با سطر و ستون مشخص میشود) سینما تیکه تیکه (یا fragment) شده است و آنطور که باید از این فضا بهینه استفاده نشده است.
در عالم تخصیص حافظه ها هم به همین صورت است. وقتی شما یک متغیر که شامل چندین مقدار است(یک آرایه یا ماتریس) تعریف میکنید، اعضای این آرایه یا ماتریس حکم یک خانواده را دارند که فقط دوست دارند یکجا کنار هم باشند تا پراکنده. اصلا حافظه سیستم شما این را قبول نمیکند که یک خانواده جدا جدا تخصیص شود. بنابراین آرایه یا ماتریسی که تعریف کردید باید یک فضای پیوسته(contiguous) برایش پیدا کنید و گرنه خطای out of memory نصیبتان می شود و باید بروید در پارک بشینید.
و اینجا هم وظیفه برنامه نویس است که فضا را حیف و میل نکند(تا باعث fragmentشدن حافظه نشود) و با استفاده از روش هایی که در پست های قبلی گفته شد و در پست های آتی هم خواهیم گفت، بیاییم فضا را بهینه سازی کنیم.
ویندوز این قابلیت را در اختیار شما قرار داده است که حافظه کامپیوترتان را defragment کنید(که البته در ورژن های جدید با نام optimize) شناخته شده است. در پست بعدی بصورت تصویری defragment کردن ویندوز را نشان میدهیم.
#For_all , #Memory, #fragmentaion
@MatlabTips