时间:2021-05-20
没学过线性代数,但是很多算法都和矩阵相关,所以就硬着头皮学。
最近就想自己能不能先写个算线性方程组的程序呢?后来就想了这么个方法,暂时只能算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=%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.截图
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了JS求解三元一次方程组值的方法。分享给大家供大家参考,具体如下://求用js码一段代码求三元一次方程组的值!//a1=y*b1+z*c1-d1*x
补充知识:正定矩阵奇异矩阵严格对角占优要理解Gauss消去法,首先来看一个例子:从上例子可以看出,高斯消去法实际上就是我们初中学的阶二元一次方程组,只不过那里的
百钱买百鸡问题是三元一次方程组可以解决的问题,可以用excel来进行解答。 1、打开excel,进入vbe窗口。 2、插入模块。 3、在模块1里编程-
学过数学的人都知道,高斯消元法是解线性方程组是,算法很简单,但过程很复杂,这就是我在网上找不到免费的且正确的高斯消元法的原因了。所以我下决心自己编,结果Idoi
复制代码代码如下:在线一元二次方程式计算器解二次方程式计算x2+x+=0一元二次方程的解法x1=x2=MadebyCRoot