精华内容
下载资源
问答
  • 传递闭包(用关系矩阵求传递闭包怎么求)
    千次阅读
    2021-04-23 11:54:44

    相信很多人对于传递闭包(用关系矩阵求传递闭包怎么求)并不是非常的了解,因此小编在这里为您详解的讲解一下相关信息!

    方法:warshall法,即运行n次,每次使得MR[n][i],MR[i][n]都为1时使得MR[i][j]为1,否则还是为MR[i][j]。传递闭包的计算过程一般可以用Warshell算法描述: For 每个节点i .

    传递闭包的本质在于以最小的幅度提高模糊相似矩阵中的元素,以达到传递性,这样传递闭包对模糊相似矩阵就产生了传递偏差。

    传递闭包、即在数学中,在集合 X 上的二元关系 R 的传递闭包是包含 R 的 X 上的最小的传递关系。

    说明:以关系矩阵形式计算传递闭包: #include"stdio.h" #define N 1000 main() { int i,j,a[N][N],b[N][N],c[N][N],s=0,k,e[N][N],m,n; printf("请输入你的关系矩阵的阶n(n,.

    #define n 10; main() { int i,j; int a[5][5]; int sum=0; for(i=0;i<5;i++) for(j=0;j<5;j++) scanf("%d",&a[i][j]); for(i=0;i<5;i++) for(j=0;j<5;j++) if(i==j||(i+j==10))//i==j是判断是否主对角.

    r(r)= {(a,b),(a,c),(a,d),(b,c),(b,d),(e,d),(a,a),(b,b),(c,c),(d,d),(e,e)}s(r)={(a,b),(a,c),(a,d),(b,c),(b,d),(e,d),(b,a),(c,a),(d,a),(c,b),(d,b),(d,e)}

    r^2=反射矩阵: 对称的,对角线上的元素都是1,∴r^2=(r^2)^-1 = (r^2)^t (∵r^2=反射矩阵=逆矩阵=转置矩阵)r^4=(r^2)?(r^2)=(r^2)^t ?(r^2)^-1=i (i是单位矩阵(identity matrix)).

    我自己写的,绝对可以#include"stdio.h"#define N 1000 main() { int i,j,a[N][N],b[N][N],c[N][N],s=0,k,e[N][N],m,n; printf("请输入你的关系矩阵的阶n(n<=1000):\n"); .

    设集合a={a,b,c,d,e},集合b={c,d,f,g},a∩b={c,d},a∪b={a,b,c,d,e,f,g}。详细过程!!!!您好,很高兴为您解答,skyhunter002为您答疑解惑如果本题有什么不明白可以追问.

    输入一个关系的关系矩阵,计算其传递闭包,使用Warshall算法。 输出传递闭.

    for (int k = 0; k < N; ++k) { for (int i = 0; i < N; ++i) { for (int j = 0; j < N; ++j) { if(graph[i][k] && graph[k][j]) { graph[i][j] = true; } } } }

    这是因为不等关系,本来就是全域关系,集合中的元素与另一元素必然不相等(所以存在不等关系)。传递闭包显然就是关系自身。

    看看我的这个程序错在哪里啊!谢谢大虾啦! #include"stdio.h"main(){ int i,j。

    首先,矩阵的并运算不是很对,执行结果好象是第二条赋值语句,没有实现并的概念. 再次,函数调用,传递数组的首地址才对,而不是数组某一个元素;最后,子函数定.

    这涉及到矩阵的操作。 比如a=[3 6 9],b =[1 2 3] 要实现对应的元素相除,用这个命令“a./b”,即点除。点除就实现了你要的功能。 扩展:matlab是基于矩阵操作的,对元.

    求网络流有很多算法,这几天学习了两种,记录一下EK算法。首先是网络流中的一些定义:V表示整个图中的所有结点的集合.E表示整个图中所有边的集合.G = (V,E) ,表.

    用行列遍历关系矩阵,判断,,则有关系直到再次递归无新的关系,程序停止。

    从上到下遍历每一列,遇到第j行第i列为1的话,把第i行加到第j行上即可 C代码如下:void warshell(int (*p)[20],int n) { if(n>20) printf("错误:行数(列数)必须小于20"); else {.

    传递闭包,最简单的技术是采用 【弗洛伊德算法】 Floyd-Warshall算法(Floyd-Warshall algorithm)是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权.

    传递闭包是包含 R 的 X 上的最小的传递关系 t(R) = R∪R^2∪R^3∪..∪R^n

    R3不会直接等于R 要再算R2*R

    可以的,这两者是等价的。http://jingyan.baidu.com/article/ea24bc399a9cbcda63b3316d.html

    更多相关内容
  • 一、闭包法 、 二、闭包示例 ( 关系图角度 ) 、 三、闭包示例 ( 关系矩阵角度 ) 、 四、闭包运算与关系性质 、 五、闭包复合运算 、





    一、闭包求法



    R R R 关系是 A A A 集合上的二元关系 , R ⊆ A R \subseteq A RA , A A A 集合不为空集 , A ≠ ∅ A \not= \varnothing A=


    求自反闭包 : r ( R ) = R ∪ I A r(R) = R \cup I_A r(R)=RIA , 给每个顶点添加环 ;

    • 如果 R R R 关系是自反的 , 当且仅当 , I A ⊆ R I_A \subseteq R IAR

    求对称闭包 : s ( R ) = R ∪ R − 1 s(R) = R \cup R^{-1} s(R)=RR1

    • 原来 没有有向边 ( 有序对 ) , 自然也没有对应的逆 , 此时不添加边
    • 原来 有一条有向边 ( 有序对 ) , 再添加一个反向的有向边 , 组成 关系图中的 顶点间的 双向有向边
    • 原来 有两条有向边 ( 有序对 ) , 此时就不用添加其它边
    • 如果 R R R 关系是对称的 , 当且仅当 , R = R − 1 R = R^{-1} R=R1

    求传递闭包 : t ( R ) = R ∪ R 2 ∪ R 3 ∪ ⋯ t(R) = R \cup R^2 \cup R^3 \cup \cdots t(R)=RR2R3

    R R R 关系所有的幂运算值并起来 , 就是其传递闭包 , R R R 关系的 1 1 1 次幂 , R R R 关系的 2 2 2 次幂 , R R R 关系的 3 3 3 次幂 , ⋯ \cdots , R R R 关系的 n n n 次幂 , 并起来 , 就是其传递闭包 ;

    如果 A A A 是有穷集 , 其关系也是有穷的 , 求出其所有的 n n n 次幂 , 不用求出很多幂运算 , 因为关系的幂运算后面都是循环的 , 求出已知的所有 n n n 次幂 取 并集即可 ;

    如果 R R R 关系是传递的 , 当且仅当 , R 2 ⊆ R R^2 \subseteq R R2R





    二、求闭包示例 ( 关系图角度 )



    集合 A = { a , b , c , d } A = \{ a, b, c , d \} A={a,b,c,d}

    关系 R = { < a , b > , < b , a > , < b , c > , < c , d > } R = \{ <a,b> , <b,a> , <b,c> , <c,d> \} R={<a,b>,<b,a>,<b,c>,<c,d>}

    求关系 R R R 的自反闭包 r ( R ) r(R) r(R) , 对称闭包 s ( R ) s(R) s(R) , 传递闭包 t ( R ) t(R) t(R)



    在这里插入图片描述

    求自反闭包 : 就是给每个顶点加上环 :

    在这里插入图片描述


    求对称闭包 :顶点间 单向边改成双向边 , 不管 顶点间双向边 和 顶点间没有边 的情况 ;

    在这里插入图片描述

    求传递闭包 : 将能到的点直接连起来 ;

    • a 可以到 b , 路径 a -> b ; a 可以到 c , 路径是 a -> b -> c ; a 可以到 d , 路径是 a -> b -> c -> d ; 因此添加 a 到 c , d 的有向边 ;
    • b 可以到 a , 路径 b -> a ; b 可以到 c , 路径是 b -> c ; b 可以到 d , 路径是 b -> c -> d ; 因此添加 b 到 d 的有向边 ;
    • c 可以到 d , 路径 c -> d ; 没有可连接的边 ;
    • d 哪都到不了 , 没有可连接的边 ;
    • 另外出现双向边时 , 两个顶点必须加环 ;

    在这里插入图片描述





    三、求闭包示例 ( 关系矩阵角度 )



    关系 R = { < a , b > , < b , a > , < b , c > , < c , d > } R = \{ <a, b> , <b,a> , <b,c> , <c,d> \} R={<a,b>,<b,a>,<b,c>,<c,d>}

    使用关系矩阵方法求其 自反闭包 , 对称闭包 , 传递闭包 ;


    将上述关系写成矩阵形式为 :

    M ( R ) = [ 0 1 0 0 1 0 1 0 0 0 0 1 0 0 0 0 ] M(R) = \begin{bmatrix} 0 & 1 & 0 & 0 \\\\ 1 & 0 & 1 & 0 \\\\ 0 & 0 & 0 & 1 \\\\ 0 & 0 & 0 & 0 \end{bmatrix} M(R)=0100100001000010


    自反闭包 : 将主对角线值 , 全部改成 1 1 1 , 左上角到右下角为主对角线 ;

    M ( r ( R ) ) = [ 1 1 0 0 1 1 1 0 0 0 1 1 0 0 0 1 ] M(r(R)) = \begin{bmatrix} 1 & 1 & 0 & 0 \\\\ 1 & 1 & 1 & 0 \\\\ 0 & 0 & 1 & 1 \\\\ 0 & 0 & 0 & 1 \end{bmatrix} M(r(R))=1100110001100011


    对称闭包 : 主对角线两端要对称 , 以对角线为基准 , 使对角线两边的值对称 ;

    M ( s ( R ) ) = [ 0 1 0 0 1 0 1 0 0 1 0 1 0 0 1 0 ] M(s(R)) = \begin{bmatrix} 0 & 1 & 0 & 0 \\\\ 1 & 0 & 1 & 0 \\\\ 0 & 1 & 0 & 1 \\\\ 0 & 0 & 1 & 0 \end{bmatrix} M(s(R))=0100101001010010


    传递闭包 : 求该关系矩阵的 二次幂 , 三次幂 , 四次幂 , ⋯ \cdots , 直到出现相同的循环的值为止 ;

    将上述所有的不同的 矩阵幂运算 进行逻辑相加 ( 或 ) 操作 , 就是其传递闭包对应的矩阵 , 计算机算法适合使用该方法 , 如果人计算 , 还是关系图比较形象 ;

    参考 : 【集合论】关系表示 ( 关系矩阵 | 关系矩阵示例 | 关系矩阵性质 | 关系矩阵运算 | 关系图 | 关系图示例 | 关系表示相关性质 ) 四、关系矩阵运算

    注意逆序合成

    M ( R 2 ) = M ( R ∘ R ) = M ( R ) ∙ M ( R ) = [ 0 1 0 0 1 0 1 0 0 0 0 1 0 0 0 0 ] ∙ [ 0 1 0 0 1 0 1 0 0 0 0 1 0 0 0 0 ] = [ 1 0 1 0 0 1 0 1 0 0 0 0 0 0 0 0 ] M(R^2) = M(R \circ R) = M(R) \bullet M(R) =\begin{bmatrix} 0 & 1 & 0 & 0 \\\\ 1 & 0 & 1 & 0 \\\\ 0 & 0 & 0 & 1 \\\\ 0 & 0 & 0 & 0 \end{bmatrix} \bullet \begin{bmatrix} 0 & 1 & 0 & 0 \\\\ 1 & 0 & 1 & 0 \\\\ 0 & 0 & 0 & 1 \\\\ 0 & 0 & 0 & 0 \end{bmatrix} = \begin{bmatrix} 1 & 0 & 1 & 0 \\\\ 0 & 1 & 0 & 1 \\\\ 0 & 0 & 0 & 0 \\\\ 0 & 0 & 0 & 0 \end{bmatrix} M(R2)=M(RR)=M(R)M(R)=01001000010000100100100001000010=1000010010000100

    M ( R 3 ) = M ( R 2 ∘ R ) = M ( R ) ∙ M ( R 2 ) = [ 0 1 0 0 1 0 1 0 0 0 0 1 0 0 0 0 ] ∙ [ 1 0 1 0 0 1 0 1 0 0 0 0 0 0 0 0 ] = [ 0 1 0 1 1 0 1 0 0 0 0 0 0 0 0 0 ] M(R^3) = M(R^2 \circ R) = M(R) \bullet M(R^2) = \begin{bmatrix} 0 & 1 & 0 & 0 \\\\ 1 & 0 & 1 & 0 \\\\ 0 & 0 & 0 & 1 \\\\ 0 & 0 & 0 & 0 \end{bmatrix} \bullet \begin{bmatrix} 1 & 0 & 1 & 0 \\\\ 0 & 1 & 0 & 1 \\\\ 0 & 0 & 0 & 0 \\\\ 0 & 0 & 0 & 0 \end{bmatrix} = \begin{bmatrix} 0 & 1 & 0 & 1 \\\\ 1 & 0 & 1 & 0 \\\\ 0 & 0 & 0 & 0 \\\\ 0 & 0 & 0 & 0 \end{bmatrix} M(R3)=M(R2R)=M(R)M(R2)=01001000010000101000010010000100=0100100001001000

    M ( R 4 ) = M ( R 3 ∘ R ) = M ( R ) ∙ M ( R 3 ) = [ 0 1 0 0 1 0 1 0 0 0 0 1 0 0 0 0 ] ∙ [ 0 1 0 1 1 0 1 0 0 0 0 0 0 0 0 0 ] = [ 1 0 1 0 0 1 0 1 0 0 0 0 0 0 0 0 ] = M ( R 2 ) M(R^4) = M(R^3 \circ R) = M(R) \bullet M(R^3) =\begin{bmatrix} 0 & 1 & 0 & 0 \\\\ 1 & 0 & 1 & 0 \\\\ 0 & 0 & 0 & 1 \\\\ 0 & 0 & 0 & 0 \end{bmatrix} \bullet \begin{bmatrix} 0 & 1 & 0 & 1 \\\\ 1 & 0 & 1 & 0 \\\\ 0 & 0 & 0 & 0 \\\\ 0 & 0 & 0 & 0 \end{bmatrix} = \begin{bmatrix} 1 & 0 & 1 & 0 \\\\ 0 & 1 & 0 & 1 \\\\ 0 & 0 & 0 & 0 \\\\ 0 & 0 & 0 & 0 \end{bmatrix} = M(R^2) M(R4)=M(R3R)=M(R)M(R3)=01001000010000100100100001001000=1000010010000100=M(R2)

    因此其 R 4 R^4 R4 之后的幂运算值 , 偶数次幂关系矩阵与 M ( R 2 ) M(R^2) M(R2) 值相同 , 奇数次幂关系矩阵与 M ( R 3 ) M(R^3) M(R3) 值相同 ;

    M ( t ( R ) ) = M ( R ) ∨ M ( R 2 ) ∨ M ( R 3 ) = [ 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 ] M(t(R)) = M(R) \lor M(R^2) \lor M(R^3) =\begin{bmatrix} 1 & 1 & 1 & 1 \\\\ 1 & 1 & 1 & 1 \\\\ 0 & 0 & 0 & 0 \\\\ 0 & 0 & 0 & 0 \end{bmatrix} M(t(R))=M(R)M(R2)M(R3)=1100110011001100





    四、闭包运算与关系性质



    自反性对称性传递性
    r ( R ) r(R) r(R) 1 1 1 ( 本身性质 ) 1 1 1 1 1 1
    r ( R ) r(R) r(R) 1 1 1 1 1 1 ( 本身性质 )
    r ( R ) r(R) r(R) 1 1 1 1 1 1 1 1 1 ( 本身性质 )

    上述表格中值为 1 1 1 , 说明原来存在该性质 , 求对应的 自反/对称/传递 闭包后 , 仍具有该性质 , 反之不具有该性质 ;


    表格第二行含义 : r ( R ) r(R) r(R) 对应的行 ;

    • 自反性 : 假如 R R R 原来是自反的 , 那么 r ( R ) r(R) r(R) 也是自反的 ;
    • 对称性 : 假如 R R R 原来是对称的 , 那么 r ( R ) r(R) r(R) 也是对称的 ; 求自反闭包 , 只是给顶点加环 , 不影响对称性 ;
    • 传递性 : 假如 R R R 原来是传递的 , 那么 r ( R ) r(R) r(R) 也是传递的 ; 求自反闭包 , 只是给顶点加环 , 不影响传递性 ;

    仅有一个特例 : 原来 R R R 是传递的 , 如果求对称闭包 , 其对称闭包的传递性就不存在了 ;



    表格第二列说明 ( 自反性 ) : 如果 R R R 关系是自反的 , 那么其 对称闭包 s ( R ) s(R) s(R)传递闭包 t ( R ) t(R) t(R) 也是自反的 ;

    R 自 反 ⇒ s ( R ) 和 t ( R ) 自 反 R 自反 \Rightarrow s(R) 和 t(R) 自反 Rs(R)t(R)


    表格第三列说明 ( 对称性 ) : 如果 R R R 关系是对称的 , 那么其 自反闭包 r ( R ) r(R) r(R)传递闭包 t ( R ) t(R) t(R) 也是对称的 ;

    R 对 称 ⇒ r ( R ) 和 t ( R ) 对 称 R 对称 \Rightarrow r(R) 和 t(R) 对称 Rr(R)t(R)


    表格第四列说明 ( 传递性 ) : 如果 R R R 关系是传递的 , 那么其 自反闭包 r ( R ) r(R) r(R) 也是传递的 ;

    R 传 递 ⇒ r ( R ) 传 递 R 传递 \Rightarrow r(R) 传递 Rr(R)





    五、闭包复合运算



    R R R 关系是 A A A 集合上的二元关系 , R ⊆ A R \subseteq A RA , A A A 集合不为空集 , A ≠ ∅ A \not= \varnothing A=


    1. r s ( R ) = s r ( R ) rs(R) = sr(R) rs(R)=sr(R) :

    • rs( R ) : 先求 R R R 关系的 自反闭包 , 然后再求自反闭包的 对称闭包
    • sr( R ) : 先求 R R R 关系的对称闭包 , 然后再求对称闭包的自反闭包
    • 上述两个闭包运算的 结果相同

    2. r t ( R ) = t r ( R ) rt(R) = tr(R) rt(R)=tr(R)

    • rt( R ) : 先求 R R R 关系的 自反闭包 , 然后再求自反闭包的 传递闭包
    • tr( R ) : 先求 R R R 关系的传递闭包 , 然后再求传递闭包的自反闭包
    • 上述两个闭包运算的 结果相同

    3. s t ( R ) ⊆ t s ( R ) st(R) \subseteq ts(R) st(R)ts(R)

    • st( R ) : 先求 R R R 关系的 对称闭包 , 然后再求对称闭包的 传递闭包
    • ts( R ) : 先求 R R R 关系的传递闭包 , 然后再求传递闭包的对称闭包
    • 上述两个闭包运算的结果 , t s ( R ) ts(R) ts(R) 关系 包含 s t ( R ) st(R) st(R) 关系 ;
    展开全文
  • 利用定义求解传递闭包的关系矩阵

    千次阅读 2020-06-26 11:43:05
    题目描述 给定有限集合上二元关系的关系矩阵,利用传递闭包的定义式(不是warshall算法)其传递闭包的关系矩阵。 源代码 #include #define N 100 int mult(int a[N][N],int b[N][N],int n,int c[N][N]) { int i,j...

    题目描述
    给定有限集合上二元关系的关系矩阵,利用传递闭包的定义式(不是warshall算法)求其传递闭包的关系矩阵。
    源代码

    #include<stdio.h>
    #define N 100
    int mult(int a[N][N],int b[N][N],int n,int c[N][N])
    {
    	int i,j,k;
    	for(i=0;i<n;i++)
    	{
    		for(j=0;j<n;j++)
    		{
    			c[i][j]=0;
    		}
    	}//每次接收矩阵乘积前先初始化为0 
    	for(i=0;i<n;i++)  
    	{   
    		for(j=0;j<n;j++)  
    		{    
    			for(k=0;k<n;k++)    
    			{     
    				c[i][j]+=a[i][k]*b[k][j];    
    			}   
    		}  
    	}
    }//定义实现矩阵乘法的函数 
    int main()
    {
    	int n,a[100][100]={0},i,j,k,b[100][100]={0},c[100][100]={0},d[100][100]={0};
    	scanf("%d",&n);
    	for(i=0;i<n;i++)
    	{
    		for(j=0;j<n;j++)
    		{
    			scanf("%d",&a[i][j]);
    			b[i][j]=a[i][j];
    			d[i][j]=a[i][j];
    		}
    	}//输入邻接矩阵,并用另一个矩阵暂时存储 
    	for(i=0;i<n-1;i++)
    	{
    		mult(a,b,n,c);
    		for(j=0;j<n;j++)
    		{
    			for(k=0;k<n;k++)
    			{
    				b[j][k]=c[j][k];//用c来接收前两个矩阵相乘的结果,并将其储存在b中以实现求解高次矩阵 
    				d[j][k]+=c[j][k];
    			}
    		}
    	} 
    	for(i=0;i<n;i++)
    	{
    		for(j=0;j<n;j++)
    		{
    			if(i==j) d[i][j]=1;
    			else if(i!=j&&d[i][j]>0)
    			{
    				d[i][j]=1;
    			}
    		}
    	}//将矩阵d转化为布尔矩阵 
    	for(i=0;i<n;i++)
    	{
    		for(j=0;j<n;j++)
    		{
    			printf("%d ",d[i][j]);
    		}
    		printf("\n");
    	}
    }
    
    展开全文
  • 一个计算矩阵求逆、矩阵转置和矩阵相乘的类。矩阵求逆包括初等变换法和伴随矩阵法。
  • Java一维数组实现R^2的关系矩阵M^2

    千次阅读 2018-04-14 21:28:45
    如利用R的n次幂R^n的定义R的各次幂,用关系矩阵来表示。作为一个编程爱好者,用代码去实现和简化数学问题,无疑是一件非常有趣的事情。况且矩阵在人口流动问题方面运用矩阵高次幂来预测未来的人口数,人口的发展...

    初衷

      上离散数学课时,老师说这门课和数据结构,算法有很大的联系,建议我们用代码去实现一些定理来简化计算。如利用R的n次幂R^n的定义求R的各次幂,用关系矩阵来表示。作为一个编程爱好者,用代码去实现和简化数学问题,无疑是一件非常有趣的事情。况且矩阵在人口流动问题方面运用矩阵高次幂来预测未来的人口数,人口的发展趋势,以及在经济生活、密码学等方面都有非常巧妙的运用。所以多写写代码对将来的学习还是有好处的。大笑

    需求

    Java一维数组实现求R^2的关系矩阵M^2。

    分析:

    1. 学会用Java一维数组实现MxP的矩阵A与PxN的矩阵B的乘法运算
    2. 在1的基础上用Java一维数组实现求R^2的关系矩阵M^2,只是在矩阵相乘相加时有小小的差别

    那我们来看看这两步是如何实现的吧!

    实现

    1、Java一维数组实现MxP的矩阵A与PxN的矩阵B的乘法运算

    不多说了,代码我都做了注释,直接上代码吧!相信你一定能够看得懂

    class Matrix {
    	
    	/**
    	 *  A为MxP的矩阵,B为PxN的矩阵,A与B的乘积得到MxN的矩阵C
    	 *	两个矩阵能够做乘法,需满足matrixA列和matrixB的行相等,在用一维数组实现矩阵相乘的过程中, 按照习惯,我们喜欢输入行值
    	 *  所以输入一个行值ARowM以确定矩阵A是ARowM行matrixA.length/ARowM列的矩阵,另一个则是
    	 *  matrixA.length/ARowM行 matrixB.length/(matrixA.length/ARowM)列的矩阵
    	 *	两矩阵相乘得到的便是ARowM行matrixB.length/(matrixA.length/ARowM)列的矩阵
    	 * @param matrixA 矩阵A
    	 * @param matrixB 矩阵B
    	 * @param ARowM
    	 * @return matrixC:矩阵A与B相乘得到的矩阵C
    	 */
    		public  double[] matrixMutip(double matrixA[], double matrixB[], int ARowM) {
    			//判断输入的行数是否能够将数组拆分(符合矩阵相乘的)矩阵
    			if(matrixA.length%ARowM!=0||matrixB.length%(matrixA.length/ARowM)!=0){
    				System.out.println("输入的行数无法将数组拆分为符合矩阵相乘的矩阵");
    				return null;
    			}
    			int AColP = matrixA.length / ARowM;// A的列
    			int BRowP = AColP;// A的列等于B的行
    			int BColN = matrixB.length / (matrixA.length / ARowM);// B的列
    			double[] matrixC = new double[ARowM * BColN];
    			for (int i = 0; i < ARowM; i++) { // 控制C的行,也就是A的行:得到所有行中C的所有列元素
    				for (int j = 0; j < BColN; j++) { // 控制C的列,也就是B的列:得到一行中C的所有列元素
    					double temp = 0;// temp用来临时存储矩阵相乘时:A行元素对应相乘B列元素相加得到的结果
    					for (int k = 0; k < BRowP; k++) {
    						 //计算A行元素对应相乘B列元素相加得到的结果,即得到C的列元素(单个列元素)
    						temp += matrixA[k + i * AColP] * matrixB[k * BColN + j];
    					}
    					matrixC[j * ARowM + i] = temp;
    					System.out.print(matrixC[j * ARowM + i] + "\t");
    				}
    				System.out.println();
    			}
    			return matrixC;
    		}
    }

    测试代码:

    public class Test {
    	public static void main(String[] args) {
    		new Matrix().matrixMutip(new double[] { 0, 1, 0, 0, 1, 0, 1, 0, 0,1,0,1 }, new double[] { 0, 1, 0, 0, 1, 0 }, 4);
    	}
    }
    

    测试结果:


     为了方便大家更好的理解,我特意给大家画了张图



    如果你看不懂上图,可能你的线性代数关于矩阵方面的内容就要加强了。偷笑

    2、在1的基础上用Java一维数组实现求R^2的关系矩阵M^2

            通过1,想必你已经会求矩阵的乘法了。那么如何来实现我们今天的目的呢?先别着急,2个矩阵M之积与普通矩阵乘法还是有些许差别的,差别是,其中的相加为逻辑加,即:1+1=1,1+0=1,0+1=1,0+0=0,(逻辑或)。那么说到这里,你一定已经知道下一步该怎么做了。没错,就是下面的得意

    class Matrix {
    	
    /**
     * 得到R^2的关系矩阵M^2
     * @param matrixdes
     * @return matrix:R^2的关系矩阵M^2
     */
    	public int[] relationalMatrixMultip(int matrixdes[]) {
    		if (Math.sqrt(matrixdes.length) != (int) Math.sqrt(matrixdes.length)) {
    			System.out.println("该一维数组不能拆分为方阵");
    			return null;
    		}
    		int matrix[] = new int[matrixdes.length];
    		int rowOrCol = (int) Math.sqrt(matrixdes.length);
    		for (int i = 0; i < rowOrCol; i++) {
    			// 控制行
    			for (int j = 0; j < rowOrCol; j++) {
    				// 控制列
    				int temp = 0;
    				for (int k = 0; k < rowOrCol; k++) {
    					// 计算行列相乘相加(逻辑加)的结果,只要第一次出现1,逻辑加(或)的结果就为1,跳出最近的for
    					if (matrixdes[k + i * rowOrCol] * matrixdes[k * rowOrCol + j] == 1) {
    						temp = 1;
    						break;
    					} else {
    						temp = 0;
    					}
    				}
    				matrix[i * rowOrCol + j] = temp;
    				System.out.print(matrix[i * rowOrCol + j] + "\t");
    			}
    			System.out.println();
    		}
    
    		return matrix;
    	}
    
    }

    补充分析:

          1、由于关系矩阵由0,1两个数码组成,结果亦是如此,所以用传入的数组和返回的结果用int类型的一维数组来存储

          2、由于关系矩阵为n阶方阵,关系矩阵为n阶方阵,即一维数组的个数为n^2个,所以第一步先将数组拆分为n行n列的矩阵,这里用rowOrCol变量来表示行或者列

           3、接下来的运算过程几乎和1中所讲的过程差不多,只是在第三个for循环做了逻辑加运算,然而在这里有一个小小的技巧,利用逻辑或的运算法则的特点,我们在这里并没有必要真正的做逻辑或运算,只需要判断行列相乘结果第一次出现1就ok了,这样可以减少计算机的运算次数,提高效率。

    测试代码:

    public class Test {
    	public static void main(String[] args) {
    		new Matrix().relationalMatrixMultip(new int[] { 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0 });
    	}
    }
    

    测试结果:


    总结:

            ok,以上就是实现过程了。在两次实现中,方法都有返回计算的结果和打印输出,打印输出是为了结果更加清晰,而返回结果是因为我们可以利用返回的结果,达到计算n阶矩阵相乘或者计算R^n的目的。

            在实现完之后,我看了其他博主写的,发现思路基本差不多。其他博主大多用的二维数组来实现两个矩阵相乘,并未提及到关系矩阵的求法。但实际上,两者求法在本质上没有太大的区别。不管是利用一维数组还是二维数组实现,我们只需要明白数学含义上的矩阵乘法法则,用循环控制和操作数组下标来加以实现就行了。

    展开全文
  • /*2.2 写一个程序,构造关系的自反和对称闭包 */ #include<stdio.h> #define N 5 int a[N][N]; void input( int n ) { int i,j; for( i=0;i<n;i++ ){ for( j=0;j<n;j++ ){ scanf("%d",&a[i]...
  • 已知子女与父母相似关系的模糊矩阵R和父母与祖父母相似关系的模糊矩阵S分别如下所示,子女与祖父母的相似关系模糊矩阵。word文档有具体描述。
  • 一、关系矩阵 、 二、关系矩阵示例 、 三、关系矩阵性质 、 四、关系矩阵运算 、 五、关系图 、 六、关系图示例 、 七、关系表示相关性质 、
  • 【控制理论】矩阵求逆引理推导及理解

    千次阅读 多人点赞 2018-12-23 13:18:57
    在递推最小二乘法估计问题中,因为每次推导运算时必须计算矩阵和的逆,这样做工作量非常大,为了简化,通常使用矩阵求逆引理来简化计算量。 矩阵求逆引理的结论及推导如下: 矩阵求逆引理要解决的问题是:...
  • 用Python将Excel网络关系(两列,id1,id2)转换为邻接矩阵。将数据更改为csv格式存储,通过遍历...经过实验,对网络节点关系数据进行重复处理,即1对应2节点,同样在数据中输入2对应1节点,以此可直接出邻接矩阵
  • 已知复杂网络的配对关系,通过matlab 复杂网络的邻接矩阵
  • 用Python将Excel网络关系(两列,id1,id2)转换为邻接矩阵(有向网络和无向网络均可),并画出网络图
  • 已知协方差矩阵求相关矩阵

    千次阅读 2021-04-20 14:00:13
    matlab中已知协方差矩阵怎样算相关系数?已知协方差矩阵,计算相关系数可以按图中的公式进行。 R就是相关系数矩阵,C为协方差矩阵。 >> a=rand(5,5) a = 0.9501 0.7621 0.6154 0.4057 0.0579 0.2311 0.4565 0....
  • 二元关系矩阵和图表示

    千次阅读 2017-09-04 00:18:21
    两个事物之间的关系称之为二元关系。在数学上,二元关系指的是这样的一个集合S,它的所有元素都为二元有序对。它反映的是有序对中第一个元素组成的集合与第二个元素组成的集合之间的关系。举个例子,集合S={,} 就...
  • 该代码是通过C语言编程实现,主要是为了快速求解邻接矩阵对应的可达矩阵,邻接矩阵和可达矩阵是系统工程中表征系统元素之间关系的重要工具之一
  • C++写矩阵求

    万次阅读 2015-11-01 21:28:52
    systemvue是一款专用的雷达,通信仿真软件,其底层的封装的模块库是用c++写的。 听博士哥哥说该软件目前处于推广阶段,由于目前模块库匮乏,所以比较...最近接到博士哥哥的一个任务,让我写一个矩阵求逆的模块,
  • WarShall算法求矩阵传递闭包关系

    千次阅读 2020-06-15 22:19:13
    给了你一个矩阵,你如何他的传递闭包呢? //出如下矩阵的传递闭包 1 0 1 0 0 1 1 1 0 0 0 0 0 0 1 1 0 0 1 0 0 0 0 0 0 利用WarShall算法求解过程如下: 从第一列元素,开始看,哪个为1,可以看出,<1,1>...
  • 目录 自反性与反自反性的判断 对称性与反对称性的判断 传递性的判断 自反性与反自反性的判断 关系R是自反的,当且仅当其关系矩阵的主对角线上元素都为1;关系R是反自反的,当且仅当其关系矩阵的主对角线上元素都为0...
  • 已知不同坐标系的多个坐标点的坐标,两个坐标系的转换矩阵,是matlab写的程序,三维坐标的。 做机器人视觉导航时用到的这个转换。
  • 离散-关系矩阵乘法运算

    千次阅读 2021-06-01 09:02:50
    第一个矩阵中第一行的各元素与第二个矩阵中第一列的各元素对应之积的和,作为乘积矩阵的第一行第一列元素,以此类推。 如果运算结果有大于1的数,则通通换为1
  • 集合论中关系矩阵的布尔乘法运算与优化 一、关系矩阵布尔乘法运算法则:   矩阵的布尔乘法与普通的矩阵乘法的计算过程是一样的,只是使用数理逻辑中的合取替代普通的乘法,使用析取替代普通的加法。下图的运算公式...
  • 第五题 t( R) R={,,,,} R的关系矩阵 M=[0100000101000100010000001] M=\begin{bmatrix} 0&1&0&0&0\\ 0&0&1&0&1\\ 0&0&0&1&0\\ 0&0&1&0&0\\ 0&0&0&0&1 \end{bmatrix} M=⎣⎢⎢⎢⎢⎡​00000​10000​01010​00100​...
  • 一次输入一个关系矩阵,每一行两个相邻元素之间用一个空格隔开,输入元素的行与列分别对应关系矩阵的行与列。关系的基数小于12。 输出 输出该关系的传递闭包所对应的关系矩阵。 友情提示:可以使用while (scanf("%d...
  • 矩阵求

    万次阅读 多人点赞 2019-05-13 17:20:08
    矩阵的秩怎么计算,这个问题一下子我居然不知道怎么下手。。虽然本科的时候学过线性代数,但是好久不用,很多东西都忘了。。今天略微梳理一下吧。 最简单直观的方法: 化成行最简形(或行阶梯形),然后数一下非零...
  • 相似矩阵:在线性代数中,相似矩阵指的是存在相似关系矩阵,设A、B为n阶矩阵,如果有n阶可逆矩阵P存在,使得P^(-1)AP=B。可逆矩阵:存在n阶矩阵A和n阶矩阵B,使得矩阵A、B的乘积为单位矩阵,则称A为可逆矩阵,B为A...
  • 从给定的关系矩阵来断判关系 R是否为自反是很容易的。 若M(R的关系矩阵)的主对角线元素均为 1,则 R是自反关系;若 M(R的关系矩阵)的主对角 线元素均为 0,则R是反自反关系;若M(R的关系矩阵)的主对角线元素既...
  • 数值分析:矩阵求逆-奇异性、条件数

    万次阅读 多人点赞 2016-08-18 15:59:06
    http://blog.csdn.net/pipisorry/article/details/52241141本blog主要内容有:矩阵的奇异性、条件数与病态矩阵、矩阵求逆。奇异矩阵和非奇异矩阵singular matrix&nonsingular matrix概念和定义若n阶矩阵A的行列式不...
  • 模糊关系与模糊矩阵及其运算。
  • 如何用MATLAB矩阵

    千次阅读 2021-04-18 05:57:23
    如何用MATLAB矩阵如果英文好呢,自己看目录不好还是先看中文的教材,对matlab的框架和功能有了一定的了解后,自己也就看的懂帮助里面的内容了,以后不懂再自己查帮助矩阵一般有2种方法:1、伴随矩阵法。...
  • 离散数学实验四 关系闭包计算

    千次阅读 多人点赞 2020-06-13 22:17:31
    熟悉Warshall算法,掌握求关系的自反闭包、对称闭包和传递闭包的方法。 二、实验内容 定义1 设R是A上的二元关系,R的自反(对称、传递)闭包是关系R1,则 ① R1是自反的(对称的、传递的) ② RR1 ③对任何自反的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 269,377
精华内容 107,750
关键字:

关系矩阵怎么求