C言語についての質問です。
C言語についての質問です。
このプログラムの前半にある
A[N][N]={{1,0,0},{0,1,0},{0,0,1}}
b[N]={4,5,3}
という行列の成分をキーボードから入力するようにする
にはどうすればいいでしょうか。
for や scanf や printf を使って、変えてくれないでしょうか。
#include <stdio.h>
#include <math.h>
/* gauss33.c */
#define N 3
main(){
double A[N][N]={{1,0,0},{0,1,0},{0,0,1}};
double b[N]={4,5,3};
double Aa[N][N];
double x[N], bb[N], e[N];
int n=N;
int i, j, k;
double akk, aik, s;
/* input original coefficients */
/* save original coefficients */
for(i=0; i<n; i++){
for(j=0; j<n; j++){
Aa[i][j]=A[i][j]; }
bb[i]=b[i];
}
/* forward operation */
for(k=0; k<n-1; k++){
akk=1/A[k][k];
for (i=k+1; i<n; i++){
aik=-A[i][k]*akk;
for (j=k+1; j<n; j++){
A[i][j]+=aik*A[k][j]; }
b[i]+=aik*b[k];
}
for(j=k+1; j<n; j++){
A[k][j]*=akk; }
b[k]*=akk;
}
/* backward operation */
x[n-1]=b[n-1]/A[n-1][n-1];
for(k=n-2; k>=0; k--){
s=0.0;
for (j=k+1; j<n; j++){ s+=A[k][j]*x[j]; }
x[k]=b[k]-s;
}
/* chek */
for(i=0; i<n; i++){
s=0.0;
for(j=0; j<n; j++){
s+=Aa[i][j]*x[j];}
e[i]=s-bb[i];
printf("\nx(%d)=%f error=%f\n",i, x[i], e[i]); }
}
お礼
ありがとうございました。解決しました。