找到两条曲线之间的交点
Find intersection point between two curves
我有两条曲线(supply
和 demand
),我想找到它们的交点(x
和 y
)。我无法找到上述问题的简单解决方案。我希望我的代码最后打印 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()
示例输出:
我有两条曲线(supply
和 demand
),我想找到它们的交点(x
和 y
)。我无法找到上述问题的简单解决方案。我希望我的代码最后打印 X
的值是什么以及 Y
.
supply = final['0_y']
demand = final['0_x']
price = final[6]
plt.plot(supply, price)
plt.plot(demand, price)
主要的问题和挑战(出了点问题)是我尝试了所有其他方法,但每次都是空的 set/list。即使当我尝试可视化交叉路口时,我的视觉效果也是空洞的。
图表:
由于
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()
示例输出: