python层次分析法一致性检验+权重计算

import numpy as np
from numpy import linalg

def s_s_a(n, C):
“”“算术平均值求权重”“”
w_1 = sum© / n
print(“算术平均权重为:\n”, w_1)
print(“”)
def j_h_a(n, A):
“”“几何平均值求权重”“”
B_2 = pow(np.prod(A, 1), 1/n) # 0是按行,1是按列
w_2 = B_2 / sum(B_2)
print(“几何平均值权重:\n”, w_2)
print(“”)
def t_v(V,eig_max,D):
“”“特征值法求权重”“”
c = np.where(V == eig_max)
B_3 = D[:, c.index(0)]
w_3 = B_3 / sum(B_3)
print(“特征值法求权重:\n”, w_3)
def main(A,B_z,C_z,D_z,R_I,n):
“”“主程序”“”
if D_z[1,:].all() == (np.array(B_z)*np.array(C_z)).all():
print(“该矩阵是正互反矩阵!\n”)
V,D = np.linalg.eig(A)
eig_max = max(V)
CI = (eig_max-n) / (n-1)
RI = R_I[n-1]
CR = CI / RI
if CR < 0.1:
print(“一致性检验通过!\n”)
B_1 = np.zeros([n,n])
for i in range(0,n):
B_1[0:n,i] = A[0:n,i] / sum(A[0:n,i])
C = B_1.T
s_s_a(n, C)
j_h_a(n, A)
t_v(V,eig_max,D)
else:
print(“一致性检验失败,请修改!”)
else:
print(“您输入的矩阵非正互反矩阵”)

R_I = np.array([0, 0 , 0.52, 0.89, 1.12, 1.26, 1.36, 1.41,
1.46, 1.49, 1.52, 1.54, 1.56, 1.58, 1.59])
A = np.array([[1, 5, 1/3],
[1/5, 1,1/7],
[3,7, 1]])
n = len(A)
B_z = []
C_z = []
for i in range(0,n):
for j in range(0,n):
B_z.append(A[i,j])
C_z.append(A[j,i])
D_z = np.ones([len(B_z), len(B_z)])
main(A,B_z,C_z,D_z,R_I,n)

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值