MatlabTips
892 subscribers
463 photos
73 videos
54 files
304 links
آموزش MATLAB با "استفاده از ویدئو و متن" در سطوح مبتدی تا پیشرفته
پاسخ به سوالات تخصصی:
@roholazandie
Download Telegram
Channel created
Easter egg
noun
1.
an artificial chocolate egg or decorated hard-boiled egg given at Easter.
2.
an unexpected or undocumented feature in a piece of computer software or on a DVD, included as a joke or a bonus.
تخم مرغ عید (easter egg) یک اصطلاح در نرم افزار است که به یک پیام مخفی یا یک حالت طنزگونه اطلاق می شود که طراح تعمدی آن را در برنامه لحاظ کرده است. MatlabTips@
@MatlabTips
image
این easter egg تصویر یک پسر بچه را نمایش می‌دهد.
Forwarded from Deleted Account
@MatlabTips
spy
این دستور در بعضی از نسخه ها تصویر یک جاسوس کلاسیک یا سگ کارآگاه را نشان می دهد.
@MatlabTips
fifteen
با وارد کردن این دستور در پنجره matlab یک بازی کامپیوتری ظاهر می شود که هدف آن مرتب کردن اعداد 1 تا 15 می باشد.
@MatlabTips
خطای گرد کردن(Rounding error)
در MATLAB نیز مانند تمام زبان های برنامه نویسی دیگر، اعداد بسته به نوع (double, int16 ,…) بصورت دنباله‌ ای از 0 و 1 نمایش داده می شود. هر نوع ذاتا برای یک دقت خاص استفاده می شود. به همین خاطر، عملیات ریاضی بر روی این اعداد ممکن است منجر به نتایجی شود که به دور از انتظار ما باشد. در این پست این رفتارها را شناسایی خواهیم کرد تا از مشکلات بالقوه آنها دوری کنیم:
@MatlabTips
مثال:
x = 1; %initial value
cnt = 0; %counter
while x ~= 2
x = x + 0.1;
cnt = cnt + 1; %count up
end

انتظار داریم بعد از پایان برنامه مقدار cnt برابر 10 شود، اما این برنامه تا ابد ادامه می‌یابد. عدد 0.1 با یک دقت مشخصی گرد می‌شود و از آنجایی که این عدد هنگامی که به زبان ماشین تبدیل می‌شود دقیقا برابر 0.1 نیست بنابراین هیچ وقت شرط حلقه برقرار نمی شود.
برای اجتناب از چنین حالت‌هایی باید معیار شرط را مناسب انتخاب کرد. مثلا در مثال بالا " while x <2 " می‌تواند مناسب تر باشد.
در مثال بالا به جای "0.1" از "0.25" استفاده کنید. دقت کنید که عدد "0.25" بطور دقیق با دقت ماشین های امروزی قابل نمایش است.
@MatlabTips
#SpeedUp
@MatlabTips
برای تسریع در عملکرد کدهایتان، نکات زیر را لحاظ کنید:
1⃣محیط

هنگام اجرای برنامه در MATLAB دقت داشته باشید که همزمان برنامه دیگری در حال اجرا نباشد که از منابع پردازشی زیادی استفاده کند.
2⃣ساختار کد

به جای اسکریپت از تابع استفاده کنید. به طور کلی توابع سریع‌تر هستند.
✔️از توابع تو در تو استفاده نکنید و به جای آن از توابع محلی استفاده کنید.(مخصوصا زمانی که توابع نیازی به دسترسی به متغیرهای درون تابع اصلی ندارند).
✔️از برنامه‌نویسی ماژولار استفاده کنید. کد خود را به فایل‌های ریزتر تقسیم کنید.
@MatlabTips
3⃣تمرین‌های برنامه‌نویسی برای بهبود عملکرد
از تکنیک‌های زیر برای بهبود عملکرد کد خود استفاده کنید:
✔️پیش‌تخصیص(preallocate):
به جای اینکه دائما اندازه آرایه‌ها تغییر کند، یک مقدار ثابت برای اندازه آرایه مورد نظر در نظر گرفته که مدام در حافظه عملیات تخصیص صورت نگیرد.
✔️بردارسازی:
به جای استفاده از حلقه‌ها سعی کنید تا جایی که ممکن است از عملیات برداری و ماتریسی استفاده کنید.
✔️عملیات مستقل را بیرون از حلقه قرار دهید:
در صورتی که با تکرارهای حلقه بخشی از کد دچار تغییر نمی‌شود، آن قسمت را از حلقه بیرون بیاورید.
✔️از متغیرهای global استفاده نکیند:
حداقل کردن استفاده از این متغیرها توصیه می‌شود. متغیرهای global عملکرد کد MATLAB را کاهش می‌دهد.
@MatlabTips
Channel photo updated
%% we want to show how "preallocation" speed up the code!!
%dynamic array growth:
tic
fibonacci = [0,1];
for idx = 3 : 40000
fibonacci(idx) = fibonacci(idx-1) + fibonacci(idx-2); %dynamically changes size
end
toc
%@MatlabTips
% use preallocation – 9x faster in my machine(dual_core)
tic
fibonacci = zeros(40000,1); %preallocation
fibonacci(1)=0; fibonacci(2)=1;
for idx = 3 : 40000,
fibonacci(idx) = fibonacci(idx-1) + fibonacci(idx-2);
end
toc
هدف از کد بالا نشان دادن تاثیر پیش‌تخصیص (preallocation) در افزایش سرعت کد است. کد اول 40000 جمله اول از دنباله فیبوناچی را تولید می‌کند، در صورتی که بردار Fibonacci بصورت دینامیکی در حال رشد است. با تغییر اندازه این بردار پردازنده مدام به حافظه (ram) سر می‌زند و یک بلوک متناسب با آن را تخصیص می‌دهد. این سر زدن متوالی به حافظه باعث کند شدن برنامه می‌شود. در حالی که در برنامه دوم با پیش‌تخصیص توانسته‌ایم سرعت برنامه را 9 برابر (این عدد از یک سیستم به سیستم دیگر ممکن است تغییر کند) سریع‌تر کنیم.
@MatlabTips