0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ガウスの消去法を用いた連立方程式の解を求めるソースコード

Last updated at Posted at 2020-11-15

ガウスの消去法を用いた連立方程式

sample.c

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
void im_show(int i,double a[][20]);
double fraction(void);

int main(void)
{
    int i, j, k, n;
    double a[20][20], x[20],p;
    double s, q ;
    // 方程式(変数)の数を入力
    printf("Enter the number of equations : ");scanf("%d", &n);

    //分数の有無(y/n)を入力

    char yn;
    printf("Does the coefficients include any franction (y/n)?");
    scanf("%s" , &yn);

   
   


    if(yn == 'n')
        {//分数なし係数入力
            printf("\nEnter the coefficients of the equations :\n");
            for(i = 0 ; i < n ; i++)
            {
                printf("----- equation %d -----\n",i+1);
                for(j = 0 ; j < n ; j++)
                {
                    printf("a[%d][%d] = ", i + 1, j + 1);
                    
                    scanf("%lf", &a[i][j]);

                }
                printf("b[%d]  =  ", i + 1);
                scanf("%lf", &a[i][n]);
                printf("\n");
            }
        }
    else if(yn == 'y')
        {//分数あり係数入力
            printf("\nEnter the coefficients of the equations :\n");
            for(i = 0 ; i < n ; i++)
            {
                printf("----- equation %d -----\n",i+1);
                for(j = 0 ; j < n ; j++)
                {
                    printf("a[%d][%d] = ( )/( )\n ", i + 1, j + 1);
                    a[i][j]=fraction();
                    printf("a[%d][%d] = %3.2f\n\n", i + 1, j + 1,a[i][j]);
                    //scanf("%lf", &a[i][j]);

                }
                printf("b[%d]  \n  ", i + 1);
                a[i][n]=fraction();
                printf("b[%d]  = %3.2f \n\n ", i + 1,a[i][n]);
                //scanf("%lf", &a[i][n]);
                printf("\n");
            }
        }


    
    im_show(n,a);//方程式を表示する関数

    for(k=0; k<=n-1; k++)
        {
        for(i=k+1; i<n; i++)
        {
            p = a[i][k]/a[k][k];
            for(j=k; j<=n; j++)
            {
            a[i][j] = a[i][j] - (p * a[k][j]);
            
            }
        }
    }
    x[n-1] = a[n-1][n] / a[n-1][n-1];
    for(i=n-2; i>=0; i--)
    {
        s=0;
        for(j=i+1; j<n; j++)
        {
            s += (a[i][j]*x[j]);
            x[i] = (a[i][n]-s)/a[i][i];
        }
    }


    



    //結果を表示
    printf("\nThe result is :\n");

    for(i = 0 ; i < n ; i++)printf("\nx[%d] = %f", i + 1, x[i]);

    printf("\n");

    
    return 0;
}


//分数処理
double fraction(void){
    double numerator,denominator;
    printf("Enter numerator first>_\n");
    scanf(" %lf",&numerator);
    printf("-\n");
    scanf(" %lf",&denominator);printf("\n");
    return numerator/denominator;
}

//入力した連立方程式を表示
void im_show(int i,double a[][20]){
    int m,n;
    int k;
    printf("\nsimultaneous equations:\n\n");
    for(m=0;m<i;++m){
        k=0;
        for(n=0;n<i;++n){
            k+=1;
            printf("%3.2f", a[m][n]);printf(" x[%d]",k);
            if(k<i)printf(" + ");

            else if(n==i-1)
            printf(" = %3.2f \n",a[m][i]);
            

            }
        }
//それっぽいので5秒遅延させる
    printf("\n\nCalculating:\n");
    int count;
    for(count=0;count<101;count++){
        if(i*count %31 ==0)sleep(1);
        printf("%d %% \r",count);
        
        
        }
    printf("\n");
}
terminal実行結果
C>gcc sample.c

C>.\a.exe
Enter the number of equations : 2
Does the coefficients include any franction (y/n)?n

Enter the coefficients of the equations :
----- equation 1 -----
a[1][1] = 2
a[1][2] = 1
b[1]  =  7

----- equation 2 -----
a[2][1] = 3
a[2][2] = -1
b[2]  =  3


simultaneous equations:

2.00 x[1] + 1.00 x[2] = 7.00
3.00 x[1] + -1.00 x[2] = 3.00


Calculating:
100 %

The result is :

x[1] = 2.000000
x[2] = 3.000000
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?