ガウスの消去法を使って、下の連立方程式を解くプログラムを書いているのですが、うまくできません。
間違っているところを教えていただきたいです
x + y + z + w = 33
x + y - w = 5
3x+5y+7z+10w = 218
#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<stdlib.h>
void swap(double *a,double *b){
double t;
t=*a;
*a=*b;
*b=t;
}
int main(){
FILE *fp;
double a[100][100],c[100][100],t,max,x[5],r,y,z,w;
int i,j,k,l,n,maxline,o;
if((fp = fopen("a.csv","r"))==NULL){
printf("Can't open <<a.csv>>!!\n");
exit(1);
}
n=4;
for(i=1;i<=n-1;i++){
fscanf(fp,"%lf,%lf,%lf,%lf,%lf",&a[i][1],&a[i][2],&a[i][3],&a[i][4]);
printf("%lf,%lf,%lf,%lf\n",a[i][1],a[i][2],a[i][3],a[i][4]);
}
for(i=1;i<=n-1;i++){
c[i][1] = a[i][1];
c[i][2] = a[i][2];
c[i][3] = a[i][3];
c[i][4] = a[i][4];
}
printf("\n\n");
for(o=0;o<=33;o++){
r=(double)o;
for(i=1;i<=n-1;i++){
a[i][1] = c[i][1];
a[i][2] = c[i][2];
a[i][3] = c[i][3];
a[i][4] = c[i][4];
}
a[1][4] = a[1][4]-r;
a[2][4] = a[2][4]-r;
a[3][4] = a[3][4]-3*r;
for(i=1;i<=n-1;i++){
if(a[i][i]=0){
max=a[i+1][i];
maxline=i+1;
for(l=i+2;l<=n;l++){
if(abs(a[l][i])>max){
max=abs(a[l][i]);
maxline=l;
}
}
for(k=i;k<=n;k++){
swap(&a[i][k],&a[maxline][k]);
}
}
for(j=i+1;j<=n;j++){
t=a[j][i]/a[i][i];
for(k=i;k<=n+1;k++){
a[j][k]=a[j][k] - t*a[i][k];
}
}
}
for(i=1;i<=n-1;i++){
x[i]=0;
}
for(i=n-1;i>0;i--){
x[i]=a[i][n];
for(j=i+1;j<=n-1;j++){
x[i]=x[i]-a[i][j]*x[j];
}
x[i]=x[i]/a[i][i];
}
y=fmod(x[1],1);
z=fmod(x[2],1);
w=fmod(x[3],1);
}
if(y==0){
if(z==0){
if(w==0){
if(x[1]>=0){
if(x[2]>=0){
if(x[3]>=0){
printf("x = %lf\n",r);
printf("y = %lf\n",x[1]);
printf("z = %lf\n",x[2]);
printf("w = %lf\n",x[3]);
printf("\n");
}
}
}
}
}
}
fclose(fp);
getch();
return 0;
}
a.csvのファイルは
1 0 -1 5
1 1 1 33
5 7 10 218
になっています
よろしくお願いします