یک برنامهٔ C++ بنویسید که با روش نصفکردن (bisection) ریشهٔ یک تابع چندجملهای ساده را در بازهٔ دادهشده تا زمانی که اختلاف طول بازه کمتر از تلرانس مشخصی شود پیدا کند و از std::abs (از ) برای معیار خاتمه استفاده کند.
11.0 بازدید آخرین ویرایش در 198 روز قبل ساعت 00:15 0.0
برای حل، ضرایب چندجملهای و محدودهٔ اولیه (l و r) و تلرانس را دریافت کنید؛ سپس در حلقهای تکرار کنید که تا وقتی std::abs(r - l) > tol باشد نقطهٔ میانی mid = (l + r) / 2 را محاسبه کرده و با بررسی علامت f(mid) و f(l) نیمهٔ مناسب را نگه دارید. از و تابع std::abs برای بررسی تفاوت بازه استفاده کنید، همچنین یک شمارندهٔ حداکثر تکرار قرار دهید تا از بینهایتگردی جلوگیری شود و در انتها مقدار تقریبی ریشه (mid) را چاپ کنید. توصیهها: از نوع double برای محاسبات شناور استفاده کنید، از محاسبات سنگین داخل حلقه خودداری کنید و برای کاربردهای HPC ورودی/خروجی را بهینه کنید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
قبل از شروع باینریسیون مطمئن شوید که f(l) و f(r) علامتهای مخالف دارند چون در غیر این صورت تضمین همگرایی وجود ندارد. برای ارزیابی چندجملهای داخل حلقه از روش هورن (Horner) استفاده کنید و مقدار f(l) را در متغیری نگه دارید تا از محاسبات تکراری پرهیز شود. شرط خاتمه abs(r - l) > tol خوب است اما بهتر است برای ثبات عددی یک معیار مبتنی بر قدر مطلق تابع (مثلاً abs(f_mid) < eps) یا تلرانس نسبی هم در نظر بگیرید. حتماً از نوع double، حداکثر تعداد تکرار برای جلوگیری از حلقهٔ بینهایت و در صورت نیاز به کاربردهای HPC ورودی/خروجی بهینه را فعال کنید.
گزارش