2016-09-26 4 views
0

Gauss Seidelメソッドを使用してA * x = bを解く関数を作成しています。私は、関数を実行すると、私は次のエラーメッセージが出ます:Gauss-Seidel関数の型が無効です

main.cppに:40:28エラー:無効なタイプ '[INT] double' の配列の添字のため

合計[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; 
} 

これは何を意味するのでしょうか?

+0

'A'配列は1次元または2次元ですか? –

+0

これをC++とタグ付けしたので、配列ではなく 'std :: vector'を使うべきです。 –

+0

Aは2D配列です。 – STHB

答えて

1

double*を取る関数に2D配列を渡そうとしますが、2次元配列はポインタへのポインタでさえもを崩壊しません。正しい方法は、double (*A) [20]をパラメータとして持つことです。つまり、配列へのポインタの配列を20倍にすることです。

関連する問題