MatlabTips
891 subscribers
462 photos
73 videos
54 files
304 links
آموزش MATLAB با "استفاده از ویدئو و متن" در سطوح مبتدی تا پیشرفته
پاسخ به سوالات تخصصی:
@roholazandie
Download Telegram
ممکن است حدس زده باشیم که این نقاط از یک قاعده پیروی میکنند. فرض کنید میخواهیم یک قاعده به صورت یک معادله درجه دوم از یک مجموعه داده استخراج کنیم. یک معادله درجه دوم چیزی به صورت زیر خواهد بود:
یافتن ضرایب a0 ، a1 و a2 به روش های مختلفی صورت می گیرد که در مساله ی کلی تر رگرسیون بررسی می شوند. متلب می تواند این ضرایب را برای شما پیدا کند. برای این منظور کافی است دستور polyfit را به صورت زیر استفاده کنیم:
p = polyfit(t,y,2)
p =

-0.2942 1.0231 0.4981

و با دستور polyval مقدار آن را برای یک بازه حساب کنیم:
t2 = 0:0.1:2.8;
y2 = polyval(p,t2);
figure
plot(t,y,'o',t2,y2)
title('Plot of Data (Points) and Model (Line)')

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

#Curve_fitting #Regression #Guess
@MatlabTips
Forwarded from Leila Abedi
Alone With Numbers
Alexandre Desplat
👆👆👆
Soundtrack of "The imitation game" Movie: the life and work of Alan Turing.
عبور غبار و گرد خاک از ایران (تصویر از بالای خلیج فارس توسط ایستگاه فضایی بین المللی گرفته شده است)
iss040e113700_lrg.jpg
1.2 MB
تصویر فوق با کیفیت بالاتر برای مشاهده جزییات
Forwarded from Mr. Gol
🔵نحوه برخورد با مشکل زمان در الگوریتم ها🔵
سطح پیچیدگی:🌕🌑🌑🌑🌑
پیش‌نیاز: برنامه نویسی مقدماتی
برای: همه


مواقع زیادی پیش می آید که در انجام محاسبات دچار مشکل زمان می شویم. به این معنا که هر قدر روی کاغذ حساب می کنیم طول زمان اجرا به طور بسیار نامعقولی بالا است. اگر با این حالت مواجه شدید احتمالا به ترتیب با مشکلات زیر روبرو هستید:

1- درک نادرستی از مساله خود دارید. بهتر است دوباره به الگوریتم خود فکر کنید. به احتمال زیاد در قسمتی از کار خود به جای روش های بهینه تمام حالت های ممکن را بررسی می کنید. مثلا برای یافتن کوتاه ترین نقطه بین دو مسیر لازم نیست تمام مسیر های بین آنها چک شوند. برای این منظور بهتر است با کسی که بیشتر با موضوع آشناست مشورت کنید یا بیشتر در وب جستجو کنید.

2- اگر تا جای ممکن الگوریتم خودتان را بهینه کرده اید به دنبال راه حل های تقریبی( در صورت امکان) باشید. مثلا در بسیاری از مواقع یک راه حل شبه بهینه (suboptimal) کافی است. برای این منظور باید ادبیات مساله را جستجو کنید و به دنبال این راه حل ها باشید. گاهی اوقات هم می توانید از مجموعه داده خود یک نمونه بگیرید و روی کل آن کار نکنید.

3- اگر راه حل شبه بهینه به درد شما نمی خورد باید سراغ موازی سازی الگوریتم خود بروید. به دقت تمام قسمت های الگوریتم خود را بررسی کنید و ببینید که کدام قسمت ها می توانند به صورت جدا از هم اجرا شوند و تا پایان الگوریتم نیازی به داده های هم ندارند. به طور مثال چک کردن اینکه اعداد یک تا صدهزار کدام ها اول هستند را می توان به تقسیم بازه به تکه های 1000 تایی (یا هر اندازه دیگر) انجام داد زیرا محاسبه اینکه کدام عدد در بازه 1000 تا 2000 اول است ربطی به بازه 13000 تا 14000 ندارد.

4- اگر برنامه شما حتی قابلیت موازی سازی ندارد آنگاه احتمالا به طور ذاتی مساله سریال است مانند محاسبه عددی مساله سه جسم یا بیشتر الگوریتم های محاسبه رقم های پی. حتی ممکن است مساله شما در رده مسائل NP قرار بگیرد که تاکنون راه حل های با پیچیدگی چند جمله ای برای آن ها ارائه نشده است. در این صورت شما به مرز دانش رسیده اید و نباید نگران از ارائه راه حل های تقریبی باشید.
در قسمت بعدی به ارائه چند راه حل برای موازی سازی الگوریتم ها در متلب می پردازیم.

