源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

C语言解3元1次方程组 用初中学的最基本的联合消元法

  • 时间:2021-07-19 16:25 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:C语言解3元1次方程组 用初中学的最基本的联合消元法
没学过线性代数,但是很多算法都和矩阵相关,所以就硬着头皮学。 最近就想自己能不能先写个算线性方程组的程序呢?后来就想了这么个方法,暂时只能算3元的,任意元的接下来继续想。有太多硬编码,希望有兴趣的读者可以给点修改建议!
[u]复制代码[/u] 代码如下:
#include "stdafx.h"//VS2010需要 #include "stdio.h" #include "stdlib.h" #include "math.h" double x[3];//存放解x,y,z,使用数组便于输出 //x=1,y=2,z=3 //double A[3][4]= //{ // 1,1,1,-6, // 1,1,-1,0, // 1,-1,1,-2 //}; //x=2,y=5,z=10 double A[3][4]= {  1,2,3,-42,  2,-1,5,-49,  -1,3,-3,17 }; //A的第一个方程分别与2、3个方程联合消去z,得到x,y的两个方程,存入B double B[2][4]; //B的两个方程联合消去y,得到x double C[1][4]; void CombineB(int i)//A[0]与A[1]或A[2]消去z {  double m0=abs(A[i][2]);  int b=A[0][2]*A[i][2]>0?-1:1;  double mi=b*abs(A[0][2]);  //printf("m0=%lf,mi=%lf\n",m0,mi);//调试用  for(int j=0;j<4;j++)  {   B[i-1][j]=A[0][j]*m0+A[i][j]*mi;  } } void CombineC()//B[0]与B[1]消去y {  double m0=abs(B[1][1]);  int b=B[0][1]*B[1][1]>0?-1:1;  double m1=b*abs(B[0][1]);  for(int j=0;j<4;j++)  {   C[0][j]=B[0][j]*m0+B[1][j]*m1;  } } //显示4个参数 void Show(double N[][4],int d1) {  char W[3]={'x','y','z'};  for(int i=0;i<d1;i++)  {   for(int j=0;j<3;j++)   {    printf("%lf * %c + ",N[i][j],W[j]);   }   printf("%lf = 0\n",N[i][3]);  }  printf("\n\n"); } int _tmain(int argc, _TCHAR* argv[]) {  Show(A,3);  CombineB(1);  CombineB(2);  Show(B,2);  CombineC();  Show(C,1);  //得到x后则依次算出其他数字  x[0]=(0-C[0][3])/C[0][0];  x[1]=(0-B[0][3]-B[0][0]*x[0])/B[0][1];  x[2]=(0-A[0][3]-A[0][0]*x[0]-A[0][1]*x[1])/A[0][2];  //输出结果  for(int i=0;i<3;i++)   printf("x[%d]=%lf\t",i,x[i]);  printf("\n");  system("pause");  return 0; }
2.截图  [img]http://files.jb51.net/file_images/article/201311/20131111173955030.jpg?20131011174052[/img]
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部