MatlabTips
Відкрити в Telegram
آموزش MATLAB با "استفاده از ویدئو و متن" در سطوح مبتدی تا پیشرفته پاسخ به سوالات تخصصی: @roholazandie
Показати більше977
Підписники
Немає даних24 години
Немає даних7 днів
Немає даних30 днів
Архів дописів
977
🔵اطلاعیه🔵
به دلیل درخواست دوستان و صدالبته به دلیلی حلاوت مبحث محاسبات عددی و کاربردی بودن آن برای دانشجویان در پست های آینده به مباحث انتگرال گیری عددی، مشتقگیری عددی، حل معادلات دیفرانسیل معمولی و جزیی(کد نویسی با روش های موجود و معرفی توابع متلب) پرداخته خواهد شد. از آنجایی که این پست ها با جزییات است و برخی دوستان ممکن است تمایلی به آن نداشته باشند در تلگرام خلاصه ای از پست آورده خواهد شد و لینک مربوطه در زیر آن قرار میدهیم.
#caution
977
🔵دستور sound و کاربرد آن🔵
با استفاده از دستور sound میتوانید صدایی در کامپیوتر خود ایجاد کنید(البته اگر کارت صدا نصب باشد). فرمان sound یک بردار میگیرد و آن را به عنوان شکل موج صوت میپندارد و پخشش میکند. به عبارت دیگر sound یک ماتریس را به سیگنال صدا تبدیل میکند.
علاقه مندان میتوانند در لینک زیر اطلاعات تکمیلی را مطالعه کنند.
http://coffeematlab.com/2089/%D8%B5%D8%AF%D8%A7-%D8%AF%D8%B1-%D9%85%D8%AA%D9%84%D8%A8/
@matlabTips
977
🔵گامی رو به جلو از گروه بزرگ mathworks!🔵
نسخه Matlab R2016a با برتری بلامنازع نسبت به ورژنهای قبلی توانسته است امکاناتی در اختیار کاربران خود قرار دهد که بار دیگر موجبات شگفتی و تحیر همگان را برانگیزد. در این نسخه تغییرات اساسی از ویرایشگر زنده گرفته تا تغییرات اساسی در گرافیک و اضافه کردن محورها به مختصات قطبی و بهینه سازی انواع تولباکس های تخصصی مشاهده میشود. در لینک زیر میتوانید این نرم افزار را دانلود کنید.
http://coffeematlab.com/courses/matlab-2016a/
977
🔵پک آموزشی متلب مقدماتی تا متوسط🔵
دوستان همونطور که قبلا قولش رو داده بودم یک پک آموزشی متلب تقریبا 8 ساعته آماده کردم که میتونه بسیار براتون مفید باشه.
ویژگیها:
1⃣به زبانی ساده و شیوا
2⃣داشتن تمرین در آخر هر فصل
3⃣استفاده از مثالهای جذاب و کاربردی
3⃣مناسب برای همه رشتهها
4⃣داشتن اسلایدهای اموزشی مناسب
5⃣پاسخ به تمرینات آخر هر فصل
لینک دانلود پک آموزشی در زیر آمده است. منتظر دیدگاههای سازنده شما دوستان هستیم.
http://coffeematlab.com/courses/essentials/
977
. فرض کنید بخواهیم یک آرایه را به صورت زیر پر کنیم:
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
@MatlabTips977
🔵حلقه موازی parfor🔵
سطح پیچیدگی:🌕🌕🌕🌑🌑
پیشنیاز: برنامه نویسی مقدماتی
برای: کسانی که نیاز به افزایش سرعت برای محاسبات سنگین دارند.
یکی از روش هایی که می توان با استفاده از آن بخش های برنامه را به صورت موازی انجام داد استفاده از حلقه های موازی است. فرض کنید یک مجموعه کار داریم که می توانیم آن ها را به صورت موازی انجام دهیم. MATLAB Client داده های لازم را به یک pool از worker ها می دهد. هر کدام از worker ها مستقل از بقیه شروع به انجام کاری می کند که به آن محول شده است. کاملا مشخص است که این worker ها نباید وابستگی داده ای به هم داشته باشند: یعنی هیچکدام به داده های دیگری در مرحله ای از کار نیاز نداشته باشند. همچنین کارها ممکن است همزمان تمام نشوند. پس باید همه کارهایشان را تمام کنند تا نتیجه نهایی را داشته باشیم
977
پردازنده گرافیکی 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 شده اند. بنابراین قبل از برگرداندن نتایجتان به حافظه اصلی که بسیار زمانبر تر است بهتر است بیشتر عملیات خود را انجام داده باشید. در زیر لیست کامل تری از توابع پیاده سازی شده را می بینید. http://uk.mathworks.com/help/distcomp/run-built-in-functions-on-a-gpu.html #GPU_Programming #CUDA #gpuArray @MatlabTips
977
🔵برنامه نویسی GPU🔵
سطح پیچیدگی:🌕🌑🌑🌑🌑
پیشنیاز: برنامه نویسی مقدماتی
برای: همه
کامپیوتر های چند هسته ای و تکنولوژی مولتی ترد(Multi-thread) به نرم افزار ها و سیستم عامل های امروزی کمک کرده است که بتوانند چندین کار را به صورت همزمان انجام دهند. این همزمانی تا جایی که مربوط به استفاده از هسته های مختلف برای محاسبه است موازی و بیش از آن یک مساله زمان بندی برای همزمان به نظر رسیدن است. به طور مشخص تر اگر شما یک CPU با چهار هسته دارید می توانید چهار کار را همزمان به معنای واقعی کلمه انجام دهید یک ترد به ازای هر هسته اما بیش از آن ترد های اضافه تنها در زمان بندی ای که توسط سیستم عامل کنترل می شوند به هسته های مختلف برای اجرا می روند. بنابراین برای محاسبات علمی مولتی ترد فقط تا حدودی می تواند کمک کند.
همه ما در کامپیوتر های شخصی خود یک پردازنده گرافیکی (GPU) داریم که از وجود آن غافل هستیم. صد البته که بازی ها و ویدیو هایی که می بینیم توسط این بخش رندر می شوند اما آیا می توان از توان محاسباتی GPU برای محاسبات خودمان استفاده کنیم؟ پاسخ مثبت است. اما چه مزایایی در این محاسبات هست. واحد پردازنده گرافیکی به صورت ذاتی برای انجام محاسبات ماتریسی با حجم بسیار بالا طراحی شده است. دلیل این مورد استفاده بسیار از جبر خطی در محاسبات گرافیکی است. همانطور که در شکل زیر می بینید. GPU بر خلاف CPU ساختار متفاوتی دارد و معمولا چند صد هسته دارد. علاوه بر آن یک حافظه اختصاصی پر سرعت هم در کنار آن وجود دارد. نحوه محاسبه در GPU به صورت زیر است:
1- ابتدا داده هایتان از حافظه اصلی (RAM) به حافظه GPU کپی می شود. این مرحله از همه زمانبر تر است و برای محاسبات کم حجم باعث می شود که سرعت آن در مقایسه با CPU کاهش پیدا کند.
2- پردازندهCPU به واحد GPU دستور یک محاسبه خاص را می دهد.
3- عملیات به صورت موازی در چندین هسته GPU انجام شده و نتیجه در حافظه GPU باقی می ماند.
4- مقدار نتیجه به حافظه اصلی کپی می شود.
977
🔵نحوه برخورد با مشکل زمان در الگوریتم ها🔵
سطح پیچیدگی:🌕🌑🌑🌑🌑
پیشنیاز: برنامه نویسی مقدماتی
برای: همه
مواقع زیادی پیش می آید که در انجام محاسبات دچار مشکل زمان می شویم. به این معنا که هر قدر روی کاغذ حساب می کنیم طول زمان اجرا به طور بسیار نامعقولی بالا است. اگر با این حالت مواجه شدید احتمالا به ترتیب با مشکلات زیر روبرو هستید:
1- درک نادرستی از مساله خود دارید. بهتر است دوباره به الگوریتم خود فکر کنید. به احتمال زیاد در قسمتی از کار خود به جای روش های بهینه تمام حالت های ممکن را بررسی می کنید. مثلا برای یافتن کوتاه ترین نقطه بین دو مسیر لازم نیست تمام مسیر های بین آنها چک شوند. برای این منظور بهتر است با کسی که بیشتر با موضوع آشناست مشورت کنید یا بیشتر در وب جستجو کنید.
2- اگر تا جای ممکن الگوریتم خودتان را بهینه کرده اید به دنبال راه حل های تقریبی( در صورت امکان) باشید. مثلا در بسیاری از مواقع یک راه حل شبه بهینه (suboptimal) کافی است. برای این منظور باید ادبیات مساله را جستجو کنید و به دنبال این راه حل ها باشید. گاهی اوقات هم می توانید از مجموعه داده خود یک نمونه بگیرید و روی کل آن کار نکنید.
3- اگر راه حل شبه بهینه به درد شما نمی خورد باید سراغ موازی سازی الگوریتم خود بروید. به دقت تمام قسمت های الگوریتم خود را بررسی کنید و ببینید که کدام قسمت ها می توانند به صورت جدا از هم اجرا شوند و تا پایان الگوریتم نیازی به داده های هم ندارند. به طور مثال چک کردن اینکه اعداد یک تا صدهزار کدام ها اول هستند را می توان به تقسیم بازه به تکه های 1000 تایی (یا هر اندازه دیگر) انجام داد زیرا محاسبه اینکه کدام عدد در بازه 1000 تا 2000 اول است ربطی به بازه 13000 تا 14000 ندارد.
4- اگر برنامه شما حتی قابلیت موازی سازی ندارد آنگاه احتمالا به طور ذاتی مساله سریال است مانند محاسبه عددی مساله سه جسم یا بیشتر الگوریتم های محاسبه رقم های پی. حتی ممکن است مساله شما در رده مسائل NP قرار بگیرد که تاکنون راه حل های با پیچیدگی چند جمله ای برای آن ها ارائه نشده است. در این صورت شما به مرز دانش رسیده اید و نباید نگران از ارائه راه حل های تقریبی باشید.
در قسمت بعدی به ارائه چند راه حل برای موازی سازی الگوریتم ها در متلب می پردازیم.
#Parallelization
@MatlabTips
977
عبور غبار و گرد خاک از ایران (تصویر از بالای خلیج فارس توسط ایستگاه فضایی بین المللی گرفته شده است)
977
حالا مهمترین پرسش این است که میان این همه تابع و حتی درجات مختلف برای توابع چگونه باید دست به انتخاب زد. این مطلبی است که به زودی به صورت مفصل در مورد آن بحث می کنیم.
#Curve_fitting #Regression #Guess
@MatlabTips
977
یافتن ضرایب 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)')
و نتیجه به صورت زیر است.