模糊隸屬度的自定義python函式(線性插值原理)
阿新 • • 發佈:2021-05-09
def Member_dgre(x,y,xi):#x是指標列表,y是隸屬度列表,xi是具體的一個指標數值 if (y[-1]-y[0])/(x[-1]-x[0])>0:#如果x是與隸屬度呈正相關的正向指標 if xi<=x[0]: yi=y[0] if xi>=x[-1]: yi=y[-1] else: for j in range(len(x)): if xi>=x[j] and xi<=x[j+1]: yi=y[j]+(xi-x[j])/(x[j+1]-x[j])*(y[j+1]-y[j]) if (y[-1]-y[0])/(x[-1]-x[0])<0:#如果x是與隸屬度呈負相關的負向指標 if xi>=x[0]: yi=y[0] if xi<=x[-1]: yi=y[-1] else: for j in range(len(x)): if xi<=x[j] and xi>=x[j+1]: yi=y[j]+(x[j]-xi)/(x[j]-x[j+1])*(y[j+1]-y[j]) return yi
函式的正確性驗證如下:
x1=[0,50,100,150,200,250]#正向指標的閾值區間劃分
x2=[1500,900,600,400,300,0]#負向指標的閾值區間劃分
y=[0,0.2,0.4,0.6,0.8,1]#;隸屬度區間
s=Member_dgre(x1,y,30)
print(s)
t=Member_dgre(x2,y,870)
print(t)
驗證結果如下:
解釋:
x1的0-50區間對應y的0-0.2區間,200-250對應0.8-1
x2的1500-900對應y的0-0.2區間,300-0對應0.8-1