Я впервые использую функцию scipy optimize.fsolve, чтобы найти корни уравнения.Проблема в том, что любое число, которое я использую в качестве значения догадки / оценки, является тем, что я получаю в качестве ответа (с точностью до 8 знаков после запятой).При использовании full_output = True я получаю флаг выхода равным 1, что должно означать, что «решение сходится», что, насколько я понимаю, должно означать, что результат действительно является корнем уравнения.
Я знаю, что существует конечное число различных корней (которые разнесены), как, когда я строю график уравнения, я могу их видеть.Кроме того, fsolve завершается с ошибкой (выдает ошибки с флагами выхода), когда я ввожу начальную точку в диапазон, который должен возвращать неопределенные значения (делим на ноль, квадратный корень из отрицательного значения).Но помимо этого он всегда возвращает начальную точку как корень.
Я протестировал fsolve с очень простым уравнением, и оно работало нормально, поэтому я знаю, что импортирую все, что мне нужно, и должен правильно использовать fsolve.Я также попытался возиться с некоторыми входными аргументами, но я не очень хорошо понимаю их, и, похоже, ничего не изменилось).
Ниже приведен соответствующий код (E - единственная переменная, все остальное имеетненулевое значение):
def func(E):
s = sqrt(c_sqr * (1 - E / V_0))
f = s / tan(s) + sqrt(c_sqr - s**2)
return f
guess = 3
fsolve(func, guess)
, который просто выводит «3» и говорит «Решение сходится», даже если ближайшие решения должны быть на уровне около 2,8 и 4,7.
Кто-нибудь есть идеи, как это исправить и получить правильный ответ (с помощью fsolve)?