⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄

📁 模糊数学基础及实用算法 (源码) 科学出版社 www.sciencep.com
💻
字号:
Attribute VB_Name = "ModM"
'计算模糊分布
'L=1:偏小型;  L=2:中间型;  L=3:偏大型
'X():元素;  Y():模糊分布
'a,b,c,d:参数
'矩形分布
Public Sub Rect(L As Integer, X() As Single, Y() As Single, _
                a As Single, b As Single, c As Single, d As Single)
    Dim I As Integer, N As Integer
    N = UBound(X)                   '数组X的上界
'..........................................
    If L = 1 Then                   '偏小型
        For I = 1 To N
            If X(I) <= a Then Y(I) = 1
            If X(I) > a Then Y(I) = 0
        Next I
    End If
'..........................................
    If L = 2 Then                   '中间型
        For I = 1 To N
            If X(I) >= b And X(I) <= c Then Y(I) = 1
            If X(I) < b Or X(I) > c Then Y(I) = 0
        Next I
    End If
'..........................................
    If L = 3 Then                   '偏大型
        For I = 1 To N
            If X(I) >= b Then Y(I) = 1
            If X(I) < b Then Y(I) = 0
        Next I
    End If
End Sub

'梯形分布
Public Sub Trap(L As Integer, X() As Single, Y() As Single, _
                a As Single, b As Single, c As Single, d As Single)
    Dim I As Integer, N As Integer
    N = UBound(X)                   '数组X的上界
'....................................
    If L = 1 Then                   '偏小型
        For I = 1 To N
            If X(I) < a Then Y(I) = 1
            If X(I) >= a And X(I) <= b Then Y(I) = (b - X(I)) / (b - a)
            If X(I) > b Then Y(I) = 0
        Next I
    End If
'..........................................
    If L = 2 Then                   '中间型
        For I = 1 To N
            If X(I) < a Then Y(I) = 0
            If X(I) >= a And X(I) < b Then Y(I) = (X(I) - a) / (b - a)
            If X(I) >= b And X(I) < c Then Y(I) = 1
            If X(I) >= c And X(I) < d Then Y(I) = (d - X(I)) / (d - c)
            If X(I) >= d Then Y(I) = 0
        Next I
    End If
'..........................................
    If L = 3 Then                   '偏大型
        For I = 1 To N
            If X(I) < a Then Y(I) = 0
            If X(I) >= a And X(I) <= b Then Y(I) = (X(I) - a) / (b - a)
            If X(I) > b Then Y(I) = 1
        Next I
    End If
End Sub

'抛物线型分布
'K是抛物线次数(=2 或 3)
Public Sub Para(L As Integer, K As Integer, X() As Single, Y() As Single, _
                a As Single, b As Single, c As Single, d As Single)
    Dim I As Integer, N As Integer
    N = UBound(X)                   '数组X的上界
'..........................................
    If L = 1 Then                   '偏小型
        For I = 1 To N
            If X(I) < a Then Y(I) = 1
            If X(I) >= a And X(I) <= b Then Y(I) = ((b - X(I)) / (b - a)) ^ K
            If X(I) > b Then Y(I) = 0
        Next I
    End If
'..........................................
    If L = 2 Then                   '中间型
        For I = 1 To N
            If X(I) < a Then Y(I) = 0
            If X(I) >= a And X(I) < b Then Y(I) = ((X(I) - a) / (b - a)) ^ K
            If X(I) >= b And X(I) < c Then Y(I) = 1
            If X(I) >= c And X(I) < d Then Y(I) = ((d - X(I)) / (d - c)) ^ K
            If X(I) >= d Then Y(I) = 0
        Next I
    End If
'..........................................
    If L = 3 Then                   '偏大型
        For I = 1 To N
            If X(I) < a Then Y(I) = 0
            If X(I) >= a And X(I) <= b Then Y(I) = ((X(I) - a) / (b - a)) ^ K
            If X(I) > b Then Y(I) = 1
        Next I
    End If

End Sub

'正态分布
Public Sub Norm(L As Integer, X() As Single, Y() As Single)
    Dim I As Integer, N As Integer
    Dim a As Single                 '平均值
    Dim d As Single                 '标准差
    N = UBound(X)                   '数组X的上界
    For I = 1 To N
        a = a + X(I)
    Next I
    a = a / N                       '平均值
    For I = 1 To N
        d = d + (X(I) - a) ^ 2
    Next I
    d = Sqr(d / N)                  '标准差
    If L = 1 Then                   '偏小型
        For I = 1 To N
            If X(I) <= a Then Y(I) = 1
            If X(I) > a Then Y(I) = Exp(-((X(I) - a) / d) ^ 2)
        Next I
    End If
    If L = 2 Then                   '中间型
        For I = 1 To N
            Y(I) = Exp(-((X(I) - a) / d) ^ 2)
        Next I
    End If
    If L = 3 Then                   '偏大型
        For I = 1 To N
            If X(I) <= a Then Y(I) = 0
            If X(I) > a Then Y(I) = 1 - Exp(-((X(I) - a) / d) ^ 2)
        Next I
    End If
End Sub

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -