递归法求解矩阵行列式

    方阵行列式的求解是线性代数学习的重要内容,行列式能显示矩阵的某些重要特性,如:行列式的值不为0,表示方阵可逆。此外,行列式在几何上表示空间几何体的体积,这里就不详细展开论述,具体可以参见相关线性代数教材!

    在线性代数教材中,常用按行/列展开方式求解方阵行列式,所以根据这个思路,我编写了相应的C语言程序:该程序采用了递归的方法,由于递归方式会耗用大量内存空间,所以本程序存在相应的缺点,经测试,最高只能计算7*7阶方阵行列式(可以计算个别8*8阶方阵行列式),但对于大学线性代数课程的方阵求解完全够用,而且涉及到递归的使用,二维数组作为函数参数传递等C语言知识点的学习有一定意义。

    本程序在主函数采用了循环输入的矩阵的阶,并用随机数生成相应的方阵,方阵元素在1~9中随机取值,在对方阵进行求解行列式,读者可根据需要修改主函数,实现自己需要的功能,本程序是在Ubuntu14.04系统下书写的,采用文本编辑器为Vim,编译器为Gcc,程序代码如下:

/*=======================================================

 # Author:      Joker@HIT    [email protected]
 # Filetype:    C source code
 # Date:        Mon Aug 22 2016
 # Environment: Linux & Ubuntu 14.04
 # Tool:        Vim & Gcc
 # Descprition: Solve square matrix's (n*n) determinant
                by recursion, but limited by the core 
				storage, the max size is 7*7.

=======================================================*/

#include
#include
#include

#define MAX_ROW 8 

int calculate(int [][MAX_ROW], int);
void exchange(int [][MAX_ROW], int, int);

int main(void)
{
	int matrix[MAX_ROW][MAX_ROW];
	int det_value;
	int row, i, j, dim;

	srand((unsigned int)time(0));
	printf("Enter the matrix size: ");
	while(scanf("%d", &row)==1){
		if(row<=0||row>MAX_ROW){
			printf("The matrix size is out of range, input again!\n");
			continue;
		}

		printf("Create %d*%d random matrix!\n", row, row);
		dim = row;
		for(i=0;i

运行结果如下图所示:

递归法求解矩阵行列式_第1张图片

如上图所示,循环输入矩阵大小,自动生成随机数矩阵,并计算方阵行列式的值,按q退出!


如果大家有什么修改意见,欢迎留言或者邮箱探讨,对于代码的不足还望大家多多指正!


你可能感兴趣的:(C/C++)