در بسیاری از فرآیندهای محاسباتی امکان روبرو شدن با مسئله پیدا کردن ریشه معادلات محتمل است. این معادلات می توانند در حالت کلی غیرخطی و در ابعاد بزرگ باشند از این رو کاربرد روشهای کارامد برای حل این دسته از مسائل بسیار مهم می باشد. یکی از روشهای شناخته شده که مسئله ریشه یابی را تقریب کریلوف ژاکوبین معکوس انجام می دهد، روش نیوتون-کریلوف است. در این نوشته به نحوه پیدا کردن ریشه دسته معادلات غیرخطی با روش نیوتون-کریلوف پرداخته می شود.
بسم الله الرحمن الرحیم
کتابخانه SciPy بعنوان یکی از مهمترین و نیرومندترین کتابخانه های محاسبات علمی در پایتون، روش نیوتون-کریلوف را بعنوان یکی از روشهای ریشه یابی در خود دارد که از ماژول optimize در قالب یک تابع قابل دسترسی می باشد. ورودی های این تابع در ساده ترین حالت تابعی که می خواهیم ریشه آن را بدست بیاوریم و حدس اولیه می باشد. به مثال زیر که برای پیدا کردن نقطه تلاقی دو دایره یکی با شعاع ۴ و مرکز (۵،۵) و دیگری با شعاع ۳ و مرکز (۳،۰) مورد استفاده قرار گرفته است:
from scipy.optimize import newton_krylov from numpy import array def crossing_circles(x): eq1 = (x[0] - 5) ** 2 + (x[1] - 5) ** 2 - 16 eq2 = (x[0] - 3) ** 2 + (x[1] - 0) ** 2 - 9 return array([eq1, eq2]) sol = newton_krylov(crossing_circles, [0, 0]) print(sol)
پارامترهای دیگر که با مقداردهی آنها می توان عملکرد تابع newton_krylov را تنظیم نمود بشرح زیر می باشند:
- rdiff: اندازه گام متناسب برای استفاده در مشتق گیری عددی
- method: روش که یا یکی از گزینه های {‘lgmres’, ‘gmres’, ‘bicgstab’, ‘cgs’, ‘minres’} و یا یک تابع باید باشد
- inner_M: یکی از LinearOperator یا InverseJacobian باید باشد که در صورت استفاده از هر کدام از آنها باید از قبل آن را از scipy.optimize.nonlin ایمپورت نمود
- iter: تعداد تکرار برای الگوریتم
- maxiter: بیشترین تعداد تکرار زمانی که با تعداد تکرار متعارف همگرایی حاصل نگردد
- f_tol: اندازه مطلق تولرانس مانده
- f_rtol: اندازه نسبی تولرانس مانده
- و …
پارامترهای دیگری نیز برای این تابع موجود است که از اهمیت کمتری برخوردارند و توضیحات آنها از آدرس زیر قابل دسترس می باشد: