Я пытаюсь найти корень, используя scipy.optimize.newton для комплексной функции. Функция отлично работает, когда я передаю производную функции в качестве одного из аргументов, поэтому используется метод Ньютона-Рафсона, однако когда я не передаю производную и пытаюсь использовать метод секущего только с одним начальным предположением (он работает, если передается второе начальное предположение, поэтому проблемная строка пропускается), генерируется следующая ошибка:
# I understand the error I was just wondering if there's a workaround.
x, r = optimize.newton(f_complex, x0=complex(5, -2), tol=1e-9, full_output=True)
# Error
File "C:\...\Python\Python310\lib\site-packages\scipy\optimize\zeros.py", line 325, in newton
p1 += (eps if p1 >= 0 else -eps)
TypeError: '>=' not supported between instances of 'complex' and 'int'
from scipy import optimize
def f(z):
return z**2 + 1
def fp(z):
return 2 * z
# works
x, r = x, r = optimize.newton(f, x0=complex(5, -2), fprime=fp, tol=1e-9, full_output=True)
print(r)
# does not work
x, r = x, r = optimize.newton(f, x0=complex(5, -2), tol=1e-9, full_output=True)
print(r)
# works if I pass a second initial guess thus line #325 is skipped
x, r = x, r = optimize.newton(f, x0=complex(5, -2), tol=1e-9, full_output=True, x1=complex(4, -1.5))
print(r)
Мой вопрос:
Работает ли метод внутреннего секущего для комплексных функций?
Я пытаюсь найти корень, используя scipy.optimize.newton для комплексной функции. Функция отлично работает, когда я передаю производную функции в качестве одного из аргументов, поэтому используется метод Ньютона-Рафсона, однако когда я не передаю производную и пытаюсь использовать метод секущего только с одним начальным предположением (он работает, если передается второе начальное предположение, поэтому проблемная строка пропускается), генерируется следующая ошибка: [code]# I understand the error I was just wondering if there's a workaround. x, r = optimize.newton(f_complex, x0=complex(5, -2), tol=1e-9, full_output=True)
# Error File "C:\...\Python\Python310\lib\site-packages\scipy\optimize\zeros.py", line 325, in newton p1 += (eps if p1 >= 0 else -eps) TypeError: '>=' not supported between instances of 'complex' and 'int' [/code] Вот что я пробовал: [code]from scipy import optimize
def f(z): return z**2 + 1
def fp(z): return 2 * z
# works x, r = x, r = optimize.newton(f, x0=complex(5, -2), fprime=fp, tol=1e-9, full_output=True) print(r)
# does not work x, r = x, r = optimize.newton(f, x0=complex(5, -2), tol=1e-9, full_output=True) print(r)
# works if I pass a second initial guess thus line #325 is skipped x, r = x, r = optimize.newton(f, x0=complex(5, -2), tol=1e-9, full_output=True, x1=complex(4, -1.5)) print(r) [/code] Мой вопрос: Работает ли метод внутреннего секущего для комплексных функций?
Я пытаюсь понять, почему scipy.optimize.least_squares существует в scipy. Эту функцию можно использовать для подгонки модели. Однако можно использовать scipy.optimize.minimize, чтобы сделать то же самое. Единственная разница заключается в том, что...
Я пытаюсь понять, почему scipy.optimize.least_squares существует в scipy. Эту функцию можно использовать для подгонки модели. Однако можно использовать scipy.optimize.minimize, чтобы сделать то же самое. Единственная разница заключается в том, что...
Я хочу найти локальный минимум для функции, которая зависит от двух переменных. Для этого я планировал использовать функцию scipy.optimize.minimize с методом newton-cg , поскольку я могу вычислить якобиан и гессиан аналитически.
Однако, когда мои...