物元可拓法于80年代由我国蔡文教授创立,目前已广泛应用于新产品构思与设计、优化决策、控制、识别与评价等各个领域,无论在理论还是在实践上都发挥了越来越重要的作用。

物元是描述事物的名称、特征及量值3个基本元素的简称,在形式上可记为M=(Ncv)=(Ncc(N))。其中MNcv分别是MatterName Character Value的缩写。可拓集合是用关联度将模糊集合的[01]闭合区间连续取值拓广到(-∞,+)实数轴,以表达物元的量值为实轴上的一点时符合要求的程度。物元分析是研究物元及其变化并用以解决矛盾问题的规律和方法,可拓学是用形式化的工具,从定性和定量两个角度去研究解决矛盾问题的规律和方法。物元可拓法结合二者,是将辨证逻辑和形式逻辑相结合的可拓逻辑,丰富了事物的内涵,客观地反映了物质世界的真实状态。

本次选用评价因子污染贡献率方法来确定权系数。主要计算程序:

Dim sRow As Integer, sCol As Integer    '起始的行与列
物元可拓法Excel计算程序
Dim i As Integer, j As Integer          '循环变量
物元可拓法Excel计算程序
Dim Xj As Double                        '定义实测值
物元可拓法Excel计算程序
Dim Aij As Double, Bij As Double        '定义标准域区间
物元可拓法Excel计算程序
Dim Apj As Double, Bpj As Double        '定义节域变量
物元可拓法Excel计算程序
Dim YZS As Integer                      '定义评价因子个数
物元可拓法Excel计算程序
Dim DJS As Integer                      '定义评价等级数
物元可拓法Excel计算程序'
得到起始行列值
物元可拓法Excel计算程序
sRow = InputBox("请输入监测数据第一个数的行号!""输入行号"0)
物元可拓法Excel计算程序sCol 
= InputBox("请输入监测数据第一个数的列号!""输入列号"0)
物元可拓法Excel计算程序YZS 
= InputBox("请输入评价因子个数!""输入因子个数"0)
物元可拓法Excel计算程序DJS 
= InputBox("请输入评价等级个数!""输入评价等级数"0)
物元可拓法Excel计算程序
'插入标记列文字
物元可拓法Excel计算程序
With Sheets("sheet1")
物元可拓法Excel计算程序  
For i = 1 To DJS
物元可拓法Excel计算程序      Cells(sRow 
+ DJS + 2 + i, sCol - 1).Value = "关联函数k_等级" & i
物元可拓法Excel计算程序  
Next i
物元可拓法Excel计算程序  Cells(sRow 
+ 2 * DJS + 3, sCol - 1).Value = "X/S"
物元可拓法Excel计算程序  Cells(sRow 
+ 2 * DJS + 4, sCol - 1).Value = "归一化权重"
物元可拓法Excel计算程序  
For i = 1 To DJS
物元可拓法Excel计算程序      Cells(sRow 
+ 2 * DJS + 4 + i, sCol - 1).Value = "关联度K_等级" & i
物元可拓法Excel计算程序  
Next i
物元可拓法Excel计算程序  Cells(sRow 
+ 3 * DJS + 5, sCol - 1).Value = "可拓指数"
物元可拓法Excel计算程序  
物元可拓法Excel计算程序  
'按列循环计算
物元可拓法Excel计算程序
  For j = sCol To sCol + YZS - 1
物元可拓法Excel计算程序    
'赋初值
物元可拓法Excel计算程序
    Xj = Cells(sRow, j).Value            '实测值
物元可拓法Excel计算程序
    Apj = Cells(sRow + 1, j).Value       '可拓域最小值
物元可拓法Excel计算程序
    Bpj = Cells(sRow + DJS + 2, j).Value '可拓域最大值
物元可拓法Excel计算程序
    
物元可拓法Excel计算程序    
For i = 1 To DJS
物元可拓法Excel计算程序      
'对aij,bij赋值
物元可拓法Excel计算程序
      Aij = Cells(sRow + i, j).Value
物元可拓法Excel计算程序      Bij 
= Cells(sRow + i + 1, j).Value
物元可拓法Excel计算程序      
物元可拓法Excel计算程序      
'按条件选择公式计算关联度
物元可拓法Excel计算程序
      If Xj > Aij And Xj < Bij Then 'xj<Xij 点x位于本标准之内
物元可拓法Excel计算程序
      
