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.
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
fifteen
با وارد کردن این دستور در پنجره matlab یک بازی کامپیوتری ظاهر می شود که هدف آن مرتب کردن اعداد 1 تا 15 می باشد.
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
خطای گرد کردن(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
@MatlabTips
برای تسریع در عملکرد کدهایتان، نکات زیر را لحاظ کنید:
1⃣محیط
هنگام اجرای برنامه در MATLAB دقت داشته باشید که همزمان برنامه دیگری در حال اجرا نباشد که از منابع پردازشی زیادی استفاده کند.
2⃣ساختار کد
به جای اسکریپت از تابع استفاده کنید. به طور کلی توابع سریعتر هستند.
✔️از توابع تو در تو استفاده نکنید و به جای آن از توابع محلی استفاده کنید.(مخصوصا زمانی که توابع نیازی به دسترسی به متغیرهای درون تابع اصلی ندارند).
✔️از برنامهنویسی ماژولار استفاده کنید. کد خود را به فایلهای ریزتر تقسیم کنید.
@MatlabTips
3⃣تمرینهای برنامهنویسی برای بهبود عملکرد
از تکنیکهای زیر برای بهبود عملکرد کد خود استفاده کنید:
✔️پیشتخصیص(preallocate):
به جای اینکه دائما اندازه آرایهها تغییر کند، یک مقدار ثابت برای اندازه آرایه مورد نظر در نظر گرفته که مدام در حافظه عملیات تخصیص صورت نگیرد.
✔️بردارسازی:
به جای استفاده از حلقهها سعی کنید تا جایی که ممکن است از عملیات برداری و ماتریسی استفاده کنید.
✔️عملیات مستقل را بیرون از حلقه قرار دهید:
در صورتی که با تکرارهای حلقه بخشی از کد دچار تغییر نمیشود، آن قسمت را از حلقه بیرون بیاورید.
✔️از متغیرهای global استفاده نکیند:
حداقل کردن استفاده از این متغیرها توصیه میشود. متغیرهای global عملکرد کد MATLAB را کاهش میدهد.
@MatlabTips
%% 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
@MatlabTips
#SpeedUp
پیش نیاز: آشنایی مقدماتی با کدنویسی در MATLAB
@MatlabTips
بردارها و ماتریسها قلب هر برنامه MATLAB را تشکیل میدهند. هنگامی که عملیات MATLAB بصورت برداری و ماتریسی انجام شود، عملکرد آن به شدت بهینه میشود. "برداریسازی" هنر تبدیل محاسبات بصورت عنصر به عنصر (همانگونه که در حلقهها میبینیم) به عملیاتی برداری است.
با یک مثال ساده شروع میکنیم:
1⃣فرض کنید دو ماتریس A و B و هم اندازه داریم. دو روش برای ضرب آنها وجود دارد: ✔️عنصر به عنصر
✔️یا بصورت برداری عناصر آن را با عملگر ضرب آرایهای در هم ضرب کنیم.
@MatlabTips
یک مثال دیگر:
2⃣فرض کنید میخواهیم تمام حجمهای ممکن برای استوانههایی با شعاع R و ارتفاع H رامحاسبه کنیم.
✔️روش عنصر به عنصر:
✔️روش برداری:
@MatlabTips
پیش نیاز: آشنایی مقدماتی با کدنویسی در MATLAB
@MatlabTips
بردارها و ماتریسها قلب هر برنامه MATLAB را تشکیل میدهند. هنگامی که عملیات MATLAB بصورت برداری و ماتریسی انجام شود، عملکرد آن به شدت بهینه میشود. "برداریسازی" هنر تبدیل محاسبات بصورت عنصر به عنصر (همانگونه که در حلقهها میبینیم) به عملیاتی برداری است.
با یک مثال ساده شروع میکنیم:
1⃣فرض کنید دو ماتریس A و B و هم اندازه داریم. دو روش برای ضرب آنها وجود دارد: ✔️عنصر به عنصر
A=rand(100,1);
B=rand(100,1);
for i=1:100
C(i)=A(i)*B(i);
end
✔️یا بصورت برداری عناصر آن را با عملگر ضرب آرایهای در هم ضرب کنیم.
A=rand(100,1);
B=rand(100,1);
C=A.*B;
@MatlabTips
یک مثال دیگر:
2⃣فرض کنید میخواهیم تمام حجمهای ممکن برای استوانههایی با شعاع R و ارتفاع H رامحاسبه کنیم.
✔️روش عنصر به عنصر:
R = 1:10000; %radious
H = 1:400; %Height
V = zeros(10000,4000); %preallocate V(volume) to speed up
for i = 1:numel(H)
for j = 1:numel(R)
V(j,i) = pi * R(j).^2 * H(i);
end
end
✔️روش برداری:
R = 1:10000;
H = 1:400;
[matR, matH] = meshgrid(R,H);
V = pi.*matR.^2.*matH;
@MatlabTips