《求解关灯游戏》源码分析之三:9*9 矩阵的消元过程
在求解过程中,逆矩阵的获得是个难点。在网上找了些资料,没看明白。而那段代码也不长,索性打印一下日志分析一下。
分析时,数据量当然要小些。2*2 的矩阵,常量矩阵是 4*4 阶,常量矩阵和逆矩阵是相同的。索性就分析一下 3*3 阶的。
分析结果如下:
消元的目的,是将常量矩阵转换成单位矩阵。同时,对一个单位矩阵做相同的操作。这样,
常量矩阵转换成单位矩阵时,单位矩阵就变成了逆矩阵了。
将常量矩阵转换成单位矩阵即,将
110100000
111010000
011001000
100110100
010111010
001011001
000100110
000010111
000001011
转换成
100000000
010000000
001000000
000100000
000010000
000001000
000000100
000000010
000000001
=======================
消元过程
110100000
111010000
011001000
100110100
010111010
001011001
000100110
000010111
000001011
485 i:0 j:0
不换行
消元(将第0列的 1 消去,第0行的不消)
110100000
001110000
011001000
010010100
010111010
001011001
000100110
000010111
000001011
485 i:1 j:2
第一行和第2行进行交换行(目的是让 i=1;j=1 位置的数据变为1)
110100000
011001000
001110000
010010100
010111010
001011001
000100110
000010111
000001011
消元(将第1列的 1 消去,第1行的不消)
101101000
011001000
001110000
001011100
001110010
001011001
000100110
000010111
000001011
485 i:2 j:2
不换行
消元
100011000
010111000
001110000
000101100
000000010
000101001
000100110
000010111
000001011
485 i:3 j:3
不换行
消元
100011000
010010100
001011100
000101100
000000010
000000101
000001010
000010111
000001011
485 i:4 j:7
交换行
100011000
010010100
001011100
000101100
000010111
000000101
000001010
000000010
000001011
消元
100001111
010000011
001001011
000101100
000010111
000000101
000001010
000000010
000001011
485 i:5 j:6
100001111
010000011
001001011
000101100
000010111
000001010
000000101
000000010
000001011
消元
100000101
010000011
001000001
000100110
000010111
000001010
000000101
000000010
000000001
485 i:6 j:6
不换行
消元
100000000
010000011
001000001
000100011
000010010
000001010
000000101
000000010
000000001
485 i:7 j:7
不换行
消元
100000000
010000001
001000001
000100001
000010000
000001000
000000101
000000010
000000001
485 i:8 j:8
不换行
消元
100000000
010000000
001000000
000100000
000010000
000001000
000000100
000000010
000000001
分享到:
相关推荐
它以其用于矩阵操作、数据可视化和数值分析的能力而闻名。 MATLAB 的特点: **矩阵操作:**MATLAB 以其强大的矩阵操作功能而闻名。它提供了广泛的函数来执行矩阵代数、求解线性方程组和执行特征值分解等操作。 **...
NULL 博文链接:https://zwhc.iteye.com/blog/711186
NULL 博文链接:https://zwhc.iteye.com/blog/713818
使用Matlab语言编程,分别用Gauss消去,Jacobi迭代,Gauss-Seidel迭代,SOR迭代和共轭梯度法对Hilbert矩阵进行求解并绘制相关曲线。
高斯消元,也称为行约简,是线性代数中的一种算法,用于求解线性方程组。 通常理解为对相应系数矩阵执行的一系列操作。 该方法还可用于求矩阵的秩、计算矩阵的行列式以及计算可逆方阵的逆。 该方法以 Carl Friedrich...
2、使用 消元法 求解方程:消元与回代 3、消元法的矩阵视角:消元矩阵 4、小结
本程序为求解关灯游戏的算法,同时还有一个测试程序,
之所以这样做是有道理的,这样的做法能够在某种场景下大量简化计算量:对于矩阵,给出大量不同的右侧向量 进行 的求解,此时只要我们算出了消元矩阵,那么只需要对不同的
UC矩阵求解过程演示.exe,MIS的结构,业务处理系统
三维旋转平移矩阵求解 三维旋转平移矩阵求解 三维旋转平移矩阵求解 三维旋转平移矩阵求解 三维旋转平移矩阵求解
//定义输出化简系数矩阵过程的函数 9. int n,i,j,k,p,q; 10. double main() 11. { 12. 13. printf("请输入系数矩阵的阶数n(n):"); 14. scanf("%d",&n); 15. /*判断矩阵阶数是否超过界定值*/ 16. if(n>dim) 17. ...
2、使用 消元法 求解方程 3、消元矩阵 4、小结
应用动态规划算法思想求解矩阵连乘的顺序问题。 【实验性质】 验证性实验(学时数:2H) 【实验要求】 应用动态规划算法的最优子结构性质和子问题重叠性质求解此问题。分析动态规划算法的基本思想,应用动态规划策略...
inter MKL 求解大型稀疏矩阵 实例(C/C++)。适用与对称或者非对称 稀疏矩阵求解,求解速度非常快。
实现追赶法求解三对角矩阵方程组的C++源代码,可以实现数据的文本输入。
入口坐标和出口坐标分别为(startx,starty)和(endx,eny),每一个坐标点有两种可能:0或1,其中0表示该位置允许通过,1表示该位置不允许通过。以寻路问题为例实现A*算法的求解程序,设计两种不同的估价函数。
当系数矩阵为三对角矩阵时,利用追赶法求解矩阵方程组Ax=b,效率更高,里面附有详细的注释,新手阅读也没有任何问题
非对称微分矩阵 Riccati 方程的求解% % dY(t)/dt = AY + YB - YCY + Q (*) % Y(t0) = Y0 % % 采用后向微分公式法。 % % 输入:A:大小矩阵 (n,n)。 % B : 尺寸矩阵 (p,p)。 % C : 大小矩阵 (p,n)。 % D : 大小...
关灯游戏(Lights Out)最强解题程序,包含多彩颜色情况解题,程序可以给出全部解法。
追赶法求解三对角矩阵 ,采用matlab编写,m文件形式