Gauss-Seidel函数

时间:2016-09-26 03:07:44

标签: c++

我正在制作一个使用高斯赛德尔方法来解决A * x = b的函数。当我运行该函数时,我收到以下错误消息:

main.cpp:28:40:错误:无效类型' double [int]'对于数组下标

sum [i] =(1 / A [i] [j])* x [j]);

--------------------- ^(指向这里的小箭头)

main.cpp:31:32:错误:无效类型' double [int]'对于数组下标

x [i] =(1 / A [i] [i])*(b [i] - sum [i]);

------------------- ^(指向这里的小箭头)

#include <cmath>
#include <cstdlib>
#include <stdio.h>
#include <stdlib.h>
#include <string>
using namespace std;

void Gauss(int n, double * A, double * b, double * x) 
{
    double sum[20];

    for (int i = 0 ; i < 20 ; i++)
    {
        sum[i] = 0;
    }


    for (int iter = 0 ; iter < n ; iter++)    
    {

        for ( int i = 0 ; i < 20 ; i++ ) 
        {

            for ( int j = 0; j < 20 ; j++ ) 
            {
                if ( i != j )
                    sum[i] = ( 1/A[i][j] ) * x[j] ) ;
            }

            x[i] = ( 1 / A[i][i] ) * ( b[i] - sum[i] ) ;
        }

    }

    return;
}


int main() 
{
    //defining matrix A
    double A[20][20];    
    //defining vectors x and b
    double x[20];        
    double b[20];
    int i;

    //for Matrix A

    for (i = 0 ; i<20 ; ++i)
    {
        A[i][i]= 2.0; 
        A[i][i+1] = -1.0; 
        A[i+1][i] = -1.0; 
    }

    //for vector x
    for ( i = 0 ; i < 20 ; ++i)
    {
        x[i]=0;
    }

    //for vector b
    for ( i = 0 ; i < 20 ; i++)
    {
        if (i == 1 || i == 19)
            b[i]=1.0;
        else
            b[i]=0;
    }           


    return 0; 
}

这是什么意思?

1 个答案:

答案 0 :(得分:1)

您尝试将2D数组传递给采用double*的函数,但2D数组​​不会衰减指针(甚至不指向指针的指针)。正确的方法是将double (*A) [20]作为参数,即指向数组的指针20倍。