CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

[求助]请各位朋友帮我看一下这个问题,想要解个简单的方程组,100分不多,送给能帮我解决的朋友,谢谢大家。

楼主revealer(探索)2004-04-02 23:13:49 在 C/C++ / C语言 提问

是这样子的,我想要解这个三元一次方程组,方程如下:  
   
  [252(60.5+3x+y-z)3(1.1-y+x)]/[(12.2-x)(25.4-x-y+z)(100+2x)2]=1584.9  
   
  [(0.59+y)   (60.5+3x+y-z)]/[(1.1-y+x)(25.4-x-y+z)]=0.8  
   
  z=0.8(x+y+60.5)  
   
  需要解出x,y,z,请知道的大侠帮忙解决,多谢。 问题点数:0、回复次数:6Top

1 楼zhangfjj(小张)回复于 2004-04-02 23:50:07 得分 0

看看数学书呀,很多如高等代数,专门有介绍这类问题的算法Top

2 楼yiana1002(新的开始)回复于 2004-04-03 00:11:07 得分 0

楼主的方程是不是打错了几个符号啊  
  我怎么觉得好像不是三元一次方程Top

3 楼yiana1002(新的开始)回复于 2004-04-03 00:16:47 得分 0

我可以给你一些三元一次方程组的代码,  
   
  下面的数组均为三元一次方程组的矩阵  
  你要解其他的方程组只要改一下数字就行了  
   
  下面用的是列主元高斯消去法  
  #include<stdio.h>  
  #include<conio.h>  
  #include<alloc.h>  
  #include<math.h>  
  main()  
  {  
  int   i;  
  float   *x;  
  float   c[3][4]={0.101,2.304,3.555,1.183,-1.347,3.712,4.623,2.137,-2.835,  
  1.072,5.643,3.035};  
  //12个数依次为A11,A12,A13,B1,A21,A22,A23,B2,A31,A32,A33,B3    
  float   *ColPivot(float   *,int);  
  x=ColPivot(c[0],3);  
  clrscr();  
  for(i=0;i<=2;i++)  
  printf("x[%d]=%f\n",i,x[i]);  
  getch();  
  }  
  float   *ColPivot(float   *c,int   n)  
  {  
  int   i,j,t,k;  
  float   *x,p;  
  x=(float   *)malloc(n*sizeof(float));  
  for(i=0;i<=n-2;i++)  
  {  
  k=i;  
  for(j=i+1;j<=n-1;j++)  
  if(fabs(*(c+j*(n+1)+i))>(fabs(*(c+k*(n+1)+i))))   k=j;  
  if(k!=i)  
  for(j=i;j<=n;j++)  
  {  
  p=*(c+i*(n+1)+j);  
  *(c+i*(n+1)+j)=*(c+k*(n+1)+j);  
  *(c+k*(n+1)+j)=p;  
  }  
  for(j=i+1;j<=n-1;j++)  
  {  
  p=(*(c+j*(n+1)+i))/(*(c+i*(n+1)+i));  
  for(t=i;t<=n;t++)  
  *(c+j*(n+1)+t)-=p*(*(c+i*(n+1)+t));  
  }  
  }  
  for(i=n-1;i>=0;i--)  
  {  
  for(j=n-1;j>=i+1;j--)  
  (*(c+i*(n+1)+n))-=x[j]*(*(c+i*(n+1)+j));  
  x[i]=*(c+i*(n+1)+n)/(*(c+i*(n+1)+i));  
  }  
  return   x;  
  }  
   
   
  雅可比迭代法  
  #include<alloc.h>  
  #include<math.h>  
  #define     EPS     1e-6  
  #define     MAX     100  
  float     *Jacobi(float   a[3][4],int   n)  
  {  
  float   *x,*y,epsilon,s;  
  int   i,j,k=0;  
  x=(float   *)malloc(n*sizeof(float));  
  y=(float   *)malloc(n*sizeof(float));  
  for(i=0;i<n;i++)  
  x[i]=0;  
  while(1)  
  {  
  epsilon=0;  
  k++;  
  for(i=0;i<n;i++)  
  {  
  s=0;  
  for(j=0;j<n;j++)  
  {  
  if(j==i)   continue;  
  s+=a[i][j]*x[j];  
  }  
  y[i]=(a[i][n]-s)/a[i][i];  
  epsilon+=fabs(y[i]-x[i]);  
  }  
  if(epsilon<EPS)  
  {  
  printf("迭代次数为:%d\n",k);  
  return   y;  
  }  
  if(k>=MAX)  
  {  
  printf("THE   method   is   disconvergent");  
  return   y;  
  }  
  for(i=0;i<n;i++)  
  x[i]=y[i];  
  }  
  }  
  main()  
  {  
  int   i;  
  float   a[3][4]={5,2,1,8,2,8,-3,21,1,-3,-6,1};//数组的矩阵  
  float   *x;  
  x=(float   *)malloc(3*sizeof(float));  
  x=Jacobi(a,3);  
  clrscr();  
  for(i=0;i<3;i++)  
  printf("x[%d]=%f\n",i,x[i]);  
  getch();  
  }  
    
   
  高斯赛德尔迭代法  
  #include<stdio.h>  
  #include<conio.h>  
  #include<alloc.h>  
  #include<math.h>  
  #define   N   100  
  float     *GauseSeidel(float   *a,int   n)  
  {  
  int   i,j,nu=0;  
  float   *x,dx;  
  x=(float   *)malloc(n*sizeof(float));  
  for(i=0;i<=n-1;i++)  
  x[i]=0.0;  
  do  
  {  
  for(i=0;i<=n-1;i++)  
  {  
  float   d=0.0;  
  for(j=0;j<=n-1;j++)  
  d+=*(a+i*(n+1)+j)*x[j];  
  dx=(*(a+i*(n+1)+n)-d)/(*(a+i*(n+1)+i));  
  x[i]+=dx;  
  }  
  if(nu>=N)  
  {  
  printf("迭代发散\n");  
  exit(1);  
  }  
  nu++;  
  }  
  while(fabs(dx)>1e-6);  
  return   x;  
  }  
  main()  
  {  
  int   i;  
  float   *x;  
  float   c[12]={5,2,1,8,2,8,-3,21,1,-3,-6,1};  
  float   *GauseSeidel(float   *,int);  
  x=GauseSeidel(c,3);  
  clrscr();  
  for(i=0;i<=2;i++)  
  printf("x[%d]=%f\n",i,x[i]);  
  getch();  
  }  
   
   
  Top

4 楼hab1980(秋艮)回复于 2004-04-03 01:18:18 得分 0

楼主:  
  你的第一个方程把分母移到右边,应该是一个三元三次方程吧,因为x的最高次幂是3。  
  很久没有碰数学了,不知道说得对否,不对莫怪Top

5 楼revealer(探索)回复于 2004-04-03 12:24:31 得分 0

谢谢两位,我正在看。Top

6 楼yiana1002(新的开始)回复于 2004-04-04 19:02:02 得分 0

如果楼主的方程不是三元一次方程的标准形式的话那就的,再加一个模块将其化为标准的三元一次方程Top

相关问题

  • 简单问题。帮忙看一下!
  • 简单程序,帮忙看一下!
  • 挺简单的,请帮助看一下
  • 非常简单,过来看一下?
  • 简单问题,有时间看一下.
  • 简单问题,大家来看一下!
  • 帮忙看一下,很简单那
  • 帮看一下一个简单问题
  • 求解线性方程组
  • 一个极其简单的ORACLE问题, 看一下就给分

关键词

  • float
  • gauseseidel
  • 一次方程组
  • 要解
  • malloc
  • include
  • sizeof
  • define

得分解答快速导航

  • 帖主:revealer

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo