2016-12-20 7 views
0

Мне нужно найти корни довольно сложного уравнения, и я прочитал, что у python есть набор функций, которые могут помочь. Я попытался выяснить, как они работают, но я неудачно справился. Примеры, которые я видел, все довольно просто, а не мне нужно, чтобы найти корни этой функции:SciPy Newton Method

enter image description here

С B и K вещественные положительные числа. Может ли кто-нибудь помочь?

+0

'Я пытался выяснить, как они работают, но у меня не очень bad' пожалуйста, покажите, что вы пробовали, а также включают в себя ошибки, которые вы получили. – cel

+0

Нет смысла в том, что B и K являются константами, но они могут изменяться в соответствии с ранее установленным параметром. Я не могу понять, как я могу их установить. Я думал определить функцию def f (x, B, K), но я не знаю, может ли она работать. – haster8558

+1

* «Я думал определить функцию def f (x, B, K), но я не знаю, может ли она работать». * Это стандартный способ сделать это с помощью scipy функций оптимизации. Дать ему шанс. –

ответ

2

Вот два решения, второе, вероятно, более простой и правильный путь решения проблемы.

Фокус в том, что вы должны получить функцию f, чтобы запомнить значения K и B. Один из способов сделать это - сделать его внутренней функцией другой функции. Внешняя функция используется для установки K и B. Они находятся в области переменных внутренней возвращаемой функции. Таким образом, внутренняя функция f может запомнить значения. Возвращенная функция затем просто передается методу Ньютона-Рафсона и находит корень.

from scipy.misc import factorial 
from scipy.optimize import newton 
import numpy as np 

def get_f(K=1, B=1): 
    def f(x): 
     return np.exp(-B*(np.power(B, x))-factorial(x)*K) 
    return f 

f = get_f(K=2, B=3) 
print newton(f, 3, maxiter=1000) 

Пользователь отметил, что функция newton имеет args аргумент, который может быть использован для передачи дополнительных аргументов в функции Ньютона-Рафсона. Если функция имеет вид f (x, a, b, c ...), то a, b, c ... - дополнительные аргументы, которые могут быть заданы в args.

же решение будет выглядеть следующим образом:

from scipy.misc import factorial 
from scipy.optimize import newton 
import numpy as np 

def f(x, K, B): 
    return np.exp(-B*(np.power(B, x))-factorial(x)*K) 

print newton(f, 3, args=(2, 3), maxiter=1000) 
+1

"* Фокус в том, что вы должны получить функцию f для запоминания значений K и B.» * Никакой трюк не требуется. Просто используйте аргумент 'args'' newton'. –

+0

Спасибо @WarrenWeckesser, приятно знать :) –

 Смежные вопросы

  • Нет связанных вопросов^_^