本文主要是介绍逆矩阵、伪逆矩阵:数据的压缩和复原,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
逆矩阵、伪逆矩阵、数据的压缩和复原:这一块知识虽然很简单,但在光学各种实验情况下经常用到,特此总结。
矩阵的乘法 (观测矩阵):C = A* B
C:M*1
A:M*N
B:N*1
A可以理解为一个转化矩阵,或者说 观测矩阵。
矩阵B在观测矩阵A上,观察到的效果是矩阵C
这个思想在物理思想上非常重要,尤其是光学。
实际生活中,往往我们需要通过观测矩阵(A)和观察到的结果(C),来求出原矩阵(B)
也就是解非线性齐次方程,M个方程,N个未知数。
求逆矩阵:当矩阵A必须是方阵的时候,A才是可逆矩阵,这时M=N,有唯一解,B = inv(A) * C,matlab中测试如下。
%测试逆矩阵
A = rand(10,10);
B = rand(10,1);
C = A*B;
BB = inv(A)*C;
B'
BB'结果:ans =0.0986 0.1420 0.1683 0.1962 0.3175 0.3164 0.2176 0.2510 0.8929 0.7032ans =0.0986 0.1420 0.1683 0.1962 0.3175 0.3164 0.2176 0.2510 0.8929 0.7032
求伪逆矩阵:伪逆矩阵是逆矩阵的广义形式。由于奇异矩阵或非方阵的矩阵不存在逆矩阵,但在matlab里可以用函数pinv(A)求其伪逆矩阵。理解其实就是求不存在逆矩阵的逆矩阵。
当 M>N的时候,也就是说我们探测到的数据量大于原数据量,此时方程数量大于未知数数量,可以直接通过求伪逆求出矩阵B,B = pinv(A) * C
%测试伪逆,M > N
A = rand(10,8);
B = rand(8,1);
C = A*B;
BB = pinv(A)*C;
B'
BB'结果:
ans =0.1375 0.3900 0.9274 0.9175 0.7136 0.6183 0.3433 0.9360ans =0.1375 0.3900 0.9274 0.9175 0.7136 0.6183 0.3433 0.9360
当 N>M的时候,也就是说我们探测到的数据量大于原数据量,此时方程数量小于未知数数量,方程没有唯一解,不能通过B = pinv(A) * C 求出B(压缩感知情况另外考虑 :https://blog.csdn.net/tyfwin/article/details/88902091)
%测试伪逆 M<N
A = rand(8,10);
B = rand(10,1);
C = A*B;
BB = pinv(A)*C;
B'
BB'结果:
ans =0.7360 0.7947 0.5449 0.6862 0.8936 0.0548 0.3037 0.0462 0.1955 0.7202ans =0.7045 0.7584 0.6073 0.5426 1.0107 0.0920 0.2619 0.1060 0.2999 0.6264
这篇关于逆矩阵、伪逆矩阵:数据的压缩和复原的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!