講義内に配布されたスライドの疑似言語を使って作ってみたのですが、上手く答えを出すことができません。(EasyIDECを使用して実行しました)
また、解を求める過程というのも出さなければならないのですが、どうすれば良いのでしょうか?
自分ではどこがまちがっているのかわからないため、質問させていただきました。
よろしくお願いします!
ガウス消去法:
#include <stdio.h>
#include <math.h>
#define N 3
#define EPS .001
int main( int argc, char ** argv ){
double a[N][N+1] = {
{ 2, -4, 6, 24 },
{ -1, 3, -5, -20 },
{ 1, 2, 3, 4 }
};
double pivot, ratio;
int i, j, k, l;
//前進
for( i=0; i<N; i++ ){
pivot = a[i][i];
if(fabs( pivot ) < EPS ){
printf( "ピボットが許容範囲誤差以下\n" );
return 1;
}
for( k=i+1; k<N+1; k++ ){
ratio = a[k][i] / pivot;
for(j=i; j<N+1; j++){
a[k][j] = a[k][j] - a[i][j] * ratio;
}
}
}
//後退
for( i=N-1; i>=0; i-- ){
for( j=N-1; j>=i+1; j-- ){
a[i][N] = a[i][N] - a[j][N] * a[i][j];
a[i][j] = 0.0;
}
a[i][N] = a[i][N] / a[i][i];
a[i][i] = 1.0;
}
printf( "X = %6.2lf\n", a[0][N] );
printf( "Y = %6.2lf\n", a[1][N] );
printf( "Z = %6.2lf\n", a[2][N] );
return a[N][N+1];
}
#include <stdio.h>
#include <math.h>
#define N 3
#define EPS .00001
void print_hline(void);
void print_array(double b[N][N+1]);
static void irekae(double b[N][N+1],int i)
{
int m,j,k;
double work;
m=i;
for(k=i+1;k<N;k++)
if(fabs (b[m][i])<fabs(b[k][i])) m=k;
for(j=0; j<N+1;j++){
work= b[m][j];b[m][j]=b[i][j];b[i][j]=work;
}
}
int main( int argc, char ** argv ){
double a[N][N] = {
{ 0.0, 2.0, 1.0 },
{ 4.0, 4.0, 1.0 },
{ -2.0, 1.0, -2.0 }
};
double b[N][2*N];
double pivot, ratio;
int x, y, i, j, k;
for( y=0; y<N; y++ ){
for(x=0; x<N; x++){
b[ y ][ x ] = a[ y ][ x ];
b[ y ][ x + N ] = 0.0;
}
b[ y ][ y + N ] = 1.0;
}
//前進
for( i=0; i<N; i++ ){
pivot = b[i][i];
if(fabs( pivot ) < EPS ){
printf( "ピボットが許容範囲誤差以下\n" );
return 1;
}
for( k=i+1; k<N+1; k++ ){
ratio = b[k][i] / pivot;
for(j=i; j<N*2; j++){
b[k][j] = b[k][j] - b[i][j] * ratio;
}
}
}
//後退
for( i=N-1; i>=0; i-- ){
for( j=N-1; j>=i+1; j-- ){
for(k=N; k<N*2; k++){
b[i][k] = b[i][k] - b[j][k] * b[i][j];
}
b[i][j] = 0.0;
}
for(k=N; k<N*2; k++){
b[i][k] = b[i][k] / b[i][i];
}
b[i][i] = 1.0;
}
for( y=0; y<N; y++ ){
for( x=N; x<2*N; x++ )
printf( "%7.3lf", b[ y ][ x ] );
printf( "\n" );
}
return b[N][2*N];
}