找到两条曲线之间的交点

Find intersection point between two curves

我有两条曲线(supplydemand),我想找到它们的交点(xy)。我无法找到上述问题的简单解决方案。我希望我的代码最后打印 X 的值是什么以及 Y.

的值是什么
supply = final['0_y']
demand = final['0_x']
price = final[6]
plt.plot(supply, price)
plt.plot(demand, price)

主要的问题和挑战(出了点问题)是我尝试了所有其他方法,但每次都是空的 set/list。即使当我尝试可视化交叉路口时,我的视觉效果也是空洞的。

图表:

由于 并不简单,我将向您展示如何使其适应您的情况。首先,你使用 pandas 系列而不是 numpy 数组,所以我们必须转换它们。然后,你的 x- 和 y-axes 被调换了,所以我们必须改变它们在函数调用中的顺序:

import pandas as pd          
import matplotlib.pyplot as plt  
import numpy as np 


final = pd.DataFrame({'0_y': [0, 0, 0, 10, 10, 30], 
                      '0_x': [20, 11, 10, 4, 1, 0,], 
                      "6": [-200, 50, 100, 200, 600, 1000]})

supply = final['0_y'].to_numpy()
demand = final['0_x'].to_numpy()
price = final["6"].to_numpy()
plt.plot(supply, price)
plt.plot(demand, price)


def find_roots(x,y):
    s = np.abs(np.diff(np.sign(y))).astype(bool)
    return x[:-1][s] + np.diff(x)[s]/(np.abs(y[1:][s]/y[:-1][s])+1)

z = find_roots(price, supply-demand)
x4z = np.interp(z, price, supply)


plt.scatter(x4z, z, color="red", zorder=3)
plt.title(f"Price is {z[0]} at supply/demand of {x4z[0]}")

plt.show()

示例输出: