3dl.c

来自「在定时器中断中做LED的PWM输出 AT89C2051实现A/D转换的C51程」· C语言 代码 · 共 50 行

C
50
字号
//三元一次方程组的行列式解法
//方程组的形式如下:
//	A11*X1+A12*X2+A13*X3=B1
//	A21*X1+A22*X2+A23*X3=B2
//	A31*X1+A32*X2+A33*X3=B3
float A[3][3]={{3.273,-2.164,0.3582},
		{0.3697,1.534,-6.762},
		{-2.061,7.186,4.508}} ;	//三元一次方程组的系数矩阵
float B[3]={8.257,-25.10,6.588};	//三元一次方程组的常数项
float X[3];	//三元一次方程组的解:X1=1.537067,X2=-0.896159,X3=3.592657

float DETA ( ) //行列式计算
{
	return (A[0][0]*A[1][1]*A[2][2]+A[1][0]*A[2][1]*A[0][2]+A[2][0]*A[0][1]*A[1][2]
	 -A[2][0]*A[1][1]*A[0][2]-A[0][0]*A[2][1]*A[1][2]-A[1][0]*A[0][1]*A[2][2]);	
}

void swap (int k)//常数项与k列系数交换
{
	int i;
	float t;
	for (i=0;i<3;i++) {
		t=B[i];
		B[i]=A[i][k];
		A[i][k]=t;
		}
}	

void XYZ ( )	//求解三元一次方程组
{
	float d;
	d=DETA( );	//求系数行列式的值
	swap (0) ;	//将x1的系数与常数项交换
	X[0]=DETA()/d;	//解出x1
	swap (0) ;	//恢复原来的系数与常数项
	swap (1) ;	//将x2的系数与常数项交换
	X[1]=DETA()/d;	//解出x2
	swap (1) ;	//恢复原来的系数与常数项
	swap (2) ;	//将x3的系数与常数项交换
	X[2]=DETA()/d;	//解出x3
	swap (2) ;	//恢复原来的系数与常数项
}

main ( )
{
	XYZ () ;
	while (1) ; //在这一行设置断点,中止程序运行,以便观察程序运行的结果 
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?