繁体   English   中英

Python使用numpy曲线与fsolve()和函数参数交叉

[英]Python curves intersection with fsolve() and function arguments using numpy

我试图在这里引用fsolve: http//glowingpython.blogspot.gr/2011/05/hot-to-find-intersection-of-two.html

为了找到两条曲线之间的交点。 两条曲线基本上都是两个浮点数组。

第一个是一维数组Pmech ( Pmech(x) ) ,第二个是二维数组Pair ( Pair(x,y) )

x轴对于两个阵列都是通用的,所以我想要做的是每个y看到Pair和Pmech相交的位置。

我知道fsolve()作为参数函数,而不是数组,所以我写了两个基本函数来实现这个功能:

def Pmix(x):
    return Pmech[x]

def Paera(x,y):
    return Pair[x,y]

因此,正如上面的链接所示,我实现了findIntersection函数:

def findIntersection(fun1,fun2,x0): 
    return fsolve(lambda x: (fun1(x) - fun2(x,y) for y in range(1,100)),x0)

但是我收到以下错误:

TypeError: float() argument must be a string or a number
Traceback (most recent call last):
  File "batteries.py", line 261, in <module>
    findIntersection(Pmix,Paera,0)
  File "batteries.py", line 238, in findIntersection
    fsolve(lambda x: (fun1(x) - fun2(x,y) for y in range(1,100) ),x0)
  File "/usr/lib/python2.7/dist-packages/scipy/optimize/minpack.py", line 125, in fsolve
    maxfev, ml, mu, epsfcn, factor, diag)
minpack.error: Result from function call is not a proper array of floats.
from scipy.optimize import fsolve

def pmix(x):
    return x

def paera(x, y):
    return x**2 - y**2

def findIntersection(fun1, fun2, x0):
    return [fsolve(lambda x:fun1(x)-fun2(x, y), x0) for y in range(1, 10)]

print findIntersection(pmix, paera, 0)

似乎在你的例子中,没有fsolve你可以更轻松地解决它:

import numpy as np
pair = np.array(pair)
pmech = np.array(pmech)

intersect_x=np.abs(pair-pmech[:,None]).argmin(0)

(fun1(x) - fun2(x,y) for y in range(1,100))

是一个发电机

[fun1(x) - fun2(x,y) for y in range(1,100)]

是一个清单。 你需要后者。

但是,正如btel在另一个答案中提到的,对于数组中的交叉点,您不能只重用用于查找函数交叉的代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM