用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - c代码库

高斯列主元消去法解线性方程组

2014-04-20 作者: 云代码会员举报

[c]代码库

#include<stdio.h>
#include<math.h>
#define MAX_N 20
main()
{
 int i,j,k;
 int n;
 int i_k;                              //列主元所在行的指标
 double m;                             //列主元的值
 double a,b;                           //换行时做终结制值
 double D=1;                           //行列式的值
 double A[MAX_N][MAX_N];
 double B[MAX_N];
printf("请输入系数矩阵的阶数n:\n");
 scanf("%d",&n);
 printf("请输入系数矩阵A:\n");
 for(i=0;i<n;i++)
   for(j=0;j<n;j++)
   scanf("%lf",&A[i][j]);
 printf("请输入右端项b:\n");
 for(i=0;i<n;i++)
 scanf("%lf",&B[i]);
 for(k=0;k<n-1;k++)         //最后一行就不用选了
 {
  m=0;                      //开始按列选主元
  i_k=k;
  for(i=k;i<n;i++)
  {
   if(fabs(A[i][k])>m)
   {
    m=fabs(A[i][k]);
    i_k=i;                  //记录主元所在行的指标
   }   
}  
  if(m==0)
  {
   printf("系数矩阵奇异!\ndetA=0\n");
   break;
  } 
  else if(i_k!=k)
  {
   for(j=k;j<n;j++)       //换行     书上的算法这里错了!!!
   {
    a=A[i_k][j];
    A[i_k][j]=A[k][j];
    A[k][j]=a;
   } 
   b=B[i_k];
   B[i_k]=B[k];
   B[k]=b;
   D=(-1)*D;                   //换行,行列式变号
  } 
  D=D*A[k][k];
  for(i=k+1;i<n;i++)           //计算乘子
  {
   A[i][k]=A[i][k]/A[k][k];
  }
  for(i=k+1;i<n;i++)           //消元
  {
   for(j=k+1;j<n;j++)
   {
    A[i][j]=A[i][j]-A[i][k]*A[k][j];
   } 
   B[i]=B[i]-A[i][k]*B[k];
  }  
 } 
  for(i=n-1;i>=0;i--)          //回代;临时用b来存储这里的和
  {
   b=0;
   for(j=i+1;j<n;j++)
   {b+=A[i][j]*B[j];}
   B[i]=(B[i]-b)/A[i][i];
  } 
 D=D*A[n-1][n-1];        //在k进行循环的时候只循环到n-2(也可以在上面让k循环到n-1)
 printf("系数矩阵行列式的值为%lf。\n",D);
 printf("解为x_i=\n");
 for(i=0;i<n;i++)
 printf("%lf\n",B[i]);
return  0;
}


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...