020-29133788
    资 讯
    您的位置:首页 >> 资 讯 >> 软件应用 >> 编程开发 >> 正文
    怎么写一个用高斯消去法求方程式解的程式

    点击:   发布日期:2013-05-19

    本文来自 www.020fix.com


    简单的三元一次方程式就好

    例如
        x + 2y + z = 4
      2x +   y - z =-1
      -x +   y +2z= 3
        求 x y z 的值
    程式:
    #include <stdio.h>
    main(void) {
    int t1=0,t2=0,t3=0,j;
    double arg[3][4] = {{1,2,1,4},{2,1,-1,-1},{-1,1,2,3}};
    double temp[3],temp2[3];
    if(arg[0][0]==0){
        if(arg[1][0]!=0){
        for (j=0;j<4;j++) {
        temp2[j]=arg[1][j];
        arg[1][j]=arg[0][j];
        arg[0][j]=temp2[j];
        }
        }
        if(arg[2][0]!=0){
        for (j=0;j<4;j++) {
        temp2[j]=arg[2][j];
        arg[2][j]=arg[0][j];
        arg[0][j]=temp2[j];
        }
        }
        else{
            t1=1;
        }
    }
    if(t1==0){
    temp[0]=arg[0][0];
    for (j=0;j<4;j++) {
    arg[0][j]=arg[0][j]/temp[0];
    }
    for (j=3;j>=0;j--) {
        arg[1][j]=arg[1][j]-arg[1][0]*arg[0][j];
        arg[2][j]=arg[2][j]-arg[2][0]*arg[0][j];
    }
    }
    if(arg[1][1]==0){
        if(arg[2][1]!=0){
        for (j=0;j<4;j++) {
        temp2[j]=arg[2][j];
        arg[2][j]=arg[1][j];
        arg[1][j]=temp2[j];
        }
        }
        else{
            t2=1;
        }
    }
    if(t2==0){
    temp[1]=arg[1][1];
    for (j=0;j<4;j++) {
    arg[1][j]=arg[1][j]/temp[1];
    }
    for (j=3;j>=0;j--) {
        arg[0][j]=arg[0][j]-arg[0][1]*arg[1][j];
        arg[2][j]=arg[2][j]-arg[2][1]*arg[1][j];
    }
    }
    if(arg[2][2]==0){
            t3=1;
       
    }
    if(t3==0){
    temp[2]=arg[2][2];
    for (j=0;j<4;j++) {
    arg[2][j]=arg[2][j]/temp[2];
    }
    for (j=3;j>=0;j--) {
        arg[0][j]=arg[0][j]-arg[0][2]*arg[2][j];
        arg[1][j]=arg[1][j]-arg[1][2]*arg[2][j];
    }
    }
    printf("the solution is x,y,z = ");
    if(t1==1 || t2==1 || t3==1){
    printf("not single solution");
    }
    else{
        for (j=0;j<3;j++) {
        printf("%.3lf ,",arg[j][3]);
    }
    }
    printf("\n");
    return(0);
    }