#Parallelization
@MatlabTips
🔵برنامه نویسی GPU🔵
سطح پیچیدگی:🌕🌑🌑🌑🌑
پیش‌نیاز: برنامه نویسی مقدماتی
برای: همه


کامپیوتر های چند هسته ای و تکنولوژی مولتی ترد(Multi-thread) به نرم افزار ها و سیستم عامل های امروزی کمک کرده است که بتوانند چندین کار را به صورت همزمان انجام دهند. این همزمانی تا جایی که مربوط به استفاده از هسته های مختلف برای محاسبه است موازی و بیش از آن یک مساله زمان بندی برای همزمان به نظر رسیدن است. به طور مشخص تر اگر شما یک CPU با چهار هسته دارید می توانید چهار کار را همزمان به معنای واقعی کلمه انجام دهید یک ترد به ازای هر هسته اما بیش از آن ترد های اضافه تنها در زمان بندی ای که توسط سیستم عامل کنترل می شوند به هسته های مختلف برای اجرا می روند. بنابراین برای محاسبات علمی مولتی ترد فقط تا حدودی می تواند کمک کند.
همه ما در کامپیوتر های شخصی خود یک پردازنده گرافیکی (GPU) داریم که از وجود آن غافل هستیم. صد البته که بازی ها و ویدیو هایی که می بینیم توسط این بخش رندر می شوند اما آیا می توان از توان محاسباتی GPU برای محاسبات خودمان استفاده کنیم؟ پاسخ مثبت است. اما چه مزایایی در این محاسبات هست. واحد پردازنده گرافیکی به صورت ذاتی برای انجام محاسبات ماتریسی با حجم بسیار بالا طراحی شده است. دلیل این مورد استفاده بسیار از جبر خطی در محاسبات گرافیکی است. همانطور که در شکل زیر می بینید. GPU بر خلاف CPU ساختار متفاوتی دارد و معمولا چند صد هسته دارد. علاوه بر آن یک حافظه اختصاصی پر سرعت هم در کنار آن وجود دارد. نحوه محاسبه در GPU به صورت زیر است:
1- ابتدا داده هایتان از حافظه اصلی (RAM) به حافظه GPU کپی می شود. این مرحله از همه زمانبر تر است و برای محاسبات کم حجم باعث می شود که سرعت آن در مقایسه با CPU کاهش پیدا کند.
2- پردازندهCPU به واحد GPU دستور یک محاسبه خاص را می دهد.
3- عملیات به صورت موازی در چندین هسته GPU انجام شده و نتیجه در حافظه GPU باقی می ماند.
4- مقدار نتیجه به حافظه اصلی کپی می شود.
پردازنده گرافیکی Nvidia یک سکوی نرم افزاری به نام CUDA معرفی کرده است که به برنامه نویسان اجازه می دهد به راحتی با زبان های C، C++ و Fortran بر روی GPU برنامه نویسی کنند. شرکت Mathwork توانسته با ارائه یک wrapper استفاده از CUDA را بسیار ساده کند. سینتکس استفاده از GPU در متلب به حدی ساده است که در نوع خود مثال زدنی است.( با توجه به حجم پیچیدگی کار با GPU در C).
به طور مثال فرض کنید می خواهیم دو ماتریس تصادفی را در GPU در هم ضرب کنیم. برای این منظور کافی است که از تابع gpuArray استفاده کنید تا ماتریستان از RAM به حافظه GPU منتقل شود. در مرحله بعد به صورت عادی آن ها را در هم ضرب می کنید:

tic
A = gpuArray(rand(10000,1000));
B = gpuArray(rand(1000,1000));
C = A*B;
toc


که نتیجه آن بر روی ماشین من 0.926980 ثانیه است. توجه کنید که متلب بسیاری از توابع را برای gpuArray ، overload کرده است. یعنی تابع ضرب در متلب اگر ورودی از جنس gpuArray ببنید آن را در GPU اجرا می کند در غیر این صورت در RAM کل عملیات را انجام میدهد. حال همین محاسبه را بر روی CPU انجام می دهیم:

tic
A = rand(10000,1000);
B = rand(1000,1000);
C = A*B;
toc


که زمان آن بر روی ماشین من 2.111759 ثانیه است. در این جا کاملا متوجه میزان اختلاف زمان می شوید. هرچند بر روی حجم بزرگتر داده این اختلاف می تواند اختلاف بین چند دقیقه و چند هفته شود!!
وقتی کد اولی را اجرا می کنید C به صورت gpuArray است و این بدان معناست که خروجی هنوز بر روی حافظه GPU قرار دارد. برای برگرداندن آن به RAM کافی است دستور زیر را اجرا کنیم:
D=gather(C)

در این صورت D همان C است که در حافظه قرار دارد. بیاد داشته باشید که بسیاری از توابع متلب مانند fft، fft2، abs، cos و غیره برای GPU پیاده سازی و overload شده اند. بنابراین قبل از برگرداندن نتایجتان به حافظه اصلی که بسیار زمانبر تر است بهتر است بیشتر عملیات خود را انجام داده باشید. در زیر لیست کامل تری از توابع پیاده سازی شده را می بینید.

https://uk.mathworks.com/help/distcomp/run-built-in-functions-on-a-gpu.html

#GPU_Programming #CUDA #gpuArray
@MatlabTips
🔵حلقه موازی parfor🔵
سطح پیچیدگی:🌕🌕🌕🌑🌑
پیش‌نیاز: برنامه نویسی مقدماتی
برای: کسانی که نیاز به افزایش سرعت برای محاسبات سنگین دارند.

یکی از روش هایی که می توان با استفاده از آن بخش های برنامه را به صورت موازی انجام داد استفاده از حلقه های موازی است. فرض کنید یک مجموعه کار داریم که می توانیم آن ها را به صورت موازی انجام دهیم. MATLAB Client داده های لازم را به یک pool از worker ها می دهد. هر کدام از worker ها مستقل از بقیه شروع به انجام کاری می کند که به آن محول شده است. کاملا مشخص است که این worker ها نباید وابستگی داده ای به هم داشته باشند: یعنی هیچکدام به داده های دیگری در مرحله ای از کار نیاز نداشته باشند. همچنین کارها ممکن است همزمان تمام نشوند. پس باید همه کارهایشان را تمام کنند تا نتیجه نهایی را داشته باشیم
. فرض کنید بخواهیم یک آرایه را به صورت زیر پر کنیم:

a = rand(10,1000000);
b = zeros(10,1000000);
parfor i=1:10
b(i,:) = fft(a(i,:));
end


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

parfor i=1:10
i
end


خروجی به ترتیب نیست از طرفی در هر بار اجرای این حلقه نتایج متفاوتی به دست می اید.
باید توجه کنید که همه جا نمی توانید از parfor استفاده کنید چراکه این کار اولا باید برای کارهای نسبتا سنگین باشد و ثانیا استقلال داده ای و زمانی برای کارهایتان وجود داشته باشد.

#Parfor #Parallelization

@MatlabTips
🔵پک آموزشی متلب مقدماتی تا متوسط🔵
دوستان همونطور که قبلا قولش رو داده بودم یک پک آموزشی متلب تقریبا 8 ساعته آماده کردم که میتونه بسیار براتون مفید باشه.
ویژگی‌ها:
1⃣به زبانی ساده و شیوا
2⃣داشتن تمرین در آخر هر فصل
3⃣استفاده از مثال‌های جذاب و کاربردی
3⃣مناسب برای همه رشته‌ها
4⃣داشتن اسلایدهای اموزشی مناسب
5⃣پاسخ به تمرینات آخر هر فصل
لینک دانلود پک آموزشی در زیر آمده است. منتظر دیدگاه‌های سازنده شما دوستان هستیم.
https://coffeematlab.com/courses/essentials/
🔵گامی رو به جلو از گروه بزرگ mathworks!🔵
نسخه Matlab R2016a با برتری بلامنازع نسبت به ورژن‌های قبلی توانسته است امکاناتی در اختیار کاربران خود قرار دهد که بار دیگر موجبات شگفتی و تحیر همگان را برانگیزد. در این نسخه تغییرات اساسی از ویرایشگر زنده گرفته تا تغییرات اساسی در گرافیک و اضافه کردن محورها به مختصات قطبی و بهینه سازی انواع تولباکس های تخصصی مشاهده می‌شود. در لینک زیر می‌توانید این نرم افزار را دانلود کنید.
https://coffeematlab.com/courses/matlab-2016a/
🔵دستور sound و کاربرد آن🔵

با استفاده از دستور sound می‌توانید صدایی در کامپیوتر خود ایجاد کنید(البته اگر کارت صدا نصب باشد). فرمان sound یک بردار می‌گیرد و آن را به عنوان شکل موج صوت می‌پندارد و پخشش می‌کند. به عبارت دیگر sound یک ماتریس را به سیگنال صدا تبدیل می‌کند.
علاقه مندان می‌توانند در لینک زیر اطلاعات تکمیلی را مطالعه کنند.
https://coffeematlab.com/2089/%D8%B5%D8%AF%D8%A7-%D8%AF%D8%B1-%D9%85%D8%AA%D9%84%D8%A8/
@matlabTips