模糊数学Python(一)模糊运算

代码

import numpy as np

def istype(a):
	"""
	判断模糊矩阵a的类型
	"""
	a=np.array(a)
	s = np.eye(a.shape[0],a.shape[1])
	if (a>=s).all() and (a.T == a).all():
		return "模糊自反矩阵、模糊对称矩阵"
	elif (a>=s).all():
		return "模糊自反矩阵"
	elif (a.T == a).all():
		return "模糊对称矩阵"
	elif (hecheng(a,a) <= a).all():
		return "模糊传递矩阵"
	else:
		return "一般模糊矩阵"
	
def isequal(a,b):
	"""
	判断模糊矩阵a,b是否相等
	"""
	a,b = np.array(a),np.array(b)
	if (a==b).all():
		print("相等")
	else:
		print("不相等")

def islower(a,b):
	"""
	判断模糊矩阵a是否小于等于模糊矩阵b
	"""
	a,b = np.array(a),np.array(b)
	if (a <= b).all():
		return "小于等于"
	else:
		return "不是小于等于"

def bing(a,b):
	"""
	求模糊矩阵a和模糊矩阵b的并
	"""
	a,b = np.array(a),np.array(b)
	c=np.fmax(a,b) # 元素级的最大值计算
	return c

def jiao(a,b):
	"""
	求模糊矩阵a和模糊矩阵b的交
	"""
	a,b = np.array(a),np.array(b)
	c=np.fmin(a,b) # 元素级的最小值计算
	return c

def bu(a):
	"""
	求模糊矩阵a的补
	"""
	a = np.array(a)
	c=1-a # 元素级的计算
	return c

def hecheng(a,b):
	"""
	求模糊是矩阵a和模糊矩阵b的合成
	"""
	a,b = np.array(a),np.array(b)
	if a.shape[1] == b.shape[0]:
		c=np.zeros_like(a.dot(b))
		for i in range(a.shape[0]): # 遍历a的行元素
			for j in range(b.shape[1]): # 遍历b的列元素
				empty=[]
				for k in range(a.shape[1]):
					empty.append(min(a[i,k],b[k,j])) # 行列元素比小
				c[i,j]=max(empty) # 比小结果取大
		return c
	else:
		print("输入矩阵不能做合成运算!\n请检查矩阵的维度!")

def bibao(a):
	"""
	求模糊矩阵a的闭包
	"""
	a = np.array(a)
	if a.shape[0] == a.shape[1]:
		c=a
		while True:
			m=c
			c=hecheng(hecheng(a,c),hecheng(a,c))
			if (c==m).all():
				return c
				break
			else:
				continue
	else:
		print("输入矩阵不能做闭包运算!\n请检查矩阵的维度!")

def main():
	"""
	测试代码
	"""
	r=[
	[1, 0.54, 0.62, 0.63,0.24],
	[0.54, 1, 0.55, 0.7, 0.53],
	[0.62, 0.55, 1, 0.56, 0.37],
	[0.63, 0.7, 0.56, 1, 0.38],
	[0.24, 0.53, 0.37, 0.38, 1]
    ]
	print("模糊矩阵\n",np.array(r))
	print("模糊传递闭包\n",bibao(r))

if __name__ == "__main__":
	main()
	

猜你喜欢

转载自blog.csdn.net/weixin_40775077/article/details/84345460