【问题标题】:Find intersection point between two curves [duplicate]找到两条曲线之间的交点[重复]
【发布时间】:2022-01-29 00:11:22
【问题描述】:

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

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

主要问题和挑战(有问题)是我尝试了所有其他方法,并且每次我得到一个空集/列表。即使我试图想象交叉点,我也会得到空洞的视觉效果。

图表:

【问题讨论】:

  • 不幸的是没有:(我已经编辑了我的问题并添加了另一个复杂的问题,使其变得复杂
  • 那么请提供一个样本输入(每条曲线 5 个数据点就足够了),它不适用于链接问题中的方法。

标签: python pandas matplotlib visualization


【解决方案1】:

由于implementation of the duplicate 并不简单,我将向您展示如何根据您的情况调整它。首先,您使用 pandas 系列而不是 numpy 数组,因此我们必须对其进行转换。然后,您的 x 轴和 y 轴被切换,因此我们必须更改它们的函数调用顺序:

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()

示例输出:

【讨论】:

    猜你喜欢
    • 2016-03-24
    • 1970-01-01
    • 2020-03-25
    • 1970-01-01
    • 1970-01-01
    • 2020-06-16
    • 2018-06-29
    • 1970-01-01
    • 2016-11-19
    相关资源
    最近更新 更多