🔵استراتژیهایی برای استفاده بهینه از مموری🔵
سطح پیچیدگی:🌕🌓🌑🌑🌑
پیشنیاز: کد نویسی متوسط
برای:متوسط
📝هدف از این پست : بررسی نکاتی که در مدیریت حافظه به کار خواهد آمد.
1⃣برای صرفهجویی در مموری(Memory) هنگامی که متغیرهایی تعریف میکنیم بهتر است به نکات زیر دقت کنیم:
2⃣از تعریف متغیرهای موقتی با اندازههای بزرگ پرهیز کنید و بعد از آنکه کارتان تمام شد آنها را پاک کنید.
3⃣هنگامی که با آرایههایی با اندازه ثابت کار میکنید، آنها را پیش تخصیص کنید.
4⃣ابتدا ماتریسهای بزرگ را پیش تخصیص کنید(در پست بعدی تشریح خواهم کرد).
5⃣متغیرها را با یک ماتریس خالی ([]) تخصیص دهید یا با استفاده از دستور clear کارشان را یکسره کنید.
6⃣تا جایی که میتوانید از یک متغیر دوباره استفاده کنید و از تعریف متغیرهای جدید اجتناب کنید(البته دقت کنید که متغیری که قبلا از نوع رشته بوده جایز نیست که مقدار عددی را در آن بریزید).
#Memory, #Preallocate, #For_intermediate
@MatlabTips
سطح پیچیدگی:🌕🌓🌑🌑🌑
پیشنیاز: کد نویسی متوسط
برای:متوسط
📝هدف از این پست : بررسی نکاتی که در مدیریت حافظه به کار خواهد آمد.
1⃣برای صرفهجویی در مموری(Memory) هنگامی که متغیرهایی تعریف میکنیم بهتر است به نکات زیر دقت کنیم:
2⃣از تعریف متغیرهای موقتی با اندازههای بزرگ پرهیز کنید و بعد از آنکه کارتان تمام شد آنها را پاک کنید.
3⃣هنگامی که با آرایههایی با اندازه ثابت کار میکنید، آنها را پیش تخصیص کنید.
4⃣ابتدا ماتریسهای بزرگ را پیش تخصیص کنید(در پست بعدی تشریح خواهم کرد).
5⃣متغیرها را با یک ماتریس خالی ([]) تخصیص دهید یا با استفاده از دستور clear کارشان را یکسره کنید.
6⃣تا جایی که میتوانید از یک متغیر دوباره استفاده کنید و از تعریف متغیرهای جدید اجتناب کنید(البته دقت کنید که متغیری که قبلا از نوع رشته بوده جایز نیست که مقدار عددی را در آن بریزید).
#Memory, #Preallocate, #For_intermediate
@MatlabTips
🔵چگونگی همگرا شدن چندجملهایهای تیلور🔵
سطح پیچیدگی:🌕🌑🌑🌑🌑
پیشنیاز: آشنایی با چندجملهایهای تیلور
برای: مبتدی
📝هدف از این پست : درک هندسی از موضوع
در ویدئوی زیر خواهید دید چگونه با زیاد شدن جملات بسط تیلور برای تابعی که می خوایم بسطش بدیم، نمودار بسط به نمودار تابع هم بزدیک و نزدیکتر میشه.
#MathTips
@MatlabTips
سطح پیچیدگی:🌕🌑🌑🌑🌑
پیشنیاز: آشنایی با چندجملهایهای تیلور
برای: مبتدی
📝هدف از این پست : درک هندسی از موضوع
در ویدئوی زیر خواهید دید چگونه با زیاد شدن جملات بسط تیلور برای تابعی که می خوایم بسطش بدیم، نمودار بسط به نمودار تابع هم بزدیک و نزدیکتر میشه.
#MathTips
@MatlabTips
🔵مقادیر ویژه و تکینگی🔵
در پنجره فرمان متلب دستور eigshow را وارد کنید تا بتوانید نمایش گرافیکی مقادیر ویژه و مقادیر تکین را مشاهده کنید. با وارد کردن این دستور پنجره ای ظاهر میشود که دو بردار در آن قرار دارد. با چرخاندن دوبردار این مقدیر بر روی دوایری نگاشت پیدا میکنند.
#Fun, #Easter_egg , #eigenvalues
@MatlabTips
در پنجره فرمان متلب دستور eigshow را وارد کنید تا بتوانید نمایش گرافیکی مقادیر ویژه و مقادیر تکین را مشاهده کنید. با وارد کردن این دستور پنجره ای ظاهر میشود که دو بردار در آن قرار دارد. با چرخاندن دوبردار این مقدیر بر روی دوایری نگاشت پیدا میکنند.
#Fun, #Easter_egg , #eigenvalues
@MatlabTips
🔵به خوشمزگی مونت کارلو🔵
سطح پیچیدگی:🌕🌓🌑🌑🌑
پیشنیاز: کد نویسی متوسط
برای: همه
📝هدف از این پست : فردا اگه کسی ازمون پرسید مونت کارلو چیه، چیزی برا گفتن داشته باشیم.
یکی از روشهایی که تاثیر بسزایی در بسیاری از شاخه های علم محاسباتی دارد، روش "شبیهسازی مونت کارلو" است. اسم این روش برگرفته از یکی از کازینوهای شهر مونت کارلو است – شبیه سازی مونت کارلو از اعداد تصادفی برای مدل کردن برخی از فرایندها مورد استفاده قرارمیگیرد. این روش زمانی خوب جواب میدهد که از احتمالات موجود آگاهی داشته باشیم اما از طرف دیگر نتایج به اندازهای پیچیده است که تعیین آنها موجب رنجش خاطر ما میشود. مقدار زیادی از زمان CPUهای برخی از سریعترین کامپیوترها در جهان بر روی اجرا شبیه سازی های مونت کارلو گذاشته میشود، شبیهسازی هایی که با یک سری قوانین پایهای فیزیک بیان میشود اما متاسفانه حل تحلیلی برای آنها وجود ندارد.
برای نمایش تکنیک مونت کارلو اجازه بدهید از یک مثال ساده شروع کنیم. میخواهیم مقدار عدد pi را با استفاده از این شبیه سازی بدست آوریم. بصورت زیر عمل میکنیم:
مربعی را در نظر میگیریم که یک گوشه آن در مبدا مختصت قرار دارد و طول هر ضلع آن واحد است. نیازی به توضیح نیست که مساحت آن یک میشود. یک دایره را در این مربع محاط میکنیم. بدین ترتیب مساحت دایره میشود pi/4 . با استفاده از شبیه سازی مونت کارلو مساحت نسبی دایره و مربع را محاسبه میکنیم و نهایتا مساحت دایره را در 4 ضرب میکنیم تا مقدار pi بدست آید. اما یافتن مساحت دایره به ذکاوت نیاز دارد.
برای نقطه x,y که درون دایره به شعاع 1 واقع است، فاصله این نقطه تا مبدا بصورت زیر محاسبه میشود.
سطح پیچیدگی:🌕🌓🌑🌑🌑
پیشنیاز: کد نویسی متوسط
برای: همه
📝هدف از این پست : فردا اگه کسی ازمون پرسید مونت کارلو چیه، چیزی برا گفتن داشته باشیم.
یکی از روشهایی که تاثیر بسزایی در بسیاری از شاخه های علم محاسباتی دارد، روش "شبیهسازی مونت کارلو" است. اسم این روش برگرفته از یکی از کازینوهای شهر مونت کارلو است – شبیه سازی مونت کارلو از اعداد تصادفی برای مدل کردن برخی از فرایندها مورد استفاده قرارمیگیرد. این روش زمانی خوب جواب میدهد که از احتمالات موجود آگاهی داشته باشیم اما از طرف دیگر نتایج به اندازهای پیچیده است که تعیین آنها موجب رنجش خاطر ما میشود. مقدار زیادی از زمان CPUهای برخی از سریعترین کامپیوترها در جهان بر روی اجرا شبیه سازی های مونت کارلو گذاشته میشود، شبیهسازی هایی که با یک سری قوانین پایهای فیزیک بیان میشود اما متاسفانه حل تحلیلی برای آنها وجود ندارد.
برای نمایش تکنیک مونت کارلو اجازه بدهید از یک مثال ساده شروع کنیم. میخواهیم مقدار عدد pi را با استفاده از این شبیه سازی بدست آوریم. بصورت زیر عمل میکنیم:
مربعی را در نظر میگیریم که یک گوشه آن در مبدا مختصت قرار دارد و طول هر ضلع آن واحد است. نیازی به توضیح نیست که مساحت آن یک میشود. یک دایره را در این مربع محاط میکنیم. بدین ترتیب مساحت دایره میشود pi/4 . با استفاده از شبیه سازی مونت کارلو مساحت نسبی دایره و مربع را محاسبه میکنیم و نهایتا مساحت دایره را در 4 ضرب میکنیم تا مقدار pi بدست آید. اما یافتن مساحت دایره به ذکاوت نیاز دارد.
برای نقطه x,y که درون دایره به شعاع 1 واقع است، فاصله این نقطه تا مبدا بصورت زیر محاسبه میشود.
این فاصه کمتر مساوی واحد است. میتوانیم هزاران نقطه تصادفی به این صورت تولید کنیم و تشخیص دهیم که آیا این نقطه درون دایره هست یا خیر. اگر این نقطه درون دایره باشد، یک واحد به شمارنده اضافه میکنیم. بعد از اینکه به اندازه کافی نقطه تولید کردیم، نسبت نقاطی که درون دایره بودن به کل نقاط تولید شده به نسبت مساحت داره به مساحت مربع میل میکند. بنابراین مقدار pi خیلی ساده بدست خواهد آمد.
کد برنامه در زیر آمده است:
دقت کنید که هر چقدر نقاط تولید بیشتر باشد، جواب بهتری خواهید گرفت. مثال های کاربردی تری در ادامه خواهیم زد.
#Monte_Carlo, #For_all , #PI
@MatlabTips
% pimc.m
% Matlab Program to Find Pi using Random Numbers
Nrand = input('How Many Random Numbers ');
NInside = 0;
for nloops=1:Nrand
Xrand = rand; % Generate Random XY Point
Yrand = rand;
Rrand = Xrand^2 + Yrand^2; % Find its distance from origin
if (Rrand <= 1)
NInside = NInside + 1;
end
end
disp(['Total Generated: ' num2str(Nrand) ' Inside Pts: ' ...
num2str(NInside)]);
piapprox = 4*NInside/Nrand;
disp([' Approximation to pi = ' num2str(piapprox)]);
دقت کنید که هر چقدر نقاط تولید بیشتر باشد، جواب بهتری خواهید گرفت. مثال های کاربردی تری در ادامه خواهیم زد.
#Monte_Carlo, #For_all , #PI
@MatlabTips
Forwarded from تراکالا
🔯چه جوری ویروس مخفی کننده پوشهها در فلش را از بین ببریم؟
مشکل مخفی شدن فایلها و پوشهها در فلش مموری یکی از رایجترین مشکلات کسانی است که فایلهاشان را با فلش این طرف و آن طرف میبرند و فلششان را به کامپیوترها و لپتاپهای مختلف وصل میکنند. این مشکل را ویروس خاصی به وجود میآید و اگر کامپیوترتان این ویروس را بگیرد و آنتیویروستان بهروز نباشد، ویروستان به سرعت و از طریق هر فلشی که به کامپیوتر وصل میکنید، تکثیر میشود! این ویروس فایلها و پوشهها را مخفی میکند و حتی اگر آنتیویروستان را به روز کنید و اصل ویروس را از بین ببرید، همچنان فایلها و پوشهها مخفی میمانند. امشب میخواهیم ببینیم چطور میشود فایلها و پوشههایی را که این ویروس مخفی کرده، دوباره به حالت عادی برگرداند.
🔸حذف ویروس مخفی کننده پوشهها و فایلها:
اگر روزی فلشتان را باز کردید و دیدید داخل آن چیزی نیست، وحشت نکنید. احتمالا ویروس گرفتهاید و ویروسی که این کار را میکند، خوشبختانه فایلها را پاک نمیکند و فقط آنها را مخفی میکند. برای اطمینان از اینکه فایلها پاک نشدهاند، میتوانید فضای اشغالشده روی فلش را بررسی کنید. اگر فلشتان همچنان پُر بود، فایلهای ارزشمندتان همچنان روی فلش قرار دارد. پس بیایید ببینیم چگونه میتوانیم فایلها را به حالت اول برگردانیم.
گام اول: قبل از هر چیز آنتیویروستان را بهروز و کامپیوترتان را اسکن کنید.
گام دوم: کلید ویندوز را نگه دارید و دکمهی r را فشار بدهید تا پنجرهی Run در گوشهی پایین و سمت چپ صفحه باز شود. در پنجرهی Run فرمان cmd را تایپ کنید و سپس کلید اینتر را فشار دهید تا پنجرهی فرمان ویندوز یا همان Command Prompt باز شود.
گام سوم: My Computer را باز کنید و نام درایو مورد نظرتان را ببینید. مثلاً اگر درایو فلشتان در مای کامپیوتر F است، در پنجرهی فرمان ویندوز تایپ کنید F: و کلید اینتر را فشار بدهید تا پنجرهی فرمان وارد درایو F (یا هر چیز دیگری که مربوط به فلشتان است) شود.
گام چهارم: دستور زیر را وارد کنید و کلید اینتر را فشار بدهید:
attrib -r -a -s -h *.*/s/d
این دستور تمام بلاهایی را که ویروس سر فایلها و پوشههاتان آورده، از بین میبرد. در واقع این ویروس ویژگیهای فایلها و فولدرها را طوری دستکاری میکند که نتوانید آنها را ببینید. این فرمان ویژگیهای فایلها و فولدرها را به حالت اول برمیگرداند.
@terakala
مشکل مخفی شدن فایلها و پوشهها در فلش مموری یکی از رایجترین مشکلات کسانی است که فایلهاشان را با فلش این طرف و آن طرف میبرند و فلششان را به کامپیوترها و لپتاپهای مختلف وصل میکنند. این مشکل را ویروس خاصی به وجود میآید و اگر کامپیوترتان این ویروس را بگیرد و آنتیویروستان بهروز نباشد، ویروستان به سرعت و از طریق هر فلشی که به کامپیوتر وصل میکنید، تکثیر میشود! این ویروس فایلها و پوشهها را مخفی میکند و حتی اگر آنتیویروستان را به روز کنید و اصل ویروس را از بین ببرید، همچنان فایلها و پوشهها مخفی میمانند. امشب میخواهیم ببینیم چطور میشود فایلها و پوشههایی را که این ویروس مخفی کرده، دوباره به حالت عادی برگرداند.
🔸حذف ویروس مخفی کننده پوشهها و فایلها:
اگر روزی فلشتان را باز کردید و دیدید داخل آن چیزی نیست، وحشت نکنید. احتمالا ویروس گرفتهاید و ویروسی که این کار را میکند، خوشبختانه فایلها را پاک نمیکند و فقط آنها را مخفی میکند. برای اطمینان از اینکه فایلها پاک نشدهاند، میتوانید فضای اشغالشده روی فلش را بررسی کنید. اگر فلشتان همچنان پُر بود، فایلهای ارزشمندتان همچنان روی فلش قرار دارد. پس بیایید ببینیم چگونه میتوانیم فایلها را به حالت اول برگردانیم.
گام اول: قبل از هر چیز آنتیویروستان را بهروز و کامپیوترتان را اسکن کنید.
گام دوم: کلید ویندوز را نگه دارید و دکمهی r را فشار بدهید تا پنجرهی Run در گوشهی پایین و سمت چپ صفحه باز شود. در پنجرهی Run فرمان cmd را تایپ کنید و سپس کلید اینتر را فشار دهید تا پنجرهی فرمان ویندوز یا همان Command Prompt باز شود.
گام سوم: My Computer را باز کنید و نام درایو مورد نظرتان را ببینید. مثلاً اگر درایو فلشتان در مای کامپیوتر F است، در پنجرهی فرمان ویندوز تایپ کنید F: و کلید اینتر را فشار بدهید تا پنجرهی فرمان وارد درایو F (یا هر چیز دیگری که مربوط به فلشتان است) شود.
گام چهارم: دستور زیر را وارد کنید و کلید اینتر را فشار بدهید:
attrib -r -a -s -h *.*/s/d
این دستور تمام بلاهایی را که ویروس سر فایلها و پوشههاتان آورده، از بین میبرد. در واقع این ویروس ویژگیهای فایلها و فولدرها را طوری دستکاری میکند که نتوانید آنها را ببینید. این فرمان ویژگیهای فایلها و فولدرها را به حالت اول برمیگرداند.
@terakala
🔵ماتریسهای بزرگ رو زودتر تخصیص دهید🔵
سطح پیچیدگی:🌕🌕🌑🌑🌑
پیشنیاز: کد نویسی مقدماتی
برای: پیشرفته
📝هدف از این پست : استفاده بهینه از حافظه
متلب از روش هیپ (heap) کردن برای مدیریت حافظه استفاده میکند.هنگامی که حافظه کافی در heap متلب جهت ذخیرهسازی متغیرهای جاری وجود نداشته باشد، ازطریق سیستم عامل به حافظه درخواست میدهد. تا زمانی که یک سگمنت مناسب برای جاسازی متغیر در heap متلب پیدا نشود، متلب از مموری استفاده میکند.
برای مثال اجرای کد زیر در متلب در یک ماشین خاص به اندازه 15.4 مگابایت ram میگیرد:
در حالی که عبارت زیر 16.4 مگابایت Ram میگیرد:
حالا به این عبارات دقت کنید که تقریبا 32.4 مگابایت Ram میگیرند. به این دلیل که متلب قادر نیست دیگر آرایه 2.1 مگابایتی را در فضایی که قبلا توسط دو آرایه 1 مگابایتی اشغال شده بود، جاسازی کند:
سادهترین راه برای جلوگیری از بیشتخصیص حافظه، تخصیص بزرگترین بردار در ابتدای امر است. این عبارات در حدود 16.4 مگابایت ram میگیرند.
#For_advanced, #Memory ,#Preallocate
@MatlabTips
سطح پیچیدگی:🌕🌕🌑🌑🌑
پیشنیاز: کد نویسی مقدماتی
برای: پیشرفته
📝هدف از این پست : استفاده بهینه از حافظه
متلب از روش هیپ (heap) کردن برای مدیریت حافظه استفاده میکند.هنگامی که حافظه کافی در heap متلب جهت ذخیرهسازی متغیرهای جاری وجود نداشته باشد، ازطریق سیستم عامل به حافظه درخواست میدهد. تا زمانی که یک سگمنت مناسب برای جاسازی متغیر در heap متلب پیدا نشود، متلب از مموری استفاده میکند.
برای مثال اجرای کد زیر در متلب در یک ماشین خاص به اندازه 15.4 مگابایت ram میگیرد:
a = rand(1e6,1);
b = rand(1e6,1);
در حالی که عبارت زیر 16.4 مگابایت Ram میگیرد:
c = rand(2.1e6,1);
حالا به این عبارات دقت کنید که تقریبا 32.4 مگابایت Ram میگیرند. به این دلیل که متلب قادر نیست دیگر آرایه 2.1 مگابایتی را در فضایی که قبلا توسط دو آرایه 1 مگابایتی اشغال شده بود، جاسازی کند:
a = rand(1e6,1);
b = rand(1e6,1);
clear
c = rand(2.1e6,1);
سادهترین راه برای جلوگیری از بیشتخصیص حافظه، تخصیص بزرگترین بردار در ابتدای امر است. این عبارات در حدود 16.4 مگابایت ram میگیرند.
c = rand(2.1e6,1);
clear
a = rand(1e6,1);
b = rand(1e6,1);
#For_advanced, #Memory ,#Preallocate
@MatlabTips
🔵میانگینگیری دمای کره زمین با استفاده از شبیهسازی مونت کارلو🔵
سطح پیچیدگی:🌕🌕🌕🌑🌑
پیشنیاز: خواندن پست قبلی مربوط به مونت کارلو
برای: پیشرفته
📝هدف از این پست : کاربردی از شبیه سازی مونت کارلو
برای تعیین میانگین دمای کره، باید میانگین دمای هر باند عرض جغرافیایی(latitude) را محاسبه کنیم. پر واضح است که از خط استوا تا عرض 10 درجه نسبت به عرض 80 درجه تا قطب شمال(که فقط خرس بزرگ و پسر نانوک الان زندگی میکنند) نواحی بیشتری وجود دارد .
بنابراین برای تعیین میانگین دما باید به هر باند وزنی متناسب با نواحی آن باند داده شود. اگرچه این موضوع بصورت تحلیلی و با استفاده از انتگرالگیری میسر است، اما می توان با استفاده از روش مونت کارلو هم چنین کاری انجام داد.
برنامه ای را که در پست قبلی مربوط به مونت کارلو نوشته شد، میتوانیم قدری اصلاح کنیم تا برنامه این پست را بنویسیم.
در این مسئله نقطه xyz را درون یک مکعب به ابعاد واحد تولید میکنیم. در مرحله بعد تعیین میکنیم که آیا همچین نقطهای بر روی سطح کره ای به شعاع یک قرار دارد یا خیر مانند زیر:
در مرحله بعد چک میکنیم که آیا نقاط در باند جغرافیایی و بر روی سطح کره مذکور قرار گرفته اند یا خیر. یک شمارنده برای ارزیابی این معیار در نظر گرفته شده است. در پایان نیز میتوانیم تعداد نقاط در هر باند عرض جغرافیایی(دقت کنید هر باند 10 درجه تقسیم کرده ایم) را بر کل نقاط تولید شده که بر روی سطح کره بودند تقسیم کنیم.
#Monte_Carlo
#For_advanced
@MatlabTips
سطح پیچیدگی:🌕🌕🌕🌑🌑
پیشنیاز: خواندن پست قبلی مربوط به مونت کارلو
برای: پیشرفته
📝هدف از این پست : کاربردی از شبیه سازی مونت کارلو
برای تعیین میانگین دمای کره، باید میانگین دمای هر باند عرض جغرافیایی(latitude) را محاسبه کنیم. پر واضح است که از خط استوا تا عرض 10 درجه نسبت به عرض 80 درجه تا قطب شمال(که فقط خرس بزرگ و پسر نانوک الان زندگی میکنند) نواحی بیشتری وجود دارد .
بنابراین برای تعیین میانگین دما باید به هر باند وزنی متناسب با نواحی آن باند داده شود. اگرچه این موضوع بصورت تحلیلی و با استفاده از انتگرالگیری میسر است، اما می توان با استفاده از روش مونت کارلو هم چنین کاری انجام داد.
برنامه ای را که در پست قبلی مربوط به مونت کارلو نوشته شد، میتوانیم قدری اصلاح کنیم تا برنامه این پست را بنویسیم.
در این مسئله نقطه xyz را درون یک مکعب به ابعاد واحد تولید میکنیم. در مرحله بعد تعیین میکنیم که آیا همچین نقطهای بر روی سطح کره ای به شعاع یک قرار دارد یا خیر مانند زیر:
Rrand = Xrand.^2 + Yrand.^2 + Zrand.^2;
CheckValue = Rrand<=1.01 & Rrand>=.99;
در مرحله بعد چک میکنیم که آیا نقاط در باند جغرافیایی و بر روی سطح کره مذکور قرار گرفته اند یا خیر. یک شمارنده برای ارزیابی این معیار در نظر گرفته شده است. در پایان نیز میتوانیم تعداد نقاط در هر باند عرض جغرافیایی(دقت کنید هر باند 10 درجه تقسیم کرده ایم) را بر کل نقاط تولید شده که بر روی سطح کره بودند تقسیم کنیم.
% Spheremc.m
% Program to Determine Fraction of Area in Latitude Bands on a Sphere
Theta1 = 0;
Theta2 = 90;
NSubDiv = 9; % Nine Subdivisions of 10 Degrees Each
dTh = (Theta2-Theta1)/NSubDiv; % Width of Each Division (10 Degrees)
ThLow = Theta1:dTh:Theta2-dTh; % Lower Limit for Each Region ( 0,10,20..80)
ThHigh = Theta1+dTh:dTh:Theta2; % Upper Limit for Each Region (10,20,30..90)
Nrand = 8192; % Number of Points for Student Edition of Matlab
Nmax = input('How Many Loops of 8192 Values Each ');
NTrand = 0; % Initialize Total number of Points Generated
NGoodPts = 0; % Initialize Total number of Points on Sphere
NZone = zeros(1,NSubDiv); % Initialize Number in each zone
T0 = clock; % Keep track of CPU time (for reference purposes)
for nloops=1:Nmax
Xrand = rand(1,Nrand); % Generate XYZ Points in space
Yrand = rand(1,Nrand);
Zrand = rand(1,Nrand);
Rrand = Xrand.^2 + Yrand.^2 + Zrand.^2; % Find distance from origin
CheckValue = Rrand<=1.01 & Rrand>=.99; % See if on surface of sphere
NGoodPts = NGoodPts + sum(CheckValue); % Keep track of total on surface
Lat = asin(Zrand)*180/pi; % Find the Latitude of Each point
for i=1:NSubDiv % Sweep through all latitudes
NZoneCheck = Lat < ThHigh(i) & Lat >= ThLow(i); % Check if in latitude
NZoneCheck = NZoneCheck .* CheckValue; % and on surface
NZone(i) = NZone(i) + sum(NZoneCheck); % If so, add to sums
end
NTrand = NTrand + Nrand; % Total number of Points Generated
end
T0 = clock - T0; % CPU Time at end of program
disp(['Total Generated: ' num2str(NTrand) ' Good Pts: '...
num2str(NGoodPts) ' Seconds: ' num2str(T0)]);
fLatitude = NZone/NGoodPts;
fError = fLatitude./sqrt(NZone);
fActual = sin(ThHigh*pi/180.)-sin(ThLow*pi/180.);
disp('Summary for Zones');
disp('Lower Angle, Upper Angle, Simulated Fraction in Band, Uncertainty,');
disp(' Actual Fraction (using Calculus)');
disp([ ThLow' ThHigh' fLatitude' fError' fActual']);
#Monte_Carlo
#For_advanced
@MatlabTips
الماسی به بزرگی ماه در فضا کشف شده که آن را "لوسی" نامیدهاند (بر اساس آهنگ گروه بیتلز به نام "لوسی در آسمان با الماسها")
#Science_Fact
@MatlabTips
#Science_Fact
@MatlabTips
Forwarded from تراکالا
اگر در مرورگر یک Tab را به اشتباه بستید کافی است این سه کلید را همزمان فشار دهید
Ctrl+shift+the
@terakala
Ctrl+shift+the
@terakala
🔵انتگرال عددی با استفاده از روش مونت کارلو🔵
سطح پیچیدگی:🌕🌕🌑🌑🌑
پیشنیاز: خواندن پست قبلی مربوط به مونت کارلو
برای: پیشرفته و متوسط
📝هدف از این پست : کاربردی از شبیه سازی مونت کارلو در انتگرال گیری
در پستهای قبلی دیدیم که چگونه با استفاده از روش مونت کارلو توانستیم عدد p را تقریب بزنیم و ایدهای برای میانگین گیری دمای کره زمین ارائه دادیم. اما شاید اینها کاربردهایی خیلی پیشپا افتاده از این روش است. شاید باور کردن این موضوع برای شما هم دشوار باشد که از این روش در پروژههای عظیمی مانند پروژه منهتن (پروژه ساخت بمب هستهای) هم به کمک مهندسین آمده است. اما مشهورترین روش استفاده، به کارگیری این روش توسط انریکو فرمی در سال 1930 بود که از روشی تصادفی برای تعیین مشخصات نوترون تازه کشفشده بود.
اینها را گفتم که به عظمت این روش پی ببریم و این اندیشه در ذهنمان نماند که برای مسائل ساده جوابگو است.
در این پست میخواهیم انتگرال یک تابع را با استفاده از روش مونت کارلو بدست آوریم و آن را با مقدار واقعیش مقایسه کنیم. میدانیم که هر چقدر تعداد نمونه های مونت کارلو بیشتر باشد، دقت بهتری میدهد و البته پرواضح است که این روش برای انتگرالهایی با سطوح یا حجم¬های بدترکیب و زشت و یا توابع پیچیده چندمتغیره کاربرد دارد. در مقام مقایسه من از یک تابع مقدماتی شروع میکنم.
فرض کنید تابع شما به صورت زیر باشد:
سطح پیچیدگی:🌕🌕🌑🌑🌑
پیشنیاز: خواندن پست قبلی مربوط به مونت کارلو
برای: پیشرفته و متوسط
📝هدف از این پست : کاربردی از شبیه سازی مونت کارلو در انتگرال گیری
در پستهای قبلی دیدیم که چگونه با استفاده از روش مونت کارلو توانستیم عدد 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⃣انتگرال را با نسبت گیری تعداد نقاطی که زیر منحنی افتاده اند با تعداد کل نقاط شبیه سازی ضربدر کل ناحیه مستطیلی بدست می آید.
🖊توجه: از آنجایی که این روش ماهیت تصادفی دارد، اگر شما دو بار اجرا بگیرید با تعداد نمونه های یکسان، جواب متفاوتی به شما میدهد.
#For_advanced , #For_intermediate , #Monte_Carlo , #Integral
@MatlabTips
دامنه انتگرال. در شکل بال از 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