难度系数:★★★☆☆
设想:利用 二维数组存放矩阵,利用 递归法将行列式展开然后降阶运算。
一、知识预备
• 利用
二、基本思路
• 由于3阶以下的行列式计算可以直接使用对角线法则,因此对于高阶行列式,考虑从降阶的角度入手. 降阶的具体方法是将行列式按第一列展开,并将代数余子式再按其第一列展开,依此类推,直至行列式被降阶至3阶及3阶以下;
• 是可以定义一个用来执行
三、实现方法
1. 定义主函数,分别来实现:输入行列式的阶(order),判断阶是否合法;如果阶合法,再输入一个order阶行列式本身,这里采用二维数组来储存矩阵(matrix);利用另定义的行列式计算函数(determinant),将矩阵和阶传入 determinant 函数,计算行列式的值;最后输出结果.
int
2. 接着来编写 determinant 函数. 如果行列式为1阶,行列式的值便是
int
其中
展开的结果是一个余子式
sign
于是有:
int
3. 编写 laplace_expansion 函数计算余子式的值:
在 determinant 函数中,我们向 laplace_expansion 函数传递了选定的行
for
这样一来,二维数组cofactor中储存了余子式对应的矩阵,这时候把cofactor和降阶后的阶数order - 1 传回 determinant 函数,利用
determinant
计算余子式的值,而如果余子式依然高于1阶,determinant 函数又回让余子式重新执行laplace_expansion 函数继续降阶,直至被降至1阶. 如此操作,便在两个函数之间实现了递归,行列式被一层层“剥开”并被逐步计算出来. 整个过程的代码为:
int
这时候,整个程序已经能实现行列式计算了,最后加上一些基本的说明以便用户操作即可. 以下是本程序的全部代码:
#include
附上.c文件:
四、一些说明
• 这个行列式计算器理论上可以计算
matrix
中的20修改为更大数值即可提高计算上限;
• 展开时不一定要选定第一列,只要修改 deteminant 函数中的
cofactor
这一行的 0 修改为其他数值便能改为其他列,或者修改
for
循环中的
最后,让行列式计算器解一个书本例题:
上述方法并不是最简单的,只是展现本人对递归计算行列式的一些思路,仅供参考。