こんにちはどーも

 

だいぶ遅くなってしまいましたが、新年あけましておめでとうございます。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の値を変えれば未知数の数がいくつであっても解くことが出来ます。

 

今年もこんな感じでブログを書いていきます。

コメントやいいねをもらえるととっても嬉しいですWハートハート

 

それではこの辺で失礼いたします。

 

バイバイバイバイ

またねっ