1. 程式人生 > 其它 >模糊隸屬度的自定義python函式(線性插值原理)

模糊隸屬度的自定義python函式(線性插值原理)

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