【发布时间】:2016-12-19 23:37:30
【问题描述】:
我在下三角矩阵的高斯消元方面遇到了麻烦,我无法想象循环在这里应该如何工作。我试图向后运行循环,但没有帮助。目前我得到的只是上三角矩阵的高斯消元法。
For[k = 1, k <= size - 1, k++,
For[i = k + 1, i <= size, i++,
If[tab[[k]][[k]] != 0,
help = tab[[i]][[k]]/tab[[k]][[k]];
For[j = k, j <= size, j++,
tab[[i]][[j]] = tab[[i]][[j]] - help*tab[[k]][[j]];
identity[[i]][[j]] = identity[[i]][[j]] - help*tab[[k]][[j]]
]
]
]
]
有人可以帮帮我吗?
@编辑
我做了这样的循环
For[k = size, k > 1, k--,
For[i = k - 1, i >= 1, i--,
而且它似乎有效,但现在我遇到了一个问题,因为这两个循环没有给出可逆矩阵。
示例矩阵:
[ 3 4 2 ]
[ 5 5 5 ]
[ 1 5 3 ]
上对角线的输出
[3 4 2 ]
[0 -5/3 5/3 ]
[0 0 6 ]
身份矩阵的输出
[1 0 0 ]
[-5 -17/3 -10/3 ]
[-1 -5 -4 ]
现在,当我为下对角线运行循环时,它的输出不正确。它不分割主对角线
【问题讨论】:
-
你见过
RowReduce。您可能还想查看链接到许多其他线性代数指南的 Matrices and Linear Algebra 指南。 -
请注意,mathematica 中的
For循环与 C 有点不同。在 C/C++ 中,索引的增量是在循环操作之后执行的,而在您编写的代码中,在任何内部 -循环操作索引递增。 -
显示一些示例小矩阵和预期结果。不清楚您是否有编码问题或线性代数问题(上三角矩阵上的高斯消元不起作用)
-
@agentp,完成。但我想,如果我对上三角矩阵和下三角矩阵进行高斯消元,它会产生一个可逆矩阵,不是吗?
-
对不起,我以为你的意思是 input 是上三角形。不应该是
identity[[i]][[j]] = identity[[i]][[j]] - help*identity[[k]][[j]]吗?
标签: wolfram-mathematica gaussian