C语言解3元1次方程组 用初中学的最基本的联合消元法
C语言解3元1次方程组 用初中学的最基本的联合消元法
发布时间:2017-01-07 来源:查字典编辑
摘要:没学过线性代数,但是很多算法都和矩阵相关,所以就硬着头皮学。最近就想自己能不能先写个算线性方程组的程序呢?后来就想了这么个方法,暂时只能算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语言学习
热门C语言学习
编程开发子分类