求矩阵A的传递闭包t(A)
#!/usr/bin/python
#-*- coding: utf-8 -*-
#__author__="Ziyuan Wang"
import numpy as np
def bibao(a1,a2):
m=int(a1.size**0.5)#这里只可以计算方阵,
b = np.ones((m,m))
for j in range(m):
for i in range(m):
min_que=np.minimum(a1[j,:],a2[:,i]) #行和列对应值取小
b[j,i]=min_que.max()# 对生成的新向量取大
print(b)
return b
a = np.array([[1,0.6,0.5,0.7,0],[0.4,1,0.7,0.9,0.2],[0.6,0.6,1,0.5,0],[0.5,0.7,0.9,1,0.6],[0.8,0,0.7,0.9,1]])
# a = np.array([[0.3,1.0],[0.8,0.1]])
# a = np.array([[0.9,0.5,0.3],[0.2,0.4,0.95],[0.8,0.1,0.25]])
# a=np.array([[1,0.3,0.1,0.4,0.8,0.7,0.6],[0.3,1,0.5,0.9,0.6,0.8,0.9],[0.1,0.5,1,0.7,0.6,0.2,0.1],[0.4,0.9,0.7,1,0.5,0.9,0.4],[0.8,0.6,0.6,0.5,1,0.7,0.5],[0.7,0.8,0.5,0.9,0.7,1,0.4],[0.6,0.9,0.1,0.4,0.5,0.4,1]])
print('R: ')
print(a)
print("\nR^2: ")
a1=bibao(a,a) #R^2
print("\nR^3")
a2=bibao(a1,a) #R^3
print("\nR^4")
a3=bibao(a1,a1) #R^4
print("\n R^5")
a4=bibao(a3,a) #R^5
注1:在模糊数学(模糊理论基础)中, 关系 是最重要的一部分内容,也是整个课程的核心,fuzzy矩阵的闭包就是关系的一种,即对应的行和列对应元素,先取小,再对新的向量取大。
注2:在实际做编程时,一开始打算用的matlab,考虑到它本身就是基于矩阵的一款数学软件,但是最后在行和列对应取小---做循环时,遇到很大困难,查资料发现,numpy中已经封装好了,这个方法,直接就可以用了,随用Python很轻松的就搞定了!
————————————————
版权声明:本文为CSDN博主「桔子66」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_36501722/article/details/85644463