我有以下功能。
import numpy as np
from scipy import optimize
def func(x):
theta = np.arccos(1 - 2*x)
return 2*(theta - np.sin(theta))
问题:我想找到y = func(x)
的不同值的表达式y
的根。例如,如果y =1
我可以修改上述函数如
import numpy as np
from scipy import optimize
def func(x):
theta = np.arccos(1 - 2*x)
return 2*(theta - np.sin(theta)) - 1
initial_guess = 0
sol = optimize.root(func, initial_guess)
获得所需的根。让我们假设存在这样的根,并且我们知道所有不同y值的适当初始猜测。
我需要做哪些修改?
答案 0 :(得分:1)
你的initial_guess的问题,这只是你的函数的奇点。因此,如果你稍微改变initial_guess,你可以获得一个很好的解决方案......
>>> initial_guess = 0.001
>>> sol = optimize.root(func, initial_guess)
>>> sol
fjac: array([[-1.]])
fun: array([ -2.22044605e-16])
message: 'The solution converged.'
nfev: 11
qtf: array([ 2.99071878e-12])
r: array([-3.71631332])
status: 1
success: True
x: array([ 0.46328511])
>>>
请注意。由于问题奇异性,如果您的初始猜测为负或零,则无法获得数值解。
答案 1 :(得分:1)
要改变左侧,您可以为func
添加额外的参数,然后通过scipy.optimize.root
的args
关键字传递此参数(记住rths answer) :
import numpy as np
from scipy import optimize
def func(x, lhs):
theta = np.arccos(1 - 2*x)
return 2*(theta - np.sin(theta)) - lhs
initial_guess = 0.001
lhs = 1
sol = optimize.root(func, initial_guess, args=(lhs,))