در زبان C++ برنامه‌ای بنویسید که انتگرال تابع sin(x) را در بازه [a,b] با روش ذوزنقه (trapezoidal rule) و با n گام محاسبه کرده، مقدار تقریبی، خطای مطلق نسبت به مقدار تحلیلی و زمان اجرای محاسبه را نمایش دهد

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

0.0

برای حل، از فرمول ذوزنقه با قدم h=(b-a)/n استفاده کنید: sum = (f(a)+f(b))/2 + Σ f(a+i*h) برای i=1..n-1 سپس مقدار نهایی = h*sum. مقدار تحلیلی انتگرال sin(x) برابر cos(a)-cos(b) است. در C++ از ، برای sin/cos، برای اندازه‌گیری زمان و برای فرمت خروجی استفاده کنید؛ از نوع double برای دقت بهتر بهره ببرید و برای افزایش دقت n را بزرگ‌تر کنید یا زمان اجرا را با گام‌های مختلف مقایسه کنید.

توسط پژوهشگر در 202 روز قبل ساعت 02:26
دسته بندی ها: C Plus Plus C Plus Plus for beginner
arman در 202 روز قبل ساعت 09:40

برای اندازه‌گیری زمان اجرای کد، از std::chrono استفاده کنید و مقدار تفاوت دو زمان را محاسبه کنید تا زمان اجرای دقیق بدست آید. برای کاهش خطای جمع در ذوزنقه، می‌توانید از الگوریتم کاهان (Kahan summation) در جمع عناصر استفاده کنید یا دست‌کم با ترتیب از f(a) تا f(b) جمع کنید. مقدار تحلیلی انتگرال sin(x) برابر cos(a)-cos(b) است و برای محاسبه خطا از fabs(analytic - numeric) بهره ببرید و خروجی را با double نمایش دهید. با افزایش n، زمان اجرا خطی افزایش می‌یابد، بنابراین مقایسه زمان با n‌های مختلف توصیه می‌شود و ترجیحاً با کامپایلر -O2 بررسی کنید.

گزارش

1 پاسخ

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

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