酷炫数字魔法阵——基本操作
话不多说,先上定义:
【我给的定义】 矩阵就是一个数表,是一种很酷炫的数据类型,具有神奇的魔法
矩阵跟行列式是有本质区别的,行列式是一个表达式,而矩阵是一种数据类型。
有一些特殊的矩阵,这里总结一下:
- 方阵($A_{n \times n}$)
- 对角阵($\begin{bmatrix}a_{11}&\cdots&0\\\vdots&\ddots&\vdots\\0&\cdots&a_{nn}\end{bmatrix}$)
- 上三角阵、下三角阵($\begin{bmatrix} a_{11}&\cdots&a_{1n}\\ \vdots&\ddots&\vdots\\ 0&\cdots&a_{nn} \end{bmatrix}$、$\begin{bmatrix} a_{11}&\cdots&0\\ \vdots&\ddots&\vdots\\ a_{n1}&\cdots&a_{nn} \end{bmatrix}$)
- 单位阵$E_n=\begin{bmatrix} 1&\cdots&0\\ \vdots&\ddots&\vdots\\ 0&\cdots&1 \end{bmatrix}$
- 对于矩阵$A_{m \times n}$,当$m=1$时称为行向量($A_{1 \times n}$);当$n=1$时称为列向量($A_{m \times 1}$)
- 标量矩阵($\begin{bmatrix} k&\cdots&0\\ \vdots&\ddots&\vdots\\ 0&\cdots&k \end{bmatrix}$)
- 零矩阵($0_{m \times n}=\begin{bmatrix} 0&\cdots&0\\ \vdots&\ddots&\vdots\\ 0&\cdots&0 \end{bmatrix}$)
- 实矩阵:元素都是实数
- 复矩阵:元素都是复数~~(我高考复数选择错了呜啊)~~
矩阵的常规加减、数乘、阵乘运算么,公式太不直观了,还是代码来得直观~~(滑稽)~~
【加法】
Mat operator +(const Mat tmp)const//矩阵加法
{
Mat ans=Mat(m,n);
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
ans.M[i][j]=M[i][j]+tmp.M[i][j];
return ans;
}
【减法】
Mat operator -(const Mat tmp)const//矩阵减法
{
Mat ans=Mat(m,n);
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
ans.M[i][j]=M[i][j]-tmp.M[i][j];
return ans;
}
【数乘】(矩阵乘数)
Mat operator *(const double tmp)const//矩阵乘数
{
Mat ans=Mat(m,n);
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
ans.M[i][j]=M[i][j]*tmp;
return ans;
}
【矩阵乘法】
Mat operator *(const Mat tmp)const//矩阵乘法
{
Mat ans=Mat(m,tmp.n);
for(int i=1;i<=m;i++)
for(int j=1;j<=tmp.n;j++)
for(int k=1;k<=n;k++)
ans.M[i][j]+=M[i][k]*tmp.M[k][j];
return ans;
}
好了,我们可以看到加法、减法、数乘还是和我们的想法很接近的,可是矩阵乘法确实如此诡异,这是为什么捏?正所谓万物的存在都有它的原因,阵乘之所以如此诡异,是为了考试出题难完成一些非阵乘不可的任务。
柿子捡软的捏,先分析加法减法数乘的性质
用张超老师的话说,取名字是为了让你们好记
【加减法】
- $A \pm B=B \pm A$(加减交换律)
- $(A \pm B) \pm C=A \pm (B \pm C)$(加减结合律)
- $A \pm 0_{m \times n}=A$
- $A+(-A)=A-A=0_{m \times n}$
【数乘】
- $(kl)A=k(lA)$(数乘结合律)
- $(k+l)A=kA+lA$(阵·分配律)
- $k(A+B)=kA+kB$(数·分配律)
- $1A=A$
所谓世有非常之人,然后有非常之事。有非常之阵乘,然后有非常之性质。如此诡异的乘法规则,当然会有一些奇葩的性质等你去背啦~~(就多一条而已嘛)~~
- $(AB)C=A(BC)$(结合律)
- $A(B+C)=AB+AC,(A+B)C=AB+BC$(左右分配律)
- $k(AB)=(kA)B=A(kB)$(数·结合律)
- $E_mA_{m \times n}=A_{m \times n}E_n=A_{m \times n}$
- $0_{p \times m}A_{m \times n}=0_{p \times n},A_{m \times n}0_{n \times q}=0_{m \times q}$
与常数乘法比较,矩阵乘法具有许多特殊性,主要有:
- 矩阵乘法不满足交换律,即$AB\neq BA$
- 矩阵乘法不满足消去律,即由$AB=AC$不能推出$B=C$
- 矩阵乘法有零因子,即存在矩阵$A \neq 0,B\neq 0,s.t.AB=0$,故不能由$AB=0$推出$A=0$或$B=0$
有乘法就有乘幂,由于只有“前列等于后行”的矩阵才能相乘,于是只有方阵才能乘幂也就不奇怪了
方阵乘幂的性质:
- $A^kA^l=A^{l+k}$
- $(A^l)^k=A^{lk}$
当然,由于矩阵乘法具有结合律,方阵的幂可以由快速幂来求($O(logn)$)这个性质可以应用于求递推数列(如斐波那契数列),这种用矩阵快速幂来快速求解递推数列的方法称为矩阵加速
另外,作为乘法不满足交换律的自然结果,一般说来$(AB)^k \neq A^kB^k$
以上就是酷炫数字魔法阵的基本运算~~(还有高级运算以后再说)~~,还算很简单吧
下面介绍方阵的行列式与行列式的乘法公式
其实也没啥好介绍的,矩阵是个数表吧,把方阵当成行列式就行了。。。
【我给的定义】 把方阵$A$旁边的括号偷偷换成竖线得到的行列式叫做方阵$A$的行列式,记作$det A$或$|A|$
【很重要的定理】 $|kA|=k^n|A|$
【行列式乘法公式】 $|AB|=|A||B|$
下面来介绍一下行列式的一个简单操作“转置”,我们把矩阵$A$的转置记作$A^T$或$A'$
emmm,还是直接上代码来的痛快
Mat T()//转置矩阵
{
Mat ans=Mat(n,m);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
ans.M[i][j]=M[j][i];
return ans;
}
好了,看完代码基本就明白了,那么这个操作的性质:
- $(A^T)^T=A$(显而易见)
- $(A+B)^T=A^T+B^T$
- $(kA) ^T=kA^T$
- $(AB)^T=B^TA^T$
- $|A^T|=|A|$
如果一个矩阵$A$满足$A^T=A(A^T=-A)$,我们就称它为对称矩阵(反称矩阵)
如果一个矩阵$A$是复矩阵,那么由其所有元素的共轭复数组成的矩阵叫这个矩阵的共轭矩阵,记为$\overline{A}$
那么又共轭又转置的矩阵叫啥呢?共轭转置矩阵$(\overline{A})^T$!真聪明。。。
共轭矩阵满足:
- $\overline{A+B}=\overline{A}+\overline{B}$
- $\overline{kA}=\overline{k}\cdot \overline{A}$
- $\overline{AB}=\overline{A}\cdot \overline{B}$
- $|\overline{A}|=\overline{|A|}$
好了,矩阵的基本操作就这些了,再往后就开始难了