با زبان C++ تابعی بنویسید که با استفاده از std::accumulate و قاعده ذوزنقه انتگرال عددی یک تابع را روی بازه [a, b] با مقادیر نمونه‌شده در یک std::vector محاسبه کند.

5.0 بازدید آخرین ویرایش در 202 روز قبل ساعت 02:48

0.0

روش حل: با فرض داشتن برداری از مقادیر f(x) که هم‌ردیف نقاط روی بازه [a,b] نمونه‌برداری شده‌اند، گام h را برابر (b-a)/(n-1) محاسبه کنید و مجموع مقادیر داخلی را با std::accumulate روی بازه iterators از begin()+1 تا end()-1 بگیرید؛ سپس مقدار انتگرال برابر h * ( (f0 + fn)/2 + sum_interior ) خواهد بود. در C++ هدر مورد نیاز و است و از double برای دقت استفاده کنید؛ برای کارهای بزرگِ محاسباتی می‌توانید بعدها به جای std::accumulate از std::reduce با execution::par یا تکنیک‌های OpenMP برای اجرای موازی فکر کنید تا عملکرد بهتری در محیط‌های HPC داشته باشید.

توسط پژوهشگر در 202 روز قبل ساعت 02:48
دسته بندی ها: C Plus Plus C Plus Plus for beginner
nima در 202 روز قبل ساعت 08:23

نکته مهم: قبل از استفاده از std::accumulate، مطمئن شوید vector شامل حداقل دو مقدار است تا f0 و fn معتبر باشند. از begin()+1 تا end()-1 برای جمع مقادیر داخلی استفاده کنید و در نهایت مقدار را با h*((f0+fn)/2 + sum_interior) بدست آورید. برای دقت، از double استفاده کنید و مطمئن شوید هدر <numeric> به کار رفته است. در عملیات‌های سنگین می‌توانید به جای std::accumulate از std::reduce با std::execution::par استفاده کنید یا از OpenMP برای اجرای موازی بهره ببرید.

گزارش

1 پاسخ

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

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