MatlabTips
891 subscribers
462 photos
73 videos
54 files
304 links
آموزش MATLAB با "استفاده از ویدئو و متن" در سطوح مبتدی تا پیشرفته
پاسخ به سوالات تخصصی:
@roholazandie
Download Telegram
🔵مقادیر ویژه و تکینگی🔵
در پنجره فرمان متلب دستور eigshow را وارد کنید تا بتوانید نمایش گرافیکی مقادیر ویژه و مقادیر تکین را مشاهده کنید. با وارد کردن این دستور پنجره ای ظاهر میشود که دو بردار در آن قرار دارد. با چرخاندن دوبردار این مقدیر بر روی دوایری نگاشت پیدا میکنند.
#Fun, #Easter_egg , #eigenvalues
@MatlabTips
33 سال نوری دورتر سیاره‌ای وجود دارد که کاملا پوشیده از یخ سوزان است
#science_Facts
@MatlabTips
🔵به خوشمزگی مونت کارلو🔵
سطح پیچیدگی:🌕🌓🌑🌑🌑
پیش‌نیاز: کد نویسی متوسط
برای: همه
📝هدف از این پست : فردا اگه کسی ازمون پرسید مونت کارلو چیه، چیزی برا گفتن داشته باشیم.

یکی از روشهایی که تاثیر بسزایی در بسیاری از شاخه های علم محاسباتی دارد، روش "شبیه‌سازی مونت کارلو" است. اسم این روش برگرفته از یکی از کازینوهای شهر مونت کارلو است – شبیه سازی مونت کارلو از اعداد تصادفی برای مدل کردن برخی از فرایندها مورد استفاده قرارمیگیرد. این روش زمانی خوب جواب میدهد که از احتمالات موجود آگاهی داشته باشیم اما از طرف دیگر نتایج به اندازه‌ای پیچیده است که تعیین آنها موجب رنجش خاطر ما میشود. مقدار زیادی از زمان CPUهای برخی از سریعترین کامپیوترها در جهان بر روی اجرا شبیه سازی های مونت کارلو گذاشته میشود، شبیه‌سازی هایی که با یک سری قوانین پایه‌ای فیزیک بیان میشود اما متاسفانه حل تحلیلی برای آنها وجود ندارد.
برای نمایش تکنیک مونت کارلو اجازه بدهید از یک مثال ساده شروع کنیم. میخواهیم مقدار عدد pi را با استفاده از این شبیه سازی بدست آوریم. بصورت زیر عمل میکنیم:
مربعی را در نظر میگیریم که یک گوشه آن در مبدا مختصت قرار دارد و طول هر ضلع آن واحد است. نیازی به توضیح نیست که مساحت آن یک میشود. یک دایره را در این مربع محاط میکنیم. بدین ترتیب مساحت دایره میشود pi/4 . با استفاده از شبیه سازی مونت کارلو مساحت نسبی دایره و مربع را محاسبه میکنیم و نهایتا مساحت دایره را در 4 ضرب میکنیم تا مقدار pi بدست آید. اما یافتن مساحت دایره به ذکاوت نیاز دارد.
برای نقطه x,y که درون دایره به شعاع 1 واقع است، فاصله این نقطه تا مبدا بصورت زیر محاسبه میشود.
این فاصه کمتر مساوی واحد است. میتوانیم هزاران نقطه تصادفی به این صورت تولید کنیم و تشخیص دهیم که آیا این نقطه درون دایره هست یا خیر. اگر این نقطه درون دایره باشد، یک واحد به شمارنده اضافه میکنیم. بعد از اینکه به اندازه کافی نقطه تولید کردیم، نسبت نقاطی که درون دایره بودن به کل نقاط تولید شده به نسبت مساحت داره به مساحت مربع میل میکند. بنابراین مقدار pi خیلی ساده بدست خواهد آمد.
کد برنامه در زیر آمده است:
%  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
🔵ماتریس‌های بزرگ رو زودتر تخصیص دهید🔵
سطح پیچیدگی:🌕🌕🌑🌑🌑
پیش‌نیاز: کد نویسی مقدماتی
برای: پیشرفته
📝هدف از این پست : استفاده بهینه از حافظه

متلب از روش هیپ (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
دستورالعمل‌های کیمیاگری به جا مانده از نیوتن در قرن هفدهم، کشف شد
#Science_Facts
@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
Forwarded from تراکالا
اگر در مرورگر یک Tab را به اشتباه بستید کافی است این سه کلید را همزمان فشار دهید
Ctrl+shift+the
@terakala
🔵انتگرال عددی با استفاده از روش مونت کارلو🔵
سطح پیچیدگی:🌕🌕🌑🌑🌑
پیش‌نیاز: خواندن پست قبلی مربوط به مونت کارلو
برای: پیشرفته و متوسط
📝هدف از این پست : کاربردی از شبیه سازی مونت کارلو در انتگرال گیری


در پست‌های قبلی دیدیم که چگونه با استفاده از روش مونت کارلو توانستیم عدد 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