手机
当前位置:查字典教程网 >编程开发 >C语言 >C语言解3元1次方程组 用初中学的最基本的联合消元法
C语言解3元1次方程组 用初中学的最基本的联合消元法
摘要:没学过线性代数,但是很多算法都和矩阵相关,所以就硬着头皮学。最近就想自己能不能先写个算线性方程组的程序呢?后来就想了这么个方法,暂时只能算3...

没学过线性代数,但是很多算法都和矩阵相关,所以就硬着头皮学。

最近就想自己能不能先写个算线性方程组的程序呢?后来就想了这么个方法,暂时只能算3元的,任意元的接下来继续想。有太多硬编码,希望有兴趣的读者可以给点修改建议!

复制代码 代码如下:

#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=%lfn",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 = 0n",N[i][3]);

}

printf("nn");

}

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]=%lft",i,x[i]);

printf("n");

system("pause");

return 0;

}

2.截图

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

【C语言解3元1次方程组 用初中学的最基本的联合消元法】相关文章:

C语言中字符串和数字的相互转换实现代码

浅析C语言头文件和库的一些问题

C语言解线性方程的四种方法

C语言编写银行打印程序实例参考

C 语言基础教程(我的C之旅开始了)[五]

使用C语言实现CRC校验的方法

C语言中的内存泄露 怎样避免与检测

C++中用substr()函数消除前后空格的解决方法详解

C语言数组指针的小例子

C 语言基础教程(我的C之旅开始了)[四]

精品推荐
分类导航