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<n;i++)
index[i]=i;
res=new double[n];
for(int i=0;i<n;++i)
{
res[i]=0;
}
arr=new double *[n+1];
for(int j=0;j<n;j++)
{
arr[j]=new double [n+1];
fprintf(stdout, "the %d colum value is",j+1);
for(int k=0;k<n+1;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<n;++i)
{
buff[i]=new double[n];
for(int j=0;j<n;j++)
{
buff[i][j]=arr[i][j];
}
}
//change i colum value into the n+1 of arr colum value
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
buff[j][i]=arr[j][n];
}
perm(index, 0, n, buff, &res[i]);
for(int j=0;j<n;j++)
{
buff[j][i]=arr[j][i];
}
}
for(int i=0;i<n;i++)
{
fprintf(stdout, "the x%d value is :%.08lf\n",i+1,res[i]/sum);
}
//free allocated spare
for(int i=0;i<n;i++)
free(buff[i]);
}
//free allocation
for(int i=0;i<n+1;++i)
{
free(arr[i]);
}
free(res);
free(index);
测试用例为: