Учитывая эту функцию:
def f(x):
return (1-x**2)**m * ((1-x)/2)**n
, где m
и n
являются константами, скажем, оба 0.5 для примера.
Я пытаюсь использоватьфункции из scipy.optimize
для решения для x
при заданном значении y
.Меня интересуют только значения x
от -1 до 1. Построение функции с помощью
x = numpy.arange(0, 1, 0,1)
matplotlib.pyplot.plot(x, f(x))
показывает, что эта функция является разновидностью искаженной параболы, охватывающей диапазон от 0 до 0,65.Итак, давайте попробуем решить это для y = 0.3:
def f(x):
return (1 - x**2)**m * ((1-x)/2)**n - 0.3
print(scipy.optimize.newton_krylov(f, 0.5))
0.6718791645800665
Это выглядит как раз для одного из возможных решений.Но есть два.Второе должно быть около -0,9.Попробуйте то, что я мог бы для первоначального предположения, я не могу найти это второе решение.Метод Ньютона-Крылова вообще не дает сходимости для xin < 0
, но ни один из решателей не может найти это второе решение.
Я что-то упустил?Что я делаю не так?