یک برنامهٔ C++ بنویسید که انتگرال عددی تابع f(x)=sin(x) را روی بازهٔ [a,b] با روش ذوزنقه و با تقسیم‌بندی n قسمت محاسبه کند و مقدار تقریبی را چاپ کند.

1.0 بازدید آخرین ویرایش در 221 روز قبل ساعت 01:31

0.0

برای حل، از فرمول ذوزنقه استفاده کنید: h=(b-a)/n و مجموع را به‌صورت (h*(f(a)/2 + f(b)/2 + Σ f(a+i*h))) حساب کنید. در C++ از برای sin و از نوع double برای دقت استفاده کنید و پارامترهای a، b و n را از ورودی بگیرید. نکات: برای اندازه‌گیری زمان اجرا می‌توانید از استفاده کنید و برای بهبود کارایی در محیط‌های HPC می‌توان حلقهٔ جمع را با OpenMP (#pragma omp parallel for reduction(+ : sum)) موازی‌سازی کرد؛ همچنین از محاسبهٔ مکرر h و اندیس‌ها درون حلقه خودداری کنید تا سرعت افزایش یابد.

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

برای بهبود دقت و کارایی، مقدار h و مقدار f(a) و f(b) را قبل از حلقه محاسبه کنید تا از محاسبه مکرر جلوگیری شود. همچنین اگر به سرعت اجرای بالاتر در محیط‌های HPC نیاز دارید، می‌توانید با درج #pragma omp parallel for reduction(+:sum) حلقه جمع را موازی کنید و بررسی صحت فرمان‌ها را با کاهش داده‌های به اشتراک گذاشته انجام دهید. مطمئن شوید ورودی‌ها a، b، n معتبر هستند (n>0) و از double برای همه مقادیر استفاده کنید تا سازگاری نوع داده حفظ شود. در نهایت خروجی مقدار تقریبی انتگرال است و می‌تواند همراه با ریز زمان اجرا چاپ شود.

گزارش

1 پاسخ

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

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