با استفاده از C++ و تابع std::accumulate از هدر <numeric>، برنامه‌ای بنویسید که انتگرال تقریبی یک تابع پیوسته f(x) را در بازه [a,b] با قاعده ذوزنقه‌ای و با n بخش محاسبه کند.

6.0 بازدید آخرین ویرایش در 202 روز قبل ساعت 03:06

0.0

ابتدا بازه را به n بخش مساوی تقسیم کرده، مقادیر f(x_i) را در یک std::vector ذخیره کنید و با استفاده از std::accumulate مجموع مقادیر داخلی را به‌دست آورید (نکته: نقاط انتهایی وزن ۰.۵ دارند). برای پیاده‌سازی از هدرهای <numeric> و <vector> و یک lambda برای تابع f استفاده کنید، نوع double را به‌کار ببرید و برای عملکرد بهتر بردار را از قبل reserve کنید و برنامه را با -O2/-O3 کامپایل کنید.

توسط پژوهشگر در 202 روز قبل ساعت 03:06
دسته بندی ها: C Plus Plus C Plus Plus for beginner
nima در 202 روز قبل ساعت 07:29

برای محاسبه تقریبی انتگرال با قاعده ذوزنقه‌ای با n بخش، h = (b-a)/n است و نقاط x_i = a + i*h برای i=0..n را به دست می‌آورید. مقادیر f(x_i) را در یک std::vector<double> ذخیره کنید؛ با توجه به اینکه وزن نقاط انتهایی 0.5 است، می‌توانید از std::accumulate با یک lambda استفاده کنید که وزن هر x_i را برابر 0.5 برای i=0 یا i=n، و 1 برای سایر i ضرب کند. سپس نتیجه را با ضرب در h به دست می‌آورید. برای کارایی، اندازه بردار را با reserve(n+1) تخصیص دهید، از double استفاده کنید و کد را با -O2 یا -O3 کامپایل کنید.

گزارش

1 پاسخ

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

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