编程实现克拉默法则求值(1)

1、克拉默法则

    含有n个未知数X1,X2,....,Xn 的n个线形方程组:

         a11x1+a12x2+...+a1nxn=b1,                    .....................1

        a21x1+a22x2+...+a2nxn=b2,                    .....................2

       ...

       an1x1+an2xn+...+annxn=bn                    .....................n

   如果线性方程组,中的系数行列式D不等于0,那么该方程具有唯一解。

2、方程解的构成:

     Xi=Di/D   (i =1,2,...,n)

     其中的Di即为:在系数行列式的基础之上,用值组成的列去替换其i列的值

3、编程实现为:

        实现的代码是在上一个实验中求行列式的基础之上来的:

        主要代码为:

     

    int * index;

    double **arr=NULL,**buff=NULL;

    double sum=0;

    int n;

    double *res=NULL;

  

fprintf(stdout, "tells :");

    scanf("%d",&n);

    index=new int[n];

    for(int i=0;i

        index[i]=i;

    res=new double[n];

    for(int i=0;i

    {

        res[i]=0;

    }

    arr=new double *[n+1];

    for(int j=0;j

    {

        arr[j]=new double [n+1];

        fprintf(stdout, "the %d colum value is",j+1);

        for(int k=0;k1;k++)

        {

            scanf("%lf",&arr[j][k]);

        }

    }

    perm(index, 0, n, arr, &sum);

    if(sum==0)

    {

        fprintf(stdout, "now it can't acclute value");

    }

    else

    {

        fprintf(stdout, "the D is %.08lf\n",sum);

        buff=new double *[n];

        //init value from arr

        for(int i=0;i

        {

            buff[i]=new double[n];

            for(int j=0;j

            {

                buff[i][j]=arr[i][j];

            }

        }

        //change i colum value into the n+1 of arr colum value

        for(int i=0;i

        {

            for(int j=0;j

            {

                buff[j][i]=arr[j][n];

            }

            perm(index, 0, n, buff, &res[i]);

            for(int j=0;j

            {

                buff[j][i]=arr[j][i];

            }

        }

        for(int i=0;i

        {

            fprintf(stdout, "the x%d value is :%.08lf\n",i+1,res[i]/sum);

        }

        //free allocated spare

        for(int i=0;i

            free(buff[i]);

    }

    //free allocation

    for(int i=0;i1;++i)

    {

        free(arr[i]);

    }

    free(res);

    free(index);



测试用例为:

编程实现克拉默法则求值(1)_第1张图片

你可能感兴趣的:(算法)