高斯消除问题

时间:2016-07-08 18:33:53

标签: c++

我试图通过一个用于高斯消除的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]

2 个答案:

答案 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

没有简单的方法可以阅读并尝试自己理解。