本文目的:之前零零散散也接触和学习了线代,为了提高对计算机视觉成像与标定的理解。故重新回顾线性代数。后续还会了解线性代数几何意义,以及相机标定原理。这系列文章主要以了解线代知识为主。
基于线性代数及其应用(原书第5版)的笔记
1线性方程租
1.1 线性方程租
形如 a1x1 + a2x2+...+anxn = b,系数a已知,n为任意正整数,a为实数或者是复数,满足等式的所有解叫解集,若两个线性方程组解集相同则称两个线性方程组等价。
解集有三种情况 : 1 无解 2有唯一解 3有无穷多解, 举例如下
x1 - x2 + x3 = 0
2x2 - 8x3 = 8
5x1 -5x3 = 10
可以将其化为矩阵
[ 1 -1 1
0 2 -8
5 0 -5 ] 成为系数矩阵
如果带上等号后面
[ 1 -1 1 0
0 2 -8 8
5 0 -5 10]
就是增广矩阵
矩阵维度即矩阵的行和列,增广矩阵有3行4列。 3行表示3个等式,4列表示有(4-1)个未知数
求解线性方程租
求解线性方程组,主要是用初等行变换。 初等行变换有3种 1倍加变换 某一行与另一行的n倍相加 2对等变换 把两行对调 3倍乘变换:某一行所有元素乘以一个非零数。行变换是可逆的,并且行变换不会改变线性方程组的解集。求解过程略,相当于解方程组。每一行都是一个等式,在不改变等式成立的条件下去做化简就可以得到答案。
接下来的问题就是线性方程组的解是否存在以及以及解有多少个。
初等行变换可以用矩阵来表达.
对等[ 1 0 0
0 0 1
0 1 0] 将第二行与第三行兑换
倍乘[ 1 0 0
0 1 0
0 0 3] 将第三行乘以三倍
倍加
[ 1 0 0
0 1 0
3 0 1] 将第三行乘以三倍加到第一行
都是放在矩阵的左边,与矩阵左乘就是初等行变换。与矩阵右乘就是初等列变换。 初等边行变换不改变方阵的秩,但是有可能改变方阵的行列式。
1.2 行化简与阶梯型矩阵
行阶梯矩阵定义:
有自己写的通过高斯消元得到最简行阶梯矩阵,用到opencv库,是一个很简易,仅仅是为了了解高斯消元怎么获得行阶梯矩阵而写的。
void SolveGuass(cv::Mat const& A, cv::Mat const& B, cv::Mat& x ,int slove_type)
{
cv::Mat B_;
if (slove_type == GuassSloveType::SOLVE_AX) {
CV_Assert(A.type() == B.type() && B.cols == 1 && A.rows == B.rows);
B_ = B;
}
else if (slove_type == GuassSloveType::SOLVE_INVERT) {
CV_Assert(A.cols == A.rows);
B_ = cv::Mat::eye(A.size(), A.type());
}
x = cv::Mat::zeros(A.rows,A.cols+B_.cols,A.type());//增广矩阵
A.copyTo(x.colRange(0, A.cols));
B_.copyTo(x.colRange(A.cols,x.cols));
for (int c = 0; c < x.cols-1; c++) {
int majorrow = -1;
for (int r = c; r < x.rows; r++) {
if (majorrow== -1 &&x.at<float>(r,c) != 0) { //选取为主元
if (slove_type != SOLVE_LU) {
x.row(r) /= x.at<float>(r, c);
if (r != c) {
auto temp = x.row(r).clone();
x.row(c).copyTo(x.row(r));
temp.copyTo(x.row(c));
majorrow = c;
}
else {
//不能用LU分解.LU分解仅使用倍加
x = x.zeros(x.rows,x.cols,x.type());
return ;
}
}
majorrow = r;
continue;
}
if (majorrow != -1 && x.at<float>(r,c) != 0) {
x.row(r) -= x.at<float>(r, c) * x.row(majorrow);
}
}
if (majorrow != -1) {
for (int r = 0; r < c; r++) {
x.row(r) -= x.at<float>(r, c) * x.row(majorrow);
}
}
}
}
//整体思路是
1 判断是否符合Ax=B
2 获得增广矩阵
3 获得主元,然后化简。
4 返回值是最简增广矩阵。
1.3 向量方程
标签:变换,矩阵,cols,笔记,majorrow,线性代数,type,row From: https://www.cnblogs.com/hcx940215/p/17521692.html