c++ - 高斯约尔消元法

标签 c++ gaussian

我必须设计一种算法作为前向消除的扩展,在矩阵上进行高斯乔丹消除。我的程序正在执行并创建数字对角线,但它们并不全是 1。它也不会访问第一行和第一列来将它们更改为 0。最后一栏,即答案所在的栏,不会改变。有什么想法我可以做些什么来更接近解决方案吗?

#include <cmath>

using namespace std;

double BetterForwardElimination(double A[8][9])
{

//Implements Gaussian elimination with partial pivoting
//Input: Matrix A[1..n,1..n] and column-vector b[1..n]
//Output: An equivalent upper-triangular matrix in place ofAand the
//corresponding right-hand side values in place of the (n+1)st column

    //size of array
    int n = 8;
    //int n = sizeof(A)/sizeof(A[0]);

for (int i = 1; i<n; i++)
{
    int pivotrow = i;
    for (int j=i+1; j<n; j++)
    {
        if (A[j][i] > A[pivotrow][i])
        {
            pivotrow = j;
        }
    }

    for (int k=i; k<n-1; k++)
    {
        swap(A[i][k], A[pivotrow][k]);
    }

    for (int j=i+1; j<n; j++)
    {
        //int temp = A[j][i]/A[i][i];
        for (int k = i; k<n; k++)
        {
            A[j][k] = A[j][k] - A[i][k]*(A[j][i]/A[i][i]);
        }
        A[i][j] = 0;
    }
}

return A[n][n];
}

我的输出是这样的:

1   1   1   1   1   1   1   1   0   
1   2   0   0   0   0   0   0   0   
1   0   3   0   0   0   0   0   0   
1   0   0   4   0   0   0   0   0   
11  0   0   0   5   0   0   0   20  
1   0   0   0   0   1   0   0   34  
1   0   0   0   0   0   1   0   -51 
1   0   0   0   0   0   0   -1  -6

预期输出应该是:

1   0   0   0   0   0   0   0   2   
0   1   0   0   0   0   0   0   3   
0   0   1   0   0   0   0   0   5   
0   0   0   1   0   0   0   0   7   
0   0   0   0   1   0   0   0   -7  
0   0   0   0   0   1   0   0   -5  
0   0   0   0   0   0   1   0   -3  
0   0   0   0   0   0   0   1   -2

最佳答案

根据算法,A[j][i] > A[pivotrow][i] 应该是 |A[j][i]| > |A[pivotrow][i]|,两者都是绝对值。你的交换功能在哪里?我不认为 C++ 有自己的 swap(int[][] a, int[][]b)

关于c++ - 高斯约尔消元法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15752364/

相关文章:

c++ - 使用 constexpr 遇到麻烦

c++ - 生成代码以实例化具有不同参数的函数模板

python - 直方图和高斯拟合

c++ - 模糊高斯算法是什么样的?有实现的例子吗?

c++ - 指针转换是否保持对齐属性?

c++ - 用平面内存结构替换 vector 的 vector

c++ - 如何将我自己的智能指针传递给函数?

python - 数组名下划线含义

distribution - 分布在正态分布的*部分*上的算法

python - 图像处理中的重复高斯模糊