其实我线性代数考试每次都99,100的,可惜好久不学都快忘了。
没想到acm居然要用到,早知道不扔笔记本了QAQ
#define A(n,m) n行m列的行列式A
#define A[n][m] 行列式A的第n行第m列的元素
#define |A| 行列式A的值
行列式A= , 312为主对角线 , 213为副对角线 , |A|为主对角线方向相乘 - 副对角线反向相乘 : 6+24+20-6-20-24=0
两个行列式 可乘当且仅当 ,乘完后的行列式为 ,且
矩阵或行列式的一行或一列称为向量
表示 的转置, ->
一个矩阵的秩 r 的定义为 : 至少r个行向量才能表示矩阵中任意一个行向量
比如 : (1,0,0)和(0,1,0)就可以表示(2,3,0)
所以r最大为min(n,m)
E表示单位矩阵,主对角线为1其他为0
求
方法 : 把A和单位矩阵并排写在一起,化解A至单位矩阵,右边的单位矩阵变幻后即为A的逆
有如下方程组 :
矩阵形式为 :
A称为系数矩阵, B放到A的右边连在一起称为增广矩阵
称此方程组为非齐次线性方程组
方程组有唯一解
A可逆
方程组有解
r(系数矩阵)=r(增广矩阵)
称此方程组为齐次线性方程组
方程组有唯一解且为全0解
A可逆
方程组有非0解
A不可逆
初等变换 :
交换两行 , 一行乘上一个非0数 , 一行加上另一行的k倍
高斯消元 :
通过初等变换将系数矩阵变成上三角矩阵 , 再变成单位矩阵 , 此时的B就是对应x的解
上图的解为 :
/*高斯消元,系数矩阵为a[i][j],i=1…n,j=1…n,常数为a[i][n+1],i=1…n,返回值为是否有唯一解,答案存在a[i][n+1]*/
double a[15][15], del;
double eps = 1e-6;
bool gauss(int n) {
for (int i = 1; i <= n; i++) {
int k = i;
for (int j = i + 1; j <= n; j++)if (fabs(a[j][i]) > fabs(a[k][i]))k = j;
if (fabs(del = a[k][i]) < eps)return 0;
for (int j = i; j <= n + 1; j++)swap(a[i][j], a[k][j]);
for (int j = i; j <= n + 1; j++)a[i][j] /= del;
for (k = 1; k <= n; k++)if (k != i) {
del = a[k][i];
for (int j = i; j <= n + 1; j++)a[k][j] -= a[i][j] * del;
}
}
return 1;
}
范德蒙德行列式