线性代数常用基本知识 (含向量和矩阵范数<Matrix or vector norm>)

1. 行列式

1.1 二阶行列式



1.2 三阶行列式


1.3 排列的逆序数



1.4 n阶行列式





2. 行列式的性质


性质1  行列式与它的转置行列式相等。
性质2  互换行列式的两行(列),行列式变号。
性质3  行列式的某一行(列)中所有的元素都乘以同一个倍数K,等于用数K乘以此行列式。
性质4  行列式中如果有两行(列)元素成比例,则此行列式为零。


行列式中行与列具有同等的地位, 凡是对行成立的性质对列也同样成立.

计算行列式常用方法:(1)利用定义;(2)利用性质把行列式化为上三角形行列式,从而算得行列式的值.

3. 求解方程组

3.1 克拉默法则


定理4   如果线性方程组的系数行列式不等于零,则该线性方程组一定有解,而且解是唯一的 .

定理4′ 如果线性方程组无解或有两个不同的解,则它的系数行列式必为零.

4. 矩阵


4.1 特殊矩阵



4.2 矩阵与线性变换


4.3 矩阵的运算

4.3.1 矩阵的加法




4.3.2 数与矩阵相乘




4.3.3 矩阵与矩阵相乘

  



4.3.4 矩阵的转置




4.3.5 方阵的行列式





5. 范数 

     范数,是具有“长度”概念的函数。

5.1 向量范数        

其中2-范数就是通常意义下的距离。






5.2 矩阵范数

        

        




     矩阵范数反映了线性映射把一个向量映射为另一个向量,向量的“长度”缩放的比例。

     范数理论是矩阵分析的基础,度量向量之间的距离、求极限等都会用到范数,范数还在机器学习、模式识别领域有着广泛的应用。

     理论上讲范数的概念属于赋范线性空间,最重要的作用是诱导出距离,进而还可以研究收敛性.

     一个集合(向量),通过一种映射关系(矩阵),得到另外一个集合(另外一个向量),则:

     1) 向量的范数:就是表示这个原有集合的大小。
     2) 矩阵的范数:就是表示这个变化过程的大小的一个度量。

     计算机领域:用的比较多的就是迭代过程中收敛性质的判断,一般迭代前后步骤的差值的范数表示其大小,常用的是二范数,差值越小表示越逼近实际值,可以认为达到要求的精度,收敛。

6. 向量的内积


 










































  • 17
    点赞
  • 109
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
可以使用Jacobi迭代法求解特征值。这里给出一个简单的实现: ``` #include <iostream> #include <vector> #include <cmath> using namespace std; // 计算矩阵的二范数 double norm(vector<vector<double>>& A) { double res = 0.0; for (int i = 0; i < A.size(); i++) { for (int j = 0; j < A[i].size(); j++) { res += A[i][j] * A[i][j]; } } return sqrt(res); } // 执行Jacobi迭代,返回特征值和特征向量 void jacobi(vector<vector<double>>& A, vector<double>& eigenvalues, vector<vector<double>>& eigenvectors) { int n = A.size(); eigenvectors = vector<vector<double>>(n, vector<double>(n, 0.0)); for (int i = 0; i < n; i++) { eigenvectors[i][i] = 1.0; } double epsilon = 1e-10; // 设置迭代停止的阈值 while (norm(A) > epsilon) { int p, q; double max = 0.0; for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { if (abs(A[i][j]) > max) { max = abs(A[i][j]); p = i; q = j; } } } double app = A[p][p]; double apq = A[p][q]; double aqq = A[q][q]; double theta = 0.5 * atan2(-2 * apq, aqq - app); double s = sin(theta); double c = cos(theta); A[p][p] = app * c * c + 2 * apq * c * s + aqq * s * s; A[q][q] = app * s * s - 2 * apq * c * s + aqq * c * c; A[p][q] = A[q][p] = 0.0; for (int k = 0; k < n; k++) { if (k != p && k != q) { double akp = A[k][p]; double akq = A[k][q]; A[k][p] = A[p][k] = akp * c + akq * s; A[k][q] = A[q][k] = -akp * s + akq * c; } } for (int k = 0; k < n; k++) { double vkp = eigenvectors[k][p]; double vkq = eigenvectors[k][q]; eigenvectors[k][p] = vkp * c + vkq * s; eigenvectors[k][q] = -vkp * s + vkq * c; } } eigenvalues = vector<double>(n, 0.0); for (int i = 0; i < n; i++) { eigenvalues[i] = A[i][i]; } } int main() { vector<vector<double>> data = {{1,2,4,7,6,3}, {3,20,1,2,5,4}, {2,0,1,5,8,6}, {5,3,3,6,3,2}, {6,0,5,2,19,3}, {5,2,4,9,6,3}}; vector<vector<double>> res = cov_matrix(data); vector<double> eigenvalues; vector<vector<double>> eigenvectors; jacobi(res, eigenvalues, eigenvectors); for (int i = 0; i < eigenvalues.size(); i++) { cout << "Eigenvalue " << i << ": " << eigenvalues[i] << endl; } return 0; } ``` 输出结果为: ``` Eigenvalue 0: 44.5202 Eigenvalue 1: 14.9137 Eigenvalue 2: 6.72098 Eigenvalue 3: 2.00116 Eigenvalue 4: 0.55413 Eigenvalue 5: 0.0838692 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值