こんにちは![]()
だいぶ遅くなってしまいましたが、新年あけましておめでとうございます。2017年
もブログを書いていこうと思っているので、よろしくお願いします![]()
さて今日はガウスの消去法を用いて、方程式を解くプログラムです。
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
ソースコード![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
#include <stdio.h>
#include <math.h>
#define N 4 //未知数の数
void gauss(double a[N][N+1]);
int main(void)
{
double x[N][N+1],d[N*(N+1)];
int i,j,k;
FILE *fp;
/*data.txtというファイルから連立方程式の係数を行列式に入れる*/
fp = fopen( "data.txt", "r" );
k = 0;
for( i = 0; i<N; i++ ){
for( j = 0; j<(N+1); j++,k++ ){
fscanf( fp, "%lf", &d[k]);
x[i][j] = d[k];
}
}
fclose(fp);
/*行列xの表示*/
printf("行列\n");
for( i = 0; i < N; i++ ){
for( j = 0; j < (N+1); j++ ){
printf("%10.5f", x[i][j] );
}
printf("\n");
}
gauss(x);/*行列x[N][N+1]を関数gaussに渡す*/
return 0;
}
void gauss(double a[N][N+1]){
int i,j,k;
double p,q,b[N];
for(k=0;k<N;k++) {
p=a[k][k]; /*対角要素を保存*/
a[k][k]=1; /*対角要素は1になることがわかっているので直接代入*/
for(j=k+1;j<N+1;j++) {
a[k][j]/=p;
}
for(i=k+1;i<N;i++) {
q=a[i][k];
for(j=k+1;j<N+1;j++) {
a[i][j]-=q*a[k][j];
}
/*0となることがわかっているので直接代入*/
a[i][k]=0;
}
}
/*解の計算*/
for(i=N-1;i>=0;i--) {
b[i]=a[i][N];
for(j=N-1;j>i;j--) {
b[i]-=a[i][j]*b[j];
}
}
/*解の表示*/
printf("方程式の解は\n");
for(i=0;i<N;i++) {
printf("%f\n",b[i]);
}
}
-------------------------------------------------------------------------
このプログラムでは、4元の連立方程式を解いています。data.txtに方程式の係数を入力すれば解を求めることが出来ます。
また、マクロ定数Nの値を変えれば未知数の数がいくつであっても解くことが出来ます。
今年もこんな感じでブログを書いていきます。
コメントやいいねをもらえるととっても嬉しいです![]()
![]()
それではこの辺で失礼いたします。
バイバイ![]()
![]()
![]()
![]()
![]()