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


شاید برای خیلی از شماها پیش آمده که برنامه ای نوشته اید و برای آن واقعا وقت یا هزینه کرده اید و از طرفی کسی از شما میخواهد که برنامه تان را در اختیارش قرار دهید(دوست، استاد یا ....). اصلا برای کسی کاری انجام داده اید و میخواهید قبل از اینکه هزینه را از او بگیرید به طرف مقابل اثبات کنید که همه خروجی‌ها بر وفق مراد است. قطعا شما نمی توانید فایل متنی(mfile) را تحویل دهید، چون آنوقت شما چیزی جز یک بازنده نخواهید بود.
هنگامی که متلب یک فایل را اجرا میکند، ابتدا آن را کامپایل کرده(به زبان سطح پایینی تبدیل میکند) و سپس از آن لحظه به بعد با زبان خودش برنامه شما را اجرا میکند دقت کنید که برنامه ای که شما مینویسید پلی است بین انسان و ماشین که متلب این مسیر را بر روی دوش میکشد.
1⃣ متلب این قابلیت را دارد که کد کامپیل شده را بصورت یک فایل به شما تحویل دهد. این فایل با پسوند p (به معنی protected) تولید میکند.
2⃣به هیچ طریقی نمیتوان محتویات درونی pکد را دید. ممکن است طرف مقابل قدری اندوهگین شود، اما چه کسی به اندوه یک انسانی که به خودش زحمت نوشتن یک برنامه نمیدهد، اهمیت میدهد؟؟ هیچکس. پس از کد خود محافظت کنید.
مثال:
function y=TestPcode(x)

% This function test pcode
y=x.^2+10;

حالا میخواهیم نسخه p را بسازیم.
pcode('TestPcode')

اگر یک فولدر از فایل های متنی را بخواهید pکد کنید، کافی است آدرس فولدر را به تابع pcode دهید. باقی را بگذارید به عهده متلب.
#Pcode, #For_intermidiate
@MatlabTips
MathIsEveryWhere!!
#Fun
@MatlabTips
🔵استراتژی‌هایی برای استفاده بهینه از مموری🔵
سطح پیچیدگی:🌕🌓🌑🌑🌑
پیش‌نیاز: کد نویسی متوسط
برای:متوسط
📝هدف از این پست : بررسی نکاتی که در مدیریت حافظه به کار خواهد آمد.

1⃣برای صرفه‌جویی در مموری(Memory) هنگامی که متغیرهایی تعریف میکنیم بهتر است به نکات زیر دقت کنیم:
2⃣از تعریف متغیرهای موقتی با اندازه‌های بزرگ پرهیز کنید و بعد از آنکه کارتان تمام شد آنها را پاک کنید.
3⃣هنگامی که با آرایه‌هایی با اندازه ثابت کار میکنید، آنها را پیش تخصیص کنید.
4⃣ابتدا ماتریس‌های بزرگ را پیش تخصیص کنید(در پست بعدی تشریح خواهم کرد).
5⃣متغیرها را با یک ماتریس خالی ([]) تخصیص دهید یا با استفاده از دستور clear کارشان را یکسره کنید.
6⃣تا جایی که میتوانید از یک متغیر دوباره استفاده کنید و از تعریف متغیرهای جدید اجتناب کنید(البته دقت کنید که متغیری که قبلا از نوع رشته بوده جایز نیست که مقدار عددی را در آن بریزید).
#Memory, #Preallocate, #For_intermediate
@MatlabTips
🔵چگونگی همگرا شدن چندجمله‌ای‌های تیلور🔵
سطح پیچیدگی:🌕🌑🌑🌑🌑
پیش‌نیاز: آشنایی با چندجمله‌ای‌های تیلور
برای: مبتدی
📝هدف از این پست : درک هندسی از موضوع

در ویدئوی زیر خواهید دید چگونه با زیاد شدن جملات بسط تیلور برای تابعی که می خوایم بسطش بدیم، نمودار بسط به نمودار تابع هم بزدیک و نزدیک‌تر میشه.
#MathTips
@MatlabTips
🔵مقادیر ویژه و تکینگی🔵
در پنجره فرمان متلب دستور 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