(离散数学)输入一个关系矩阵,用C语言编程求出它的自反闭包,对称闭包和传递闭包

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(离散数学)输入一个关系矩阵,用C语言编程求出它的自反闭包,对称闭包和传递闭包相关的知识,希望对你有一定的参考价值。

其中传递闭包要求用两种方法实现
不好意思小弟刚进来,分不够,还请哪位高手帮个忙

参考技术A 我用面向对象写的 自己改一下

#include<iostream.h>
template<class T>
void Warshall( T *a , int m , int n )

int i = 0,j = 0;
for( i = 0 ; i < n ; i++ )

for( j = 0 ; j < m ; j++ )

if( a[j][i] == 1 )

int k = 0;
for( int x = 0 ; x < n ; x++ )

a[j][k] = a[j][k] || a[i][k];
k++;





for( i = 0 ; i < m ; i++ )

for( j = 0 ; j < n ; j++ )

cout << a[i][j] << '\t';

cout<<endl;


void main()

int ai[4][4] = 0,1,0,0 , 1,0,1,0 , 0,0,0,1 , 0,0,0,0 ;
Warshall(ai,4,4);

数学基础系列----拉格朗日乘子法行列式矩阵基础

一、拉格朗日乘子法

1、通俗解释

给个函数:$Z=f(x,y)$如何求出它的极值点呢?有了前面的知识,简单来说直接求它的偏导不就OK了吗?

  技术图片

那现在假如说对这个函数加上一个约束条件呢?也就说现在假如有这样一个约束条件$2xy+2yz+2zx=S$,那该怎么样求出函数$Z(x,y,z)=xyz$的最大值呢?

在这样的约束条件下,到底什么点是我们想要的?

假如说我们现在有这样一座山峰,这座山峰的高度是$f(x,y)$,其中有一条曲线是$g(x,y) =C$。曲线镶嵌在山上,我们该如何找到曲线的最低点呢?

  技术图片

为了找到曲线上的最低点,首先就从最低的等高线(0那条)开始往上数。数到第三条,等高线终于和曲线有交点了(如上图所示)。因为比这条等高线低的地方都不在约束范围内,所以这肯定是这条约束曲线的最低点了。

而且约束曲线在这里不可能和等高线相交,一定是相切。因为如果是相交的话,如下图所示,那么曲线一定会有一部分在B区域,但是B区域比等高线低,这是不可能的。

  技术图片

两条曲线相切,意味着它们在这点的法线平行,也就是法向量只差一个任意的常数乘子(取为$-lambda $):$igtriangledown f(x,y)=-lambda igtriangledown g(x,y)$,其中$igtriangledown$表示偏导。

我们可以把上式的右边移到左边,并把常数移进微分算子然后得到:$igtriangledown f(x,y)+lambda igtriangledown g(x,y)=0$

把这个式子重新解释一下,这个就是$f(x,y)+lambda g(x,y)$无约束情况下极值点的必要条件。简单来说,就是把带有约束条件下的求极值转化为无约束条件下的求极值。

2、使用方法

然后我们看下拉格朗日乘子法具体的使用方法。求解函数:$z=f(x,y)$在条件$varphi (x,y)=0$条件下的极值。

既然求极值,那就是令其偏导等于0。

构造函数$F(x,y)=f(x,y)+lambda varphi(x,y)$,其中$lambda$为拉格朗日乘数。如此,我们就可以得到下面的这个表达式

  技术图片

这样通过上面的方程组求解出来的(X,Y)就是极值点坐标。

拉格朗日乘子法一般用于自变量多于两个的条件下。

求解函数:$u=f(x,y,z,t) $在条件$varphi (x,y,z,t)=0,psi (x,y,z,t)=0$下的极值。

同理构造函数:$F(x,y,z,t)=f(x,y,z,t) +lambda _{1}varphi (x,y,z,t)+lambda _{2}psi (x,y,z,t)$。其中$lambda _{1},lambda _{2}$均为拉格朗日乘数,同样通过偏导为0以及约束条件求解极值点坐标。

3、例题

求函数$u=x^{3}y^{2}z$在约束条件x+y+z=12下的最大值。

同理构造函数:$F(x,y,z)=x^{3}y^{2}z+lambda (x+y+z-12)$。然后分别求偏导,得到如下表达式。

