| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1434 人关注过本帖
标题:求助 列主元高斯消去法解线性方程组
只看楼主 加入收藏
chenseeing
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2015-6-24
收藏
 问题点数:0 回复次数:0 
求助 列主元高斯消去法解线性方程组
求助,C语言环境,列主元高斯消去法解线性方程组。
我已经打好了大部分代码,但是这个代码运行起来只能计算整数,不能计算小数。
求高手帮忙,怎么改为可以计算小数、整数的代码,谢谢

(p.s 尝试过修改数据类型,结果疯狂报错……新手也是醉了)




#include<stdio.h>
#include<stdlib.h>
#include<math.h>


int jueduizhizuida(int a,int M,double *A)
{
int i=0,j=0;
double max=0.0;
for(i=a;i<M;i++)
{
  if(fabs(A[i*(M+1)+a])>max)
  {
   j=i;
   max=fabs(A[i*(M+1)+a]);
  }
}
return j;
}


void jiaohuanlianghang(int a,int j,double *A,int M)
{
int i=0;
double B=0.0;
for(i=0;i<M+1;i++)
{
  B=A[a*(M+1)+i];
  A[a*(M+1)+i]=A[j*(M+1)+i];
  A[j*(M+1)+i]=B;
}
}


void shangsanjiao(double *A,int M)
{
int p=0,k=0,q=0,j=0,i;
double m=0.0,det;
for(p=0;p<M-1;p++)
{


  j=jueduizhizuida(p,M,A);
  jiaohuanlianghang(p,j,A,M);
  if(A[p*(M+1)+p]==0)
  {
   printf("矩阵是一个奇异矩阵,没有唯一解!");
   break;
  }
  for(k=p+1;k<M;k++)
  {
   m=A[k*(M+1)+p]/A[p*(M+1)+p];
   for(q=p;q<M+1;q++)
    A[k*(M+1)+q]=A[k*(M+1)+q]-m*A[p*(M+1)+q];
  }
}
printf("\n增广矩阵高斯列主元消去后的矩阵如下:\n");
for(j=0;j<M;j++)
{
  for(i=0;i<(M+1);i++)
   printf("%lf\t",A[i+j*(M+1)]);
  printf("\n");
}
det=1;
for(i=0;i<M;i++)
  det=det*A[i*(M+2)];
printf("det(A)=%lf",det);
}


double* huidai(double *A,int M)
{
double* X=NULL,temp=0.0;
int k=0,i=0;
X=(double*)malloc(M*sizeof(double));
X[M-1]=A[(M-1)*(M+1)+M]/A[(M-1)*(M+1)+M-1];
for(k=M-2;k>=0;k--)
{
  temp=0.0;
  for(i=k+1;i<M;i++)
   temp=temp+A[k*(M+1)+i]*X;
  X[k]=(A[k*(M+1)+M]-temp)/A[k*(M+1)+k];
}
return X;
}


int main()
{
int M=0,i=0,j;
double *A=NULL,*X=NULL;
printf("用列主消去法求解方程组\n");
printf("\n请输入待求解方程组的增广矩阵的行数:\t");
scanf("%d",&M);
if(M>256||M<=0)
{
  printf("输入的数字不再范围之内");
  printf("\n");
  return 0;
}
else
{
  A=(double*)calloc(M*(M+1),sizeof(double));
  printf("请输入待求解方程组的增广矩阵(%d行 %d列):\n",M,M+1);
  for(j=0;j<M;j++)
  {
   printf("请输入第%d行元素: ",j+1);
   for(i=0;i<(M+1);i++)
    scanf("%lf",&A[i+j*(M+1)]);
  }
  printf("\n");
  printf("方程的增广矩阵如下:\n");
  for(j=0;j<M;j++)
  {
   for(i=0;i<(M+1);i++)
    printf("%lf\t",A[i+j*(M+1)]);
    printf("\n");
  }
  shangsanjiao(A,M);   
  X=huidai(A,M);
  printf("\n方程组的解为:\n");
  for(i=0;i<M;i++)
   printf("X(%d)=\t%lf\n",i+1,X);
}
free(A);
free(X);
exit(0);
}
搜索更多相关主题的帖子: include double return C语言 高斯 
2015-06-24 14:56
快速回复:求助 列主元高斯消去法解线性方程组
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023693 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved