使用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 告诉你你需要知道的一切...
对不起,我是新来的
我想求方程的根
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 告诉你你需要知道的一切...