یک برنامه 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 کامپایل کنید و به ترتیب حلقه‌ها و کاهش کپی‌ها توجه کنید.

توسط پژوهشگر در 221 روز قبل ساعت 01:40
دسته بندی ها: C Plus Plus C Plus Plus for beginner
arash در 221 روز قبل ساعت 12:23

برای کارایی بهتر از یک تابع inline یا لامبدا برای f(x)=sin(x) استفاده کنید تا فراخوانی‌های تکراری کاهش یابد و مقادیر گره‌ها را با std::vector و reserve نگه دارید. عدد n باید زوج باشد و h=(b-a)/n تنها یک‌بار محاسبه شود تا بار محاسباتی کاهش یابد. زمان اجرا را با std::chrono و steady_clock اندازه‌گیری کنید و نتایج را با دقت مناسب گزارش دهید. با افزایش n رفتار همگرایی را بررسی کنید و با کامپایل -O2 به کمینه‌سازی استفاده از حافظه و هزینه محاسباتی دست یابید.

گزارش

1 پاسخ

جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من

در حال بارگیری...
ورود به حساب کاربری