使用python 2.7.10 fsolve求给定常数的单变量非线性方程的根

Using python 2.7.10 fsolve to find the root of a single variable nonlinear equation given a constant

对不起,我是新来的

我想求方程的根 f(x) = exp(x)*erfc(sqrt(x))- (1/(1+y))
其中 y 是传递给方程的常数。

我在Python2.7.10

写了下面的
    1    from scipy.optimize import fsolve
    2    import math
    3    import numpy as np
    4    from numpy import *
    5    from scipy import special
    6    import scipy.optimize
    7
    8    def equation(x,y):
    9       return (np.exp(x) * special.erfc(np.sqrt(x)) - (1/(1+y)))
    10
    11   hd = input ("Input hd ")
    12   guess = (.48) * (hd**(1.71))
    13
    14   print ( "guess soln = ", guess)
    15
    16   soln =  fsolve(equation(x, y=hd), guess)
    17
    18   print ("hd = ")
    19   print ( "Solution = ", soln )

执行时,在第 16 行的 fsolve 调用中 Python returns: NameError: 名称 x 未定义

如果我尝试第 16 行

    16    soln = fsolve(equation(y=hd), guess)

Pythonreturns: TypeError:等式正好需要 2 个参数(给定 1 个)

所以,我显然既不理解将常数传递给函数的正确语法,也不理解让 fsolve 找到给定常数的单个方程的根的语法。如果有人好心告诉我正确的方法,我将不胜感激。

改用这个:

soln =  fsolve(equation, guess, hd)

PS: http://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.optimize.fsolve.html 告诉你你需要知道的一切...