یک برنامهٔ 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 ورودی/خروجی را بهینه کنید.

توسط پژوهشگر در 198 روز قبل ساعت 00:15
دسته بندی ها: C Plus Plus C Plus Plus for beginner
arman در 198 روز قبل ساعت 00:16

قبل از شروع باینریسیون مطمئن شوید که f(l) و f(r) علامت‌های مخالف دارند چون در غیر این صورت تضمین همگرایی وجود ندارد. برای ارزیابی چندجمله‌ای داخل حلقه از روش هورن (Horner) استفاده کنید و مقدار f(l) را در متغیری نگه دارید تا از محاسبات تکراری پرهیز شود. شرط خاتمه abs(r - l) > tol خوب است اما بهتر است برای ثبات عددی یک معیار مبتنی بر قدر مطلق تابع (مثلاً abs(f_mid) < eps) یا تلرانس نسبی هم در نظر بگیرید. حتماً از نوع double، حداکثر تعداد تکرار برای جلوگیری از حلقهٔ بی‌نهایت و در صورت نیاز به کاربردهای HPC ورودی/خروجی بهینه را فعال کنید.

گزارش

1 پاسخ

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

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