求矩陣A的傳遞閉包t(A)

2021-09-06 17:08:14 字數 1293 閱讀 1129

#!/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很輕鬆的就搞定了!

求對稱閉包以及傳遞閉包

include include define n 50 求對稱閉包以及傳遞閉包 intmain else break int r n n 關係矩陣 for int i 0 iprintf 請輸入關係的個數 n int k 0 scanf d k printf 請輸入具有關係的兩個數以,分隔,回車輸入...

floyd求傳遞閉包

n頭牛比賽,m種比賽結果,最後問你一共有多少頭牛的排名被確定了,其中如果a戰勝b,b戰勝c,則也可以說a戰勝c,即可以傳遞勝負。求能確定排名的牛的數目。思路 如果一頭牛被x頭牛打敗,打敗y頭牛,且x y n 1,則我們容易知道這頭牛的排名就被確定了,所以我們只要將任何兩頭牛的勝負關係確定了,在遍歷所...

Floyd演算法 求傳遞閉包

題目讓確定有幾個人的位置是確定的,如果乙個點有x個點能到達此點,從該點出發能到達y個點,若x y n 1 x y n 1 x y n 1,則該點的位置是確定的。用floyd演算法算出每兩個點之間的距離,最後統計時,若dis a b dis a b dis a b 之間無路且dis b a dis b...