掃き出し法による連立方程式の解法
Posted: 2013年2月03日(日) 23:41
行列の掃き出し法で連立方程式を求めようとしていますが、
単位行列までは作れるのですが、解に相当するx[0][4]~x[3][4]
の値が入力値から変化していません。
プログラムを何度読み直しても、何処が違うのか分からず
困っています。
単純なミスの見落としだとは思うのですが、ご教授お願いします。
単位行列までは作れるのですが、解に相当するx[0][4]~x[3][4]
の値が入力値から変化していません。
プログラムを何度読み直しても、何処が違うのか分からず
困っています。
単純なミスの見落としだとは思うのですが、ご教授お願いします。
#include<stdio.h>
/* 掃き出し法により連立方程式を解く
w+4x-2y+4z=12
2w+3x+6y-2z=9
3w+7x+3y+2z=18
4w+x+7y-5z=3 */
int main(void){
double x[4][5]={{1,4,-2,4,12},
{2,3,6,-2,9},
{3,7,3,2,18},
{4,1,7,-5,3}};
int i,j,k;
/*三角行列を作る*/
for(j=0;j<=2;j++){
for(i=j;i<=2;i++){
for(k=0;k<=4;k++){
x[i+1][k]=x[i+1][k]
-(x[i+1][j]*x[j][k]/x[j][j]);
}
}
}
/*単位行列を作る*/
for(k=0;k<=3;k++){
for(j=k;j<=2;j++){
for(i=0;i<=4;i++){
x[k][i]=x[k][i]
-(x[j+1][i]*x[k][j+1]/x[j+1][j+1]);
}
}
}
for(j=0;j<=3;j++){
for(i=0;i<=4;i++){
x[j][i]=x[j][i]/x[j][j];
}
}
/*画面出力*/
for(i=0;i<=3;i++){
printf("%3.0f,%3.0f,%3.0f,%3.0f,%3.0f\n"
,x[i][0],x[i][1],x[i][2],x[i][3],x[i][4]);
}
printf("W=%3.0f\n",x[0][4]);
printf("x=%3.0f\n",x[1][4]);
printf("y=%3.0f\n",x[2][4]);
printf("z=%3.0f\n",x[3][4]);
printf("\n");
return 0;
}