我正在尝试找到一个问题的解决方案,我已经搜索过,我能找到的最接近的是这些论坛的插值帖子,我已经取得了有限的成功。
我将多个多边形定义为由多个x-y点给出的单独散点图。我试图做的是在y轴上画一条水平线,找到水平线与多边形相交的x-min和x-max值。我想为所有y值做这个。所以从理论上讲,我可以逐步循环并记录y = 1,y = 2等的值。我使用的工程软件需要这种格式的输入参数,因此我试图找到解决方案。
对此问题的最佳解决方案的任何建议或指示都会非常感激,我会试一试。
import matplotlib.pyplot as plt
import numpy as np
x =[1,2.6,2.56,2.57,10,11.66,13.07,11.78,11.27,6.49,5.98,5.76,3.02,1.87,1]
y =[15.59,15.09,15.14,15.15,16,17,25.47,26,27,27,28,28,26.67,16.37,15.59]
plt.plot(x,y)
plt.grid()
plt.show()
答案 0 :(得分:0)
您可以在这两个点之间进行线性插值,其中多边形与ys==?
定义的直线相交。要查找这些点,您可以从多边形的ys
值中减去y
值,找到符号发生变化的点,并获得这些点的最小值和最大值。
import numpy as np
import matplotlib.pyplot as plt
x =[1,2.6,2.56,2.57,10,11.66,13.07,11.78,11.27,6.49,5.98,5.76,3.02,1.87,1]
y =[15.59,15.09,15.14,15.15,16,17,25.47,26,27,27,28,28,26.67,16.37,15.59]
def findminmax(t, x, zero=0):
t = np.array(t); x = np.array(x)
ta = []
p = (x-zero) > 0
ti = np.where(np.bitwise_xor(p[1:], p[:-1]))[0]
for i in ti:
y_ = np.sort(x[i:i+2])
z_ = t[i:i+2][np.argsort(x[i:i+2])]
t_ = np.interp(zero, y_, z_)
ta.append( t_ )
if ta:
return min(ta), max(ta)
else:
return None, None
plt.plot(x,y)
ys = np.arange(13, 29, 0.2)
result = []
for s in ys:
mi, ma = findminmax(x,y,zero=s)
if mi and ma:
result.append([mi,ma,s])
print("y = {}, minimum {}, maximum {}".format(s,mi,ma))
result=np.array(result)
plt.scatter(result[:,0],result[:,2], label="min", color="limegreen")
plt.scatter(result[:,1],result[:,2], label="max", color="crimson")
plt.legend()
plt.grid()
plt.show()