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