|
連続投稿失礼します。ソースのことで質問したいと思ってので
新規に投稿させていただきました。
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#define N 3
#define E .00001
int main(void)
{
double a[N][N]={
{2,1,1},
{2,3,1},
{1,1,3}};
double b[N] ={2,4,-1};
double x[N],r[N],s,q;
int m=100;
int k,i,j;
for(i=0; i<N; i++)
x[i]=0;
for(k=1; k<=m; k++){
for(i=0; i<N; i++){
r[i]=x[i];
for(i=0; i<N; i++){
s=0;
for(j=0; j<N; j++){
if(i !=j)
s +=a[i][j]*x[j];
}
x[i]=(b[i]-s)/a[i][i];
}
q=0;
for(i=0; i<N; i++)
q += fabs(x[i]-r[i]);
if(q<E){
printf("N=%d\n\n",N);
printf("COEFFICIENT\n");}
for(i=0; i<N; i++){
for(j=0; j<N; j++)
printf("%.2f",a[i][j]);
printf("\n");
}
printf("\nCONSTANT\n");
for(i=0; i<N; i++)
printf("%.2f",b[i]);
printf("\n\n SOLUTION\n");
for(i=0; i<N; i++)
printf("%f\n",x[i]);
printf("\nK=%d",k);
printf("\nE=%f\n",E);
return 1;
}
}
return 0;
}
上のソースは,反復法の計算ですが
Vc++.net では結果が
N=3
COEFFICIENT
2.001.001.00
2.003.001.00
1.001.003.00
CONSTANT
2.004.00-1.00
SOLUTION
1.000000
0.666667
-0.888889
K=1
E=0.000010
になるのでが,UNIX
N=3
COEFFICIENT
2.001.001.00
2.003.001.00
1.001.003.00
CONSTANT
2.004.00-1.00
SOLUTION
1.000001
0.999999
-1.000000
K=13
E0.000010
と数値が違いました。コンパイルが出来たので文法の間違いは
ないと思うのですが,原因がわかりません。よろしくおねがいします。
|