یک برنامه C++ بنویسید که انتگرال معین تابع f(x)=sin(x) از a تا b را با روش سیمپسون (Simpson's rule) محاسبه کند و برای چند مقدار مختلف n (تعداد بخشهای زوج) مقدار انتگرال و زمان اجرا را گزارش دهد.
1.0 بازدید آخرین ویرایش در 221 روز قبل ساعت 01:40 0.0
برای حل، از پیادهسازی روش سیمپسون استفاده کنید: تقسیم بازه به n بخش زوج، محاسبه مقادیر تابع در گرهها و جمعکردن با ضرایب مناسب؛ از نوع متغیر double برای دقت استفاده کنید و h=(b-a)/n را یکبار محاسبه کنید. برای اندازهگیری زمان از std::chrono استفاده کنید و برای افزایش کارایی از std::vector برای نگهداری مقادیر، محاسبهٔ مقدار تابع با تابع inline یا لامبدا و کاهش فراخوانیهای زائد در حلقهها بهره بگیرید؛ برای مشاهده رفتار همگرایی و هزینهٔ محاسباتی، n را افزایش دهید و با -O2 کامپایل کنید و به ترتیب حلقهها و کاهش کپیها توجه کنید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
برای کارایی بهتر از یک تابع inline یا لامبدا برای f(x)=sin(x) استفاده کنید تا فراخوانیهای تکراری کاهش یابد و مقادیر گرهها را با std::vector و reserve نگه دارید. عدد n باید زوج باشد و h=(b-a)/n تنها یکبار محاسبه شود تا بار محاسباتی کاهش یابد. زمان اجرا را با std::chrono و steady_clock اندازهگیری کنید و نتایج را با دقت مناسب گزارش دهید. با افزایش n رفتار همگرایی را بررسی کنید و با کامپایل -O2 به کمینهسازی استفاده از حافظه و هزینه محاسباتی دست یابید.
گزارش