Python - 查找2个图的所有交叉点

时间:2015-07-21 13:51:51

标签: python numpy matplotlib scipy

我正在尝试找到两个图形的所有交点并在最终的图上显示它们。我环顾四周,尝试了很多东西,但是我无法获得我想要的东西。

目前,我试图生成一个列表,其中列出交叉点,但我不断收到以下错误:

  

具有多个元素的数组的真值是不明确的。   使用a.any()a.all()

import numpy as np
from scipy.optimize import fsolve
import matplotlib.pyplot as plt


x = np.arange(-7.0, 7.0, 0.05)

def y(x):
    return np.sin(x)*(0.003*x**4 - 0.1*x**3 + x**2 + 4*x + 3)

def g(x):
    return -10 * np.arctan(x)

def intersection(x):
    if (y(x) - g(x)) == 0:
        print y.all(x)

plt.plot(x, y(x), '-')
plt.plot(x, g(x), '-')

plt.show()

2 个答案:

答案 0 :(得分:1)

它类似于:

Intersection of two graphs in Python, find the x value:

import numpy as np
from scipy.optimize import fsolve
import matplotlib.pyplot as plt


x = np.arange(-7.0, 7.0, 0.05)

y = np.sin(x)*(0.003*x**4 - 0.1*x**3 + x**2 + 4*x + 3)

g = -10 * np.arctan(x)

def intersection():
    idx = np.argwhere(np.isclose(y, g, atol=10)).reshape(-1)
    print idx

    plt.plot(x, y, '-')
    plt.plot(x, g, '-')

    plt.show()

intersection()

编辑:您不使用函数,而是使用值列表

答案 1 :(得分:0)

对于单一解决方案,可以在http://glowingpython.blogspot.de/2011/05/hot-to-find-intersection-of-two.html中找到答案:

from scipy.optimize import fsolve

def findIntersection(fun1,fun2,x0):
    return fsolve(lambda x : fun1(x) - fun2(x),x0)

result = findIntersection(y,g,0.0)

现在,您只需要遍历您的范围即可获得所有根源。这提供了一些重复项,您可以使用mpmath删除它,将精度设置得足够低,并使用一组。

from scipy.optimize import fsolve
import numpy as np

rng = np.arange(-7.0, 7.0, 0.05)

def y(x):
    return np.sin(x)*(0.003*x**4 - 0.1*x**3 + x**2 + 4*x + 3)

def g(x):
    return -10 * np.arctan(x)

def findIntersection(fun1,fun2,x0):
    return fsolve(lambda x : fun1(x) - fun2(x),x0)

result = []
for x in rng:
    result.append(float(findIntersection(y,g,x)))