我试图通过一个用于高斯消除的C ++程序(所有这些都在片段之下。我已经相当远了但是我被困在这个部分:
SELECT Count(*) AS Expr1
FROM tableA
WHERE tableA.[trans] Like '%[Input]%;
高斯消除:
MatA[i][j] = MatA[i][j]/Divisor;
}
MatB[i] = MatB[i]/Divisor;
if (i+1 < n) {
for (k=i+1; k<n; k++) {
Factor = MatA[k][i];
MatA[k][i] = 0.0;
for (j = i+1; j < n; j++) {
MatA[k][j] = MatA[k][j] - Factor * MatA[i][j];
}
MatB[k] = MatB[k] - Factor * MatB[i]
答案 0 :(得分:0)
暂且不考虑在执行高斯消除时需要考虑零或非常小的对角线元素......
假设你在第一排。
M[0][0]
是您的支点元素。您将第一行的每个元素除以M[0][0]
,这使得M[0][0]
的值等于1.0
,并计算其余元素。这不是执行Guussian消除的必要步骤,但是您在代码中执行此操作。行后
for (j = i+1; j < n; j++) {
MatA[i][j] = MatA[i][j]/Divisor;
}
是为i = 0
执行的,你有:
1.0 m12 ... m1n
在第一行。第二行尚未处理。让我们说第二行看起来像:
m21 m22 ... m2n
下一步是确保第二行看起来像:
0.0 m_new22 ... m_new2n
要达到该状态,您需要执行以下操作。
second row = second row - m21 * first row
m21_new = m21 - m21*m11 ==> 0.0 since m11 is 1.0.
m22_new = m22 - m21*m12
m23_new = m23 - m21*m13
...
m2j_new = m2j - m21*m1j
...
m2n_new = m2n - m21*m1n
这些操作中的常量为m21
,代码中为Factor
。
该行:
MatA[k][j] = MatA[k][j] - Factor * MatA[i][j];
代码相当于:
m2j_new = m2j - m21*m1j
答案 1 :(得分:-2)
查看此网站:http://euler.mcs.utulsa.edu/~class_diaz/cs2503/Spring99/lab7/node8.html
没有简单的方法可以阅读并尝试自己理解。