برنامه‌ای به زبان C++ بنویسید که با استفاده از روش مونت‌کارلو و تابع std::srand از مقدار تقریبی انتگرال ∫₀^π sin(x) dx را با N نمونه تصادفی (N از ورودی) محاسبه و چاپ کند.

1.0 بازدید آخرین ویرایش در 221 روز قبل ساعت 01:06

0.0

روش: ابتدا با std::srand یک بذر تصادفی (مثلاً با std::time(nullptr)) تنظیم کنید، سپس N مقدار تصادفی یکنواخت در بازه [0, π] با استفاده از std::rand و تقسیم بر RAND_MAX بسازید، مقادیر sin(x) را جمع کنید و میانگین را در طول بازه (π−0) ضرب کنید تا مقدار تقریبى انتگرال به‌دست آید. از هدرهای برای std::srand/std::rand و برای sin و برای زمان استفاده کنید. نکته‌ها: فقط یک‌بار بذر را تنظیم کنید (نه درون حلقه)، مقادیر با نوع double جمع شوند و هرچه N بزرگ‌تر باشد دقت بیشتر می‌شود؛ برای نگهداری عدد تصادفی از (double)std::rand()/RAND_MAX استفاده کنید.

توسط پژوهشگر در 221 روز قبل ساعت 01:06
دسته بندی ها: C Plus Plus C Plus Plus for beginner
arman در 221 روز قبل ساعت 14:39

نکتهٔ کوتاه: برای مونت‌کارلو با std::srand و std::rand، یک‌بار seed را با std::time(nullptr) تنظیم کرده و خارج از حلقه انجام دهید. مقادیر تصادفی باید به صورت (double)std::rand()/RAND_MAX ساخته شوند و جمع مقادیر sin(x) نیز با نوع double انجام شود. نتیجهٔ تقریبی که از میانگین این مقادیر ضرب در طول بازه π می‌گیرد به مقدار دقیق ∫₀^π sin(x) dx یعنی 2 نزدیک می‌شود و با افزایش N دقت بهبود می‌یابد. اگر می‌خواهید پایداری و کیفیت random بهتر باشد، در پروژه‌های پیشرفته از std::mt19937 و توزیع یکنواخت استفاده کنید (در صورت امکان).

گزارش

1 پاسخ

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

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