6

ここで引用されているように fsolve を使用しようとしています: http://glowingpython.blogspot.gr/2011/05/hot-to-find-intersection-of-two.html

2 つの曲線の交点を見つけるために。どちらの曲線も、基本的に 2 つの float 配列です。

最初のものは 1 次元配列Pmech ( Pmech(x) )で、2 つ目は 2 次元配列です。Pair ( Pair(x,y) )

x 軸は両方の配列に共通であるため、すべての y で Pair と Pmech が交差する場所を確認する必要があります。

配列ではなく関数を引数として取るという事実を認識しているfsolve()ため、この機能を実装するために2つの基本的な関数を作成しました。

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.
4

3 に答える 3

3
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)
于 2012-11-13T11:52:15.530 に答える
3

あなたの例では、それがなくてもはるかに簡単に解決できるようですfsolve:

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

intersect_x=np.abs(pair-pmech[:,None]).argmin(0)
于 2012-11-13T11:53:21.243 に答える
1

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

ジェネレーターです

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

リストです。後者が必要です。

ただし、btelが他の回答で述べているように、配列内の交差については、関数の交差を見つけるために使用されるコードを再利用することはできません。

于 2012-11-13T15:11:26.590 に答える