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