我正在制作一个使用高斯赛德尔方法来解决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;
}
这是什么意思?
答案 0 :(得分:1)
您尝试将2D数组传递给采用double*
的函数,但2D数组不会衰减指针(甚至不指向指针的指针)。正确的方法是将double (*A) [20]
作为参数,即指向数组的指针20倍。