Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用scipy为不同的y值查找表达式y=f(x)的根_Python_Numpy_Scipy - Fatal编程技术网

Python 使用scipy为不同的y值查找表达式y=f(x)的根

Python 使用scipy为不同的y值查找表达式y=f(x)的根,python,numpy,scipy,Python,Numpy,Scipy,我有以下功能 import numpy as np from scipy import optimize def func(x): theta = np.arccos(1 - 2*x) return 2*(theta - np.sin(theta)) 问题:我想为y的不同值找到表达式y=func(x)的根,例如,如果y=1,我可以根据需要修改上述函数 import numpy as np from scipy import optimize def func(x):

我有以下功能

import numpy as np
from scipy import optimize

def func(x):
    theta = np.arccos(1 - 2*x)
    return 2*(theta - np.sin(theta))
问题:我想为
y
的不同值找到表达式
y=func(x)
的根,例如,如果
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值的适当初始猜测


我需要做哪些修改才能实现这一点?

初始猜测的问题,这正是函数的奇点。因此,如果你将初始值移动一点,你可以得到一个很好的解决方案

>>> 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])                                                                                                                                                                                                                                                  
>>>   

注意。由于问题的奇异性,如果初始猜测为负或为零,则无法获得数值解

初始猜测的问题,这正是函数奇点的所在。因此,如果你将初始值移动一点,你可以得到一个很好的解决方案

>>> 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])                                                                                                                                                                                                                                                  
>>>   

注意。由于问题的奇异性,如果初始猜测为负或为零,则无法获得数值解

要改变左侧,您可以在
func
中添加一个额外的参数,然后通过的
args
关键字传递该参数(请记住):


要改变左侧,您可以在
func
中添加一个额外参数,然后通过的
args
关键字传递该参数(请记住):