یک برنامه‌ی ساده به زبان C++ بنویسید که مقدار انتگرال تقریبی تابع f(x)=sin(x^2) را روی بازه [0,1] با استفاده از روش مونت‌کارلو و تولید اعداد شبه‌تصادفی از هدر <random> محاسبه کند.

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

0.0

برای حل، از std::mt19937 و std::uniform_real_distribution برای تولید N نمونه تصادفی در [0,1] استفاده کنید، مقدار f(x) را برای هر نمونه حساب کرده و میانگین مقادیر را در طول بازه ضرب کنید تا تقریب انتگرال به‌دست آید. نکات: از نوع double برای دقت بهتر استفاده کنید، با std::random_device یک دانه تصادفی مقداردهی اولیه کنید، با افزایش N دقت بهبود می‌یابد (تقریباً خطا ~1/sqrt(N)) و در صورت تمایل برای بهبود کارایی می‌توانید به‌صورت ساده از موازی‌سازی (مثلاً OpenMP یا thread) استفاده کنید.

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

برای این کار از std::mt19937 با بذر گرفته‌شده از std::random_device و یک توزیع یکنواخت real در [0,1] استفاده کنید تا N نمونه تصادفی بسازید. مقدار f(x) = sin(x^2) را برای هر نمونه محاسبه کنید و میانگین این مقادیر را بگیرید؛ از آنجا مقدار انتگرال روی [0,1] تقریباً برابر با میانگین ضرب در طول بازه است (در این بازه طول بازه برابر با 1 است). هر چه N بزرگ‌تر باشد، خطای تقریبی ~1/√N کاهش می‌یابد و برای دقت بهتر از double استفاده کنید. برای بهبود کارایی می‌توانید از موازی‌سازی ساده مانند OpenMP یا threading بهره ببرید تا محاسبات نمونه‌ها به‌صورت هم‌زمان انجام شود.

گزارش

1 پاسخ

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

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