یک برنامهٔ C++ بنویسید که با استفاده از تابع std::abs (از ) روش نیوتن را برای محاسبهٔ جذر 2 پیادهسازی کند بهطوری که تکرار را تا زمانی ادامه دهد که قدر مطلق اختلاف بین تکرارهای متوالی کمتر از ε (مثلاً 1e-6) شود و در پایان مقدار تقریب ریشه و تعداد تکرار را چاپ نماید.
13.0 بازدید آخرین ویرایش در 198 روز قبل ساعت 02:11 0.0
برای حل، یک مقدار اولیه (مثلاً x0 = 1.0) انتخاب کنید و تکرار نیوتن x_{n+1} = (x_n + 2.0 / x_n) / 2 را اجرا کنید؛ بعد از هر تکرار با std::abs(x_new - x_old) و یک آستانه ε بررسی کنید که همگرا شدهاید یا نه. حتما را برای std::abs و را برای ورودی/خروجی اضافه کنید، یک شمارندهٔ بیشینهٔ تکرار تعیین نمایید تا از حلقهٔ نامتناهی جلوگیری شود و برای بهینهسازی (HPC) از انتخاب نوع double، کمترین چاپها و گزینههای کامپایلری مانند -O2/-O3 استفاده کنید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
برای std::abs حتما <cmath> و برای ورودی/خروجی <iostream> را وارد کنید و از نوع double و constexpr برای ε (مثلاً 1e-6) و شمارندهٔ حداکثر تکرار (مثلاً 1000) استفاده کنید تا از حلقهٔ نامتناهی جلوگیری شود. بهتر است علاوه بر آستانهٔ مطلق، یک آستانهٔ نسبی نیز در نظر بگیرید (مثلاً std::abs(dx) < eps * std::abs(x_new)) تا همگرایی در مقادیر بزرگتر و کوچکتر عددی مطمئنتر شود. از چاپ داخل حلقه پرهیز کنید تا عملکرد بهتری در محاسبات حجیم داشته باشید و برای سرعت کامپایل از -O2 یا -O3 استفاده کنید (توجه داشته باشید -ffast-math ممکن است دقت را تغییر دهد). همچنین مراقب تقسیم بر صفر باشید (اگر x_n به صفر نزدیک شد) و در صورت مشاهدهی NaN یا inf حلقه را قطع کنید.
گزارش