编辑:更具体地说,我正在寻找一种实用的方法来绘制具有2个变量的标量函数的零的形状。所以这些值只需要精确到我选择的2D网格网格的分辨率。例如f(x,y)= sqrt(x ^ 2 + y ^ 2) - 4应该给我一个圆圈。
问题是fsolve需要一个向量函数,所以
from scipy.optimize import fsolve
def a(x): return sin(x[0]) + cos(x[1])
nodes = fsolve(a,(.1,.2))
不起作用。有没有解决方法?例如 def a(x):return [sin(x [0])+ cos(x [1]),0]
但它只输出1个解决方案(数组([ - 1.37079633,0.2])而不是所有可能的零)。
答案 0 :(得分:2)
如果要诊断2D函数及其零的行为,则可以更好地生成值的2D网格,并使用matplotlib的pcolor
等绘图。然后,如果你真的需要精确找到零的位置,你知道从哪里开始fsolve
看。
原则上,如果您了解有关您的功能的信息,则可以自动执行此程序,例如: y的每个值有多少个零,那么你就会知道需要在每个最小值附近应用fsolve多少次。这可能会或可能不会证明足够稳健。但是找不到任意非线性函数的所有零点都没有通用的解决方案,特别是不能用于多维度。