انجمن سایت کلیدستان



بهینه کردن سرعت اجرای کدهای متلبزمان کنونی: ۱۳۹۵/۰۹/۱۵، ۰۸:۵۳ ق.ظ
کاربران در حال بازدید این موضوع: 1 مهمان
نویسنده: admin
آخرین ارسال: s.saeid
پاسخ 4
بازدید 3487

رتبه موضوع:
  • 1 رای - 2 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
بهینه کردن سرعت اجرای کدهای متلب

بهینه کردن سرعت اجرای کدهای متلب

#1
تعدادی از پروژه های سنگین که توسط نرم افزار متلب نوشته می شوند ، غیر قابل اجرا می باشند زیرا زمان اجرای آنها بسیار طولانی می باشد به صورتی که ممکن است اجرای آنها حتی با یک کامپیوتر شخصی با قطعات به روز و خوب هم امکان پذیر نباشد .

در اینگونه موارد شخص به دنبال یافتن یک کامپیوتر مخصوص پردازش های سنگین که گران قیمت است و معمولا در دانشگاه ها یافت می شود ، می رود . که البته این کامپیوتر را دانشگاه در اختیار هر کسی قرار نخواهد داد .

اما نکته مهمی وجود دارد و آن این است که گاهی می توان با بهینه کردن کدهای برنامه متلب نوشته شده ، زمان اجرای آن را تا حد زیادی کاهش داد . در اینجا سعی می کنیم برخی از نکات مهم برای بهینه سازی کدهای متلب از نظر زمان اجرای آنها را بیان کنیم .

یکی از مهم ترین نکات ، عدم استفاده از حلقه های for می باشد . تا جایی که می توانید از حلقه های for در برنامه متلب خود استفاده نکنید . احتمالا ممکن است فکر کنید آن بخشی از برنامه متلب شما که دارای حلقه for است بدون این حلقه و به روش دیگری قابل نوشتن نخواهد بود اما باید بدانید که نرم افزار متلب دارای دستورات بسیاری است و مطمئنا اگر با حوصله در میان دستورات مختلف آن و نحوه استفاده از آنها جستجو کنید ، احتمال اینکه جایگزینی برای حلقه های for برنامه خود بیابید زیاد است .

لطفا روش هایی را که برای سریع تر کردن اجرای کدهای متلب یاد گرفته اید را در اینجا ذکر کنید تا مورد استفاده دیگران نیز قرار گیرد .
bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ
 سپاس شده توسط s.saeid

بهینه کردن سرعت اجرای کدهای متلب

#2
فرض کنید قرار است در حین اجرای برنامه ، مارتیسی به نام A با اندازه نهایی 1000 در 1000 ساخته بشه . به این صورت که به مرور و در حین اجرای برنامه ، مقادیر آن به مرور ساخته خواهد شد . یعنی مثلا ممکنه ابتدا 100 عضو داشته باشه ، بعد بشه 200 عضو ، بعد بشه 300 عضو و همین طور در برنامه ، اندازه آن افزایش یابد تا به اندازه نهایی 1000 در 1000 برسد .
نکته مهم در اینجا این است که نرم افزار متلب باید به طور متوالی اندازه ماتریس را تغییر دهد و نوشتن و پاک کردن ها و پردازش های اضافه زیادی رو باید انجام بده که باعث اتلاف زمان میشه .
راه حل این است که چون از ابتدا می دانیم اندازه نهایی ماتریس A به صورت 1000 در 1000 خواهد بود ، بنابراین در همان ابتدای برنامه ، با دستور zeros ، ماتریس A را به صورت یک ماتریس با ابعاد 1000 در 1000 که تمامی عناصر ان صفر هستند تعریف کنیم تا سپس در هنگام اجرای برنامه ، تنها مقادیر آن مشخص شود . کد به صورت زیر خواهد بود :

کد:
A=zeros(1000,1000);

این کار در عدم اتلاف وقت ، بسیار مفید خواهد بود .
bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ
 سپاس شده توسط s.saeid

بهینه کردن سرعت اجرای کدهای متلب

#3
در کامپیوترهایی که دارای cpu چند هسته ای هستند، می توان از پردازش موازی برای سریعتر اجرا شدن کدهای برنامه استفاده نمود. برای این منظور، کلید زیر را بخوانید :

http://www.kelidestan.com/keys/keys.php?key=156


 
bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ

بهینه کردن سرعت اجرای کدهای متلب

#4
از ادمین تشکر میکنم که همچین موضوع جالب و کاربردی رو نوشتن
در دانشگاه بنده استاد چند نمونه گفته که جالبه اینجا بگم
دو برنامه زیر، فقط در مورد تخصیص اولیه (خط سوم از برنامه دوم)، با هم اختلاف دارند. اما جالب است بدانید که مدت اجرای برنامه اول، در 5 دقیقه است. در حالی برنامه دوم، در کمتر از چند ثانیه اجرا می شود. حال فرض کنید که در یک برنامه بزرگ.......

کد پی‌اچ‌پی:
clear;
n=300000;
x(1)=0;
x(2)=1;
for 
k=3:n
x
(k)=x(k-1)+x(k-2);
end 
 

کد پی‌اچ‌پی:
clear;
n=300000;
x=zeros(1,n);     % Pre-Allocation
x
(1)=0;
x(2)=1;
for 
k=3:n
x
(k)=x(k-1)+x(k-2);
end 
پاسخ
 سپاس شده توسط admin


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان

آخرین کلیدهای غیررایگان

شما هم می توانید کلیدهای غیررایگان منتشر کنید (بیشتر بدانید)