采用高斯先列主元消元法求解线性方程组AX=b

1个回答

  • 来,看看这个,大二时候写的

    //解线性方程组

    //By JJ,2008

    #include

    #include

    #include

    //----------------------------------------------全局变量定义区

    const int Number=15; //方程最大个数

    double a[Number][Number],b[Number],copy_a[Number][Number],copy_b[Number]; //系数行列式

    int A_y[Number]; //a[][]中随着横坐标增加列坐标的排列顺序,如a[0][0],a[1][2],a[2][1]...则A_y[]={0,2,1...};

    int lenth,copy_lenth; //方程的个数

    double a_sum; //计算行列式的值

    char * x; //未知量a,b,c的载体

    //----------------------------------------------函数声明区

    void input(); //输入方程组

    void print_menu(); //打印主菜单

    int choose (); //输入选择

    void cramer(); //Cramer算法解方程组

    void gauss_row(); //Gauss列主元解方程组

    void guass_all(); //Gauss全主元解方程组

    void Doolittle(); //用Doolittle算法解方程组

    int Doolittle_check(double a[][Number],double b[Number]); //判断是否行列式>0,若是,调整为顺序主子式全>0

    void xiaoqu_u_l(); //将行列式Doolittle分解

    void calculate_u_l(); //计算Doolittle结果

    double & calculate_A(int n,int m); //计算行列式

    double quanpailie_A(); //根据列坐标的排列计算的值,如A_y[]={0,2,1},得sum=a[0][ A_y[0] ] * a[1][ A_y[1] ] * a[2][ A_y[2] ]=a[0][0]*a[1][2]*a[2][1];

    void exchange(int m,int i); //交换A_y[m],A_y[i]

    void exchange_lie(int j); //交换a[][j]与b[];

    void exchange_hang(int m,int n); //分别交换a[][]和b[]中的m与n两行

    void gauss_row_xiaoqu(); //Gauss列主元消去法

    void gauss_all_xiaoqu(); //Gauss全主元消去法

    void gauss_calculate(); //根据Gauss消去法结果计算未知量的值

    void exchange_a_lie(int m,int n); //交换a[][]中的m和n列

    void exchange_x(int m,int n); //交换x[]中的x[m]和x[n]

    void recovery(); //恢复数据

    //主函数

    void main()

    {

    int flag=1;

    input(); //输入方程

    while(flag)

    {

    print_menu(); //打印主菜单

    flag=choose(); //选择解答方式

    }

    }

    //函数定义区

    void print_menu()

    {

    system("cls");

    cout