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

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

0.0

ورودی‌ها a، b و n (تعداد بخش‌ها) را بخوانید؛ گام h = (b-a)/n را محاسبه کنید، سپس با فرمول ذوزنقه: sum = 0.5*(sin(a)+sin(b)) + Σ_{i=1}^{n-1} sin(a + i*h) مقدار انتگرال ≈ h*sum را به‌دست آورید. از نوع double برای دقت بالاتر و تابع std::sin در هدر <cmath> استفاده کنید و برای دقت بهتر مقدار n را افزایش دهید. برای کاربردهای HPC می‌توانید حلقه جمع‌زنی را با OpenMP موازی‌سازی کنید یا با -O2 برنامه را کامپایل کنید تا اجرا سریع‌تر شود.

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

نکته‌ای کوتاه این است که از double و تابع std::sin از <cmath> استفاده کنید و h = (b-a)/n را برای محاسبه انتگرال به‌کار ببرید؛ فرمول ترازوها: sum = 0.5*(sin(a)+sin(b)) + Σ_{i=1}^{n-1} sin(a+i*h) و نتیجه ≈ h*sum است. برای دقت بیشتر می‌توانید از long double یا تکنیک‌های جمع‌سازی پایدار استفاده کنید و ورودی‌ها را اعتبارسنجی کنید (n>0 و a≤b). در کاربردهای HPC می‌توانید حلقه را با OpenMP موازی کنید یا با -O2 کامپایل کنید تا سرعت اجرا بهبود یابد.

گزارش

1 پاسخ

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

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