$left{egin{matrix}
F_{x}‘=3x^{2}y^{2}z+lambda =0
F_{y}‘=2x^{3}yz+lambda =0
F_{z}‘=x^{3}y^{2}+lambda =0
x+y+z=12
end{matrix} ight.$

求解上面的方程组可以得到唯一驻点(6,4,2),这样的话最大值$u_{max}=6^{3}cdot 4^{2}cdot 2=6912$。

二、行列式

1、二阶行列式

首先来看看二元线性方程组的求解:$left{egin{matrix}a_{11}x_{1}+a_{12}x_{2}=b_{1} a_{21}x_{1}+a_{22}x_{2}=b_{2}end{matrix} ight.$

对上面这个方程组求解可得:$egin{matrix}(a_{11}a_{22}-a_{12}a_{21})x_{1}=b_{1}a_{22}-a_{12}b_{2} (a_{11}a_{22}-a_{12}a_{21})x_{2}=a_{11}b_{2}-b_{1}a_{21}end{matrix}$。

当$a_{11}a_{22}-a_{12}a_{21} eq 0$时方程组有唯一解:$x_{1}=frac{b_{1}a_{22}-a_{12}b_{2}}{a_{11}a_{22}-a_{12}a_{21}},x_{2}=frac{a_{11}b_{2}-b_{1}a_{21}}{a_{11}a_{22}-a_{12}a_{21}}$。

根据上面的解看起来好像有些规律呀

  技术图片

表达式$a_{11}a_{22}-a_{12}a_{21}$即为二阶行列式

$D=egin{vmatrix}a_{11} & a_{12} a_{21} & a_{22}end{vmatrix}=a_{11}a_{22}-a_{12}a_{21}$。其中aij(i=1,2;j=1,2)称为元素。i代表行标,j代表列标。

2、三阶行列式

二阶看起来挺容易就算出来了,三阶的呢?

  技术图片

3、例题

计算$D=egin{vmatrix}1 & 2 & -4 -2 & 2 & 1 -3 & 4 & -2end{vmatrix}$的行列式。

  技术图片

三、矩阵

1、何为矩阵

某航空公司在A,B,C,D四城市之间开辟了若干航线,如图所示表示了四城市间的航班图,如果从A到B有航班,则用带箭头的线连接 A 与B。

  技术图片

如果说我们用表格的形式来表示这种关系并且用1和0来表示城市之间是否联通。

  技术图片

何为矩阵:输入的数据就是矩阵,对数据做任何的操作都是矩阵的操作了。

  技术图片

矩阵的组成:矩阵是由行和列来组成的:

  技术图片

矩阵的特殊形式:行向量与列向量。$egin{pmatrix}a_{1} & a_{2} & cdots  & a_{n}end{pmatrix}$,$egin{pmatrix}a_{1} a_{2} vdots a_{n}end{pmatrix}$

2、行列式与矩阵的区别

  技术图片

方阵:行和列的数量一样就是方阵了,一般叫做n阶方阵。

  技术图片

下面介绍几种特殊的矩阵

  技术图片

同型矩阵和矩阵相等是一个事吗?

两个矩阵行列数相同的时候称为同型矩阵,例如$egin{pmatrix}1 & 2 2 & 3end{pmatrix}$与$egin{pmatrix}2 & 4 1 & 2end{pmatrix}$

在同型的前提下,并且各个元素相等,这就是矩阵相等了:

  技术图片

3、矩阵的基本运算

假如说有两个$M imes N$的矩阵$A=(a_{ij}),B=(b_{ij})$:

  技术图片

矩阵乘法的运算规律:

  技术图片

注意:矩阵的乘法是没有交换律的 

以上是关于(离散数学)输入一个关系矩阵,用C语言编程求出它的自反闭包,对称闭包和传递闭包的主要内容,如果未能解决你的问题,请参考以下文章

离散数学中传递闭包怎么求 通俗一点

编程实现:输入一个 n*n 的矩阵,求出两条对角线元素值之和。

用c语言编程:输入一个四位数,求出它的个位、十位、百位、千位

离散数学中传递闭包怎么求 通俗一点

Warshall算法求传递闭包,Python语言~

Warshall算法求传递闭包