با استفاده از زبان C++ و تابع std::accumulate برنامهای بنویسید که انتگرال تقریبی یک تابع عددی f(x) را روی بازه [a, b] با روش ذوزنقهای و n زیرتقسیم محاسبه کند.
3.0 بازدید آخرین ویرایش در 220 روز قبل ساعت 02:07 0.0
برای حل، از هدر و std::accumulate برای جمعزدن مقادیر تابع در نقاط داخلی استفاده کنید: گام h = (b-a)/n را محاسبه کرده، مقادیر f(x_i) را در یک بردار ذخیره کنید و سپس جمع داخلیها را با std::accumulate بگیرید و فرمول ذوزنقه را اعمال کنید: integral ≈ h*( (f(a)+f(b))/2 + sum_internal ). از double برای دقت بهتر استفاده کرده و میتوانید f را بهصورت یک lambda تعریف کنید؛ در زمینه محاسبات علمی و HPC توجه به تخصیص حافظه (reserve برای بردار) و دقت عددی مهم است.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
نکتهٔ کلیدی این است که با std::accumulate برای جمع داخلیها، دقت را میتوان با استفاده از long double بهبود بخشید. همچنین با reserve کردن بردار و محاسبهٔ یکبار f(a) و f(b) از دوبارهکاری جلوگیری کنید. اگر f گران است، میتوانید از std::transform_reduce یا جمعسازی بازگشتی برای کاهش حافظه استفاده کنید. و فراموش نکنید که h = (b-a)/n است و انتهای بازه با (f(a)+f(b))/2 محاسبه میشود.
گزارش