物元可拓法Excel计算程序        
If Xj <= ((Aij + Bij) / 2Then
物元可拓法Excel计算程序          Cells(sRow 
+ i + DJS + 2, j).Value = -(Aij - Xj) / (Bij - Aij)
物元可拓法Excel计算程序        
Else
物元可拓法Excel计算程序          Cells(sRow 
+ i + DJS + 2, j).Value = -(Xj - Bij) / (Bij - Aij)
物元可拓法Excel计算程序        
End If
物元可拓法Excel计算程序        
物元可拓法Excel计算程序      
Else          'xj<>Xij 点x位于本标准之外
物元可拓法Excel计算程序
      
物元可拓法Excel计算程序        
If Xj < Aij Then 'x位于标准的左边,此时有x<(ai+bi)/2
物元可拓法Excel计算程序
        
物元可拓法Excel计算程序          
If Xj <= (Apj + Bpj) / 2 Then
物元可拓法Excel计算程序            Cells(sRow 
+ i + DJS + 2, j).Value = (Aij - Xj) / (Apj - Aij)
物元可拓法Excel计算程序          
Else
物元可拓法Excel计算程序            Cells(sRow 
+ i + DJS + 2, j).Value = (Aij - Xj) / (2 * Xj - Bpj - Aij)
物元可拓法Excel计算程序          
End If
物元可拓法Excel计算程序        
物元可拓法Excel计算程序        
ElseIf Xj > Bij Then 'x位于标准的右边,此时有x>(ai+bi)/2
物元可拓法Excel计算程序
        
物元可拓法Excel计算程序          
If Xj <= (Apj + Bpj) / 2 Then
物元可拓法Excel计算程序            Cells(sRow 
+ i + DJS + 2, j).Value = (Xj - Bij) / (Apj + Bij - 2 * Xj)
物元可拓法Excel计算程序          
Else
物元可拓法Excel计算程序            Cells(sRow 
+ i + DJS + 2, j).Value = (Xj - Bij) / (Bij - Bpj)
物元可拓法Excel计算程序          
End If
物元可拓法Excel计算程序          
物元可拓法Excel计算程序        
End If
物元可拓法Excel计算程序      
End If
物元可拓法Excel计算程序    
Next i
物元可拓法Excel计算程序  
Next j
物元可拓法Excel计算程序  
物元可拓法Excel计算程序
物元可拓法Excel计算程序    
'计算X/S
物元可拓法Excel计算程序
    For j = sCol To sCol + YZS - 1
物元可拓法Excel计算程序        
Dim a As Double
物元可拓法Excel计算程序        a 
= 0
物元可拓法Excel计算程序        
For i = 1 To DJS + 2
物元可拓法Excel计算程序            a 
= a + Cells(sRow + i, j)
物元可拓法Excel计算程序        
Next i
物元可拓法Excel计算程序        Cells(sRow 
+ 2 * DJS + 3, j).Value = Cells(sRow, j).Value * (DJS + 2/ a
物元可拓法Excel计算程序    
Next j
物元可拓法Excel计算程序    
'计算权重
物元可拓法Excel计算程序
    '计算x/s的总和
物元可拓法Excel计算程序
    a = 0
物元可拓法Excel计算程序    
For i = sCol To sCol + YZS - 1
物元可拓法Excel计算程序        a 
= a + Cells(sRow + 2 * DJS + 3, i)
物元可拓法Excel计算程序    
Next i
物元可拓法Excel计算程序    
物元可拓法Excel计算程序    
For j = sCol To sCol + YZS - 1
物元可拓法Excel计算程序        Cells(sRow 
+ 2 * DJS + 4, j).Value = Cells(sRow + 2 * DJS + 3, j).Value / a
物元可拓法Excel计算程序    
Next j
物元可拓法Excel计算程序    
物元可拓法Excel计算程序    
'计算关联度
物元可拓法Excel计算程序
    Cells(sRow + 2 * DJS + 4, sCol + YZS) = "综合关联度"
物元可拓法Excel计算程序    
For i = 1 To DJS
物元可拓法Excel计算程序        
For j = sCol To sCol + YZS - 1
物元可拓法Excel计算程序            Cells(sRow 
+ 2 * DJS + 4 + i, j).Value = Cells(sRow + DJS + 2 + i, j).Value * Cells(sRow + 2 * DJS + 4, j).Value
物元可拓法Excel计算程序        
Next j
物元可拓法Excel计算程序        
Dim k As Integer
物元可拓法Excel计算程序        a 
= 0
物元可拓法Excel计算程序        
For k = sCol To sCol + YZS - 1
物元可拓法Excel计算程序           a 
= a + Cells(sRow + 2 * DJS + 4 + i, k) '综合关联度累加
物元可拓法Excel计算程序
        Next k
物元可拓法Excel计算程序        Cells(sRow 
+ 2 * DJS + 4 + i, sCol + YZS).Value = a
物元可拓法Excel计算程序    
Next i
物元可拓法Excel计算程序    
'计算可拓指数
物元可拓法Excel计算程序
    '找最小与最大关联度
物元可拓法Excel计算程序
    Dim Kmax, Kmin As Double
物元可拓法Excel计算程序    Kmax 
= Cells(sRow + 2 * DJS + 4 + 1, sCol + YZS).Value
物元可拓法Excel计算程序    Kmin 
= Kmax
物元可拓法Excel计算程序    
For i = 2 To DJS
物元可拓法Excel计算程序      
If Kmax < Cells(sRow + 2 * DJS + 4 + i, sCol + YZS).Value Then
物元可拓法Excel计算程序        Kmax 
= Cells(sRow + 2 * DJS + 4 + i, sCol + YZS).Value
物元可拓法Excel计算程序      
End If
物元可拓法Excel计算程序      
If Kmin > Cells(sRow + 2 * DJS + 4 + i, sCol + YZS).Value Then
物元可拓法Excel计算程序        Kmin 
= Cells(sRow + 2 * DJS + 4 + i, sCol + YZS).Value
物元可拓法Excel计算程序      
End If
物元可拓法Excel计算程序    
Next i
物元可拓法Excel计算程序    
物元可拓法Excel计算程序    
Dim KXP() As Double
物元可拓法Excel计算程序    
ReDim KXP(DJS) As Double
物元可拓法Excel计算程序    
For i = 1 To DJS
物元可拓法Excel计算程序      KXP(i) 
= (Cells(sRow + 2 * DJS + 4 + i, sCol + YZS).Value - Kmin) / (Kmax - Kmin)
物元可拓法Excel计算程序    
Next i
物元可拓法Excel计算程序    
Dim FZ, FM As Double
物元可拓法Excel计算程序    
For i = 1 To DJS
物元可拓法Excel计算程序      FZ 
= FZ + i * KXP(i)
物元可拓法Excel计算程序      FM 
= FM + KXP(i)
物元可拓法Excel计算程序    
Next i
物元可拓法Excel计算程序    Cells(sRow 
+ 3 * DJS + 5, sCol).Value = FZ / FM
物元可拓法Excel计算程序
End With
实例文件

相关文章: