void JacobiMethod(double T[N][N], double c[N], double x[N], int iterations)
{
double x_new[N];
double x_prev[N];
double tmp=0;
while(magnitudeVectorDiff(x_new, x_prev)!=1)
{
iterations++;
for(int i=0; i<N; i++)
{
for(int j=0; j<N; j++)
{
tmp=tmp+T[i][j]*x[j];
}
x_new[i]=tmp+c[i];
tmp=0;
}
for(int i=0; i<N; i++)
{
x_prev[i]=x[i];
x[i]=x_new[i];
}
}
}
int main(void)
{
double A[N][N];
double v[N];
double x[N]={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
double LU[N][N];
double Dinv[N][N];
double T[N][N];
double c[N];
double x_new[N];
double x_prev[N];
int iterations=0;
read_data_from_file(A, v);
splitting_array(A, LU, Dinv);
T_and_c(LU, Dinv, v, T, c);
JacobiMethod(T, c, x, iterations);
printArray(A);
printVectorV(v);
printf("Completed %d iterations (for tolerance = %lf).\n", iterations, TOL);
printf("%d\n", iterations);
printVector(x);
return 0;
}
我尝试将迭代返回到主函数,但即使使用return迭代,它仍显示0。编辑:我已经在上面添加了main函数,但是我没有包括该程序的所有其他函数,因为它们对于此目的并不那么重要
您需要将函数的返回值存储在变量中才能对其进行更改:
iterations = JacobiMethod(T, c, x, iterations);
并且在函数中,如注释中所指出的,您可以return iterations
,并且函数的返回类型应该为int
。
请注意,主函数和函数iterations
中的JacobiMethod
变量是2个不同的变量。它们都是仅在各自函数中可用的局部变量。它们只是具有相同的名称,但它们不是相同的变量。]>
iterations
中的变量JacobiMethod
更改时,main
中的变量不变。
这就是为什么您需要从函数返回值并在主函数中分配函数的返回值的原因。