用了一天的时间,终于成功的搞出了这个运用模糊数学理论进行水质评价的小程序,发出来供大家参考。这是第一个小板凳,如果编程高手来看,肯定会笑掉大牙的,呵呵。我可是不赔偿哦。
'读入指标界限
Open "f:\vb\data.txt" For Input As #1
'------------------------------------------------
'计算平均值
For i = 1 To 5
t = 0
For j = 1 To 5
t = t + data(i, j)
Next j
aver(i) = t / 5
Next i
'-------------------------------------------------
'读入实测值
Open "f:/vb/sca.txt" For Input As #2
'-------------------------------------------------
'隶属度权重矩阵生成
t = 0
For i = 1 To 5
t = t + 1
If t <> 1 Then 'BOD COD 等污染因子,值越大说明污染越严重,水质越差
If sca(i) < data(i, 1) Then
data1(i, 1) = 1
data1(i, 2) = 0
data1(i, 3) = 0
data1(i, 4) = 0
data1(i, 5) = 0
End If
If sca(i) > data(i, 1) And sca(i) < data(i, 2) Then
data(i, 1) = (data(i, 2) - sca(i)) / (data(i, 2) - data(i, 1))
data1(i, 2) = 1 - data1(i, 1)
data1(i, 3) = 0
data1(i, 4) = 0
data1(i, 5) = 0
End If
If sca(i) > data(i, 2) And sca(i) < data(i, 3) Then
data1(i, 1) = 0
data1(i, 2) = (data(i, 3) - sca(i)) / (data(i, 3) - data(i, 2))
data1(i, 3) = 1 - data1(i, 2)
data1(i, 4) = 0
data1(i, 5) = 0
End If
If sca(i) > data(i, 3) And sca(i) < data(i, 4) Then
data1(i, 1) = 0
data1(i, 2) = 0
data1(i, 3) = (data(i, 4) - sca(i)) / (data(i, 4) - data(i, 3))
data1(i, 4) = 1 - data1(i, 3)
data1(i, 5) = 0
End If
If sca(i) > data(i, 4) And sca(i) < data(i, 5) Then
data1(i, 1) = 0
data1(i, 2) = 0
data1(i, 3) = 0
data1(i, 4) = (data(i, 5) - sca(i)) / (data(i, 5) - data(i, 4))
data1(i, 5) = 1 - data1(i, 4)
End If
If sca(i) > data(i, 5) Then
data1(i, 1) = 0
data1(i, 2) = 0
data1(i, 3) = 0
data1(i, 4) = 0
data1(i, 5) = 1
End If
End If
If t = 1 Then 'DO 污染因子,值越大代表水质越好
If sca(i) > data(i, 1) Then
data1(i, 1) = 1
data1(i, 2) = 0
data1(i, 3) = 0
data1(i, 4) = 0
data1(i, 5) = 0
End If
If sca(i) < data(i, 1) And sca(i) > data(i, 2) Then
data(i, 1) = (data(i, 2) - sca(i)) / (data(i, 2) - data(i, 1))
data1(i, 2) = 1 - data1(i, 1)
data1(i, 3) = 0
data1(i, 4) = 0
data1(i, 5) = 0
End If
If sca(i) < data(i, 2) And sca(i) > data(i, 3) Then
data1(i, 1) = 0
data1(i, 2) = (data(i, 3) - sca(i)) / (data(i, 3) - data(i, 2))
data1(i, 3) = 1 - data1(i, 2)
data1(i, 4) = 0
data1(i, 5) = 0
End If
If sca(i) < data(i, 3) And sca(i) > data(i, 4) Then
data1(i, 1) = 0
data1(i, 2) = 0
data1(i, 3) = (data(i, 4) - sca(i)) / (data(i, 4) - data(i, 3))
data1(i, 4) = 1 - data1(i, 3)
data1(i, 5) = 0
End If
If sca(i) < data(i, 4) And sca(i) > data(i, 5) Then
data1(i, 1) = 0
data1(i, 2) = 0
data1(i, 3) = 0
data1(i, 4) = (data(i, 5) - sca(i)) / (data(i, 5) - data(i, 4))
data1(i, 5) = 1 - data1(i, 4)
End If
If sca(i) < data(i, 5) Then
data1(i, 1) = 0
data1(i, 2) = 0
data1(i, 3) = 0
data1(i, 4) = 0
data1(i, 5) = 1
End If
End If
Next i
'------------------------------------------------------------------------------------
'确定参数污染因子的权数分配矩阵
t = 0
For i = 1 To 5
If i = 1 Then
A(i) = aver(i) / sca(i)
End If
If i <> 1 Then
A(i) = sca(i) / aver(i)
End If
t = t + A(i)
Next i
For i = 1 To 5
A1(i) = A(i) / t
Next i
'---------------------------------------------------------------------------------
'评价结果矩阵
For i = 1 To 5
For j = 1 To 5
B(i, j) = IIf(A1(j) < data1(j, i), A1(j), data1(j, i))
Next j
Next i
For i = 1 To 5
M(i) = B(i, 1)
For j = 1 To 5
N = IIf(M(i) > B(i, j), M(i), B(i, j))
M(i) = N
Next j
Next i
For i = 1 To 5
Print M(i)
Next i
Close #1
Close #2
'读入指标界限
Open "f:\vb\data.txt" For Input As #1
'------------------------------------------------
'计算平均值
For i = 1 To 5
t = 0
For j = 1 To 5
t = t + data(i, j)
Next j
aver(i) = t / 5
Next i
'-------------------------------------------------
'读入实测值
Open "f:/vb/sca.txt" For Input As #2
'-------------------------------------------------
'隶属度权重矩阵生成
t = 0
For i = 1 To 5
t = t + 1
If t <> 1 Then 'BOD COD 等污染因子,值越大说明污染越严重,水质越差
If sca(i) < data(i, 1) Then
data1(i, 1) = 1
data1(i, 2) = 0
data1(i, 3) = 0
data1(i, 4) = 0
data1(i, 5) = 0
End If
If sca(i) > data(i, 1) And sca(i) < data(i, 2) Then
data(i, 1) = (data(i, 2) - sca(i)) / (data(i, 2) - data(i, 1))
data1(i, 2) = 1 - data1(i, 1)
data1(i, 3) = 0
data1(i, 4) = 0
data1(i, 5) = 0
End If
If sca(i) > data(i, 2) And sca(i) < data(i, 3) Then
data1(i, 1) = 0
data1(i, 2) = (data(i, 3) - sca(i)) / (data(i, 3) - data(i, 2))
data1(i, 3) = 1 - data1(i, 2)
data1(i, 4) = 0
data1(i, 5) = 0
End If
If sca(i) > data(i, 3) And sca(i) < data(i, 4) Then
data1(i, 1) = 0
data1(i, 2) = 0
data1(i, 3) = (data(i, 4) - sca(i)) / (data(i, 4) - data(i, 3))
data1(i, 4) = 1 - data1(i, 3)
data1(i, 5) = 0
End If
If sca(i) > data(i, 4) And sca(i) < data(i, 5) Then
data1(i, 1) = 0
data1(i, 2) = 0
data1(i, 3) = 0
data1(i, 4) = (data(i, 5) - sca(i)) / (data(i, 5) - data(i, 4))
data1(i, 5) = 1 - data1(i, 4)
End If
If sca(i) > data(i, 5) Then
data1(i, 1) = 0
data1(i, 2) = 0
data1(i, 3) = 0
data1(i, 4) = 0
data1(i, 5) = 1
End If
End If
If t = 1 Then 'DO 污染因子,值越大代表水质越好
If sca(i) > data(i, 1) Then
data1(i, 1) = 1
data1(i, 2) = 0
data1(i, 3) = 0
data1(i, 4) = 0
data1(i, 5) = 0
End If
If sca(i) < data(i, 1) And sca(i) > data(i, 2) Then
data(i, 1) = (data(i, 2) - sca(i)) / (data(i, 2) - data(i, 1))
data1(i, 2) = 1 - data1(i, 1)
data1(i, 3) = 0
data1(i, 4) = 0
data1(i, 5) = 0
End If
If sca(i) < data(i, 2) And sca(i) > data(i, 3) Then
data1(i, 1) = 0
data1(i, 2) = (data(i, 3) - sca(i)) / (data(i, 3) - data(i, 2))
data1(i, 3) = 1 - data1(i, 2)
data1(i, 4) = 0
data1(i, 5) = 0
End If
If sca(i) < data(i, 3) And sca(i) > data(i, 4) Then
data1(i, 1) = 0
data1(i, 2) = 0
data1(i, 3) = (data(i, 4) - sca(i)) / (data(i, 4) - data(i, 3))
data1(i, 4) = 1 - data1(i, 3)
data1(i, 5) = 0
End If
If sca(i) < data(i, 4) And sca(i) > data(i, 5) Then
data1(i, 1) = 0
data1(i, 2) = 0
data1(i, 3) = 0
data1(i, 4) = (data(i, 5) - sca(i)) / (data(i, 5) - data(i, 4))
data1(i, 5) = 1 - data1(i, 4)
End If
If sca(i) < data(i, 5) Then
data1(i, 1) = 0
data1(i, 2) = 0
data1(i, 3) = 0
data1(i, 4) = 0
data1(i, 5) = 1
End If
End If
Next i
'------------------------------------------------------------------------------------
'确定参数污染因子的权数分配矩阵
t = 0
For i = 1 To 5
If i = 1 Then
A(i) = aver(i) / sca(i)
End If
If i <> 1 Then
A(i) = sca(i) / aver(i)
End If
t = t + A(i)
Next i
For i = 1 To 5
A1(i) = A(i) / t
Next i
'---------------------------------------------------------------------------------
'评价结果矩阵
For i = 1 To 5
For j = 1 To 5
B(i, j) = IIf(A1(j) < data1(j, i), A1(j), data1(j, i))
Next j
Next i
For i = 1 To 5
M(i) = B(i, 1)
For j = 1 To 5
N = IIf(M(i) > B(i, j), M(i), B(i, j))
M(i) = N
Next j
Next i
For i = 1 To 5
Print M(i)
Next i
Close #1
Close #2
回复Comments
{commenttime}{commentauthor}
{CommentUrl}
{commentcontent}