با استفاده از زبان 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 برای بردار) و دقت عددی مهم است.

توسط پژوهشگر در 220 روز قبل ساعت 02:07
دسته بندی ها: C Plus Plus C Plus Plus for beginner
sara در 220 روز قبل ساعت 10:53

نکتهٔ کلیدی این است که با std::accumulate برای جمع داخلی‌ها، دقت را می‌توان با استفاده از long double بهبود بخشید. همچنین با reserve کردن بردار و محاسبهٔ یک‌بار f(a) و f(b) از دوباره‌کاری جلوگیری کنید. اگر f گران است، می‌توانید از std::transform_reduce یا جمع‌سازی بازگشتی برای کاهش حافظه استفاده کنید. و فراموش نکنید که h = (b-a)/n است و انتهای بازه با (f(a)+f(b))/2 محاسبه می‌شود.

گزارش

1 پاسخ

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

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