矩阵&&高斯消元

矩阵运算:

\(A\times B\)叫做\(A\)左乘\(B\),或者\(B\)右乘\(A\)

行列式性质:

\(1.\)交换矩阵的两行(列),行列式取相反数。
\(2.\)某一行元素都\(\times k\),行列式值也\(\times k\)
\(3.\)某一行加到另一行上,行列式值不变。
\(4.\)矩阵某两行(列)元素分别成比例,行列式值为\(0\)
\(5.A+B=C\Rightarrow|A|+|B|=|C|\)
\(6.\)矩阵与转置矩阵行列式相等。
对于方阵而言:
\(7.|A^\tau|=|A|\)
\(8.|AB|=|A||B|\)

矩阵的转置:

\(1.(A^\tau)^\tau=A\)
\(2.(A+B)^\tau=A^\tau+B^\tau\)
\(3.(\lambda A)^\tau=\lambda A^\tau\)
\(4.(AB)^\tau=B^\tau A^\tau\)

余子式:

\(n\)阶矩阵的余子式\(M_{ij}=\)矩阵\(A\)去掉第\(i\)行第\(j\)列的\(n-1\)阶矩阵行列式。
代数余子式\(A_{ij}=(-1)^{i+j}M_{ij}\)

伴随矩阵:

矩阵\(A^*\)的各项元素\(a_{ij}=\)矩阵\(A\)的代数余子式\(A_{ij}\),那么称\(A^*\)\(A\)的伴随矩阵,记作\(A^*\)

逆矩阵:

\(1.\)矩阵\(A\)可逆 等价于 \(|A|\ne 0\)
\(2.A^{-1}=\frac 1 {|A|}A^*\)(求伴随矩阵的\(Gauss\)算法)

矩阵的秩:

\(k\)阶子式:\(k\)\(k\)列,把交点元素按顺序组成\(k\)阶矩阵。
非零子式:没有零行的子式。
行阶梯矩阵:每一行首非零元素都在上一行非零元素的右面,列阶梯矩阵同理。
最简形矩阵:行首非零元素为\(0\)的行阶梯矩阵。
矩阵的秩:\(R(A)=A\)的最高阶非零子式的阶数,也是通过矩阵的初等变换(\(Gauss\))把\(A\)变成行阶梯矩阵(或最简形矩阵)后的非零行个数。
向量的旋转与矩阵:
把向量表示成列矩阵\(\left(\begin{matrix}x\\y\end{matrix}\right)\),逆时针旋转向量\(\theta\)角就是矩阵\(\left(\begin{matrix}cos\theta&-sin\theta\\sin\theta&cos\theta\end{matrix}\right)\)左乘向量列矩阵,另有\(\left(\begin{matrix}cos\theta&-sin\theta\\sin\theta&cos\theta\end{matrix}\right)^n\)=\(\left(\begin{matrix}cos~n\theta&-sin~n\theta\\sin~n\theta&cos~n\theta\end{matrix}\right)\)

模板:

实数高斯消元:

    int gauss_float(){
    	for(int i=1;i<=n;i++){
    		bj=0;
    		for(int j=i;j<=n;j++)
    			if(fabs(a[j][i])>eps){bj=j;break;}
    		if(bj==0)	return 0;
			for(int j=i;j<=n+1;j++)	swap(a[bj][j],a[i][j]);
    		for(int j=i+1;j<=n;j++){
    			double d=a[i][i]/a[j][i];
    			for(int k=i;k<=n+1;k++)
    				a[j][k]=a[j][k]*d-a[i][k];
			}
		}
		for(int i=n;i>=1;i--){
			ans[i]=a[i][n+1]/a[i][i];
			for(int j=1;j<i;j++)	a[j][n+1]-=a[j][i]*ans[i];
		}
        return 1;
    }

行列式: 如果没有mod,把%mod去掉即可。

    int determinant(){
    	dete=1;
		for(int i=1;i<=tot;i++){
    		for(int j=i+1;j<=tot;j++){
    			while(a[j][i]){
    				long long t=a[i][i]/a[j][i];
    				for(int k=i;k<=tot;k++){
    					a[i][k]=((a[i][k]-a[j][k]*t%mod)%mod+mod)%mod;
    					swap(a[i][k],a[j][k]);
					}
					dete=((-dete)%mod+mod)%mod;
				}
			}
			if(a[i][i]==0)	return 0;
			dete=((dete*a[i][i])%mod+mod)%mod;
		}
		return 1;
    }

矩阵求逆:

	int matrix_inv(){
		for(int i=1;i<=n;i++){
			bj=0;
			for(int j=i;j<=n;j++)
				if(a[j][i]!=0){bj=j;break;}
			if(bj==0)	return 0;
			for(int j=i;j<=n+n;j++)	swap(a[bj][j],a[i][j]);
			long long INV=qpow(a[i][i],mod-2);
			for(int j=i;j<=n+n;j++)	a[i][j]=a[i][j]*INV%mod;
			for(int k=1;k<=n;k++){
				if(k==i)	continue;
				for(int j=i+1;j<=n+n;j++)
					a[k][j]=((a[k][j]-a[k][i]*a[i][j]%mod)%mod+mod)%mod;
				a[k][i]=0;
			}
		}
		return 1;
	}

矩阵树定理:

无向图:(度数矩阵-邻接矩阵)去掉任意一行任意一列的行列式=该无向图的生成树个数。
有向图:(入度矩阵-邻接矩阵)去掉i行i列的行列式=以i为根(出发点)的外向树形图。
\(~~~~~~~~~~~~~\)(出度矩阵-邻接矩阵)去掉i行i列的行列式=以i为根(到达点)的内向树形图。

posted @ 2019-03-23 09:36  Smeow  阅读(652)  评论(0编辑  收藏  举报