利用递归求解行列式(适用于10阶左右)
**那么何为递归呢?**递归是利用某种方法将一个大问题不断分解为规模较小的子问题,持续分解,直到规模小到可以用非常简单直接的方法解答。
***那么如何设计递归程序呢?***这里提出三条指导设计递归程序的方法。1递归算法必须有一个基本结束条件。2递归算法必须能改变状态向基本结束条件演进。3递归算法必须调用自身。
基于此,那就开始我们的正题,利用递归计算行列式。在这里我们如何把一个大规模的行列式逐渐减小规模,使其利于计算,这时,拉普拉斯定理就起了非常重要的作用。拉普拉斯定理:设在行列式D中任意取定了k(1<=k<=n-1)行,由这k行元素所组成的一切k阶子式与它们的代数余子式的的乘积的和等于行列式D。
matlab 程序如下:
function s=fdet(L)
n=length(L);
s=0;
if n<=1
s=sum(L);
else
for i=1:n
M=[L(2:n,1:i-1),L(2:n,i+1:n)];
s=s+L(1,i)*(-1)^(1+i)*fdet(M);
end
end
验证 :
L=[1,4,5,2;5,4,12,23;11,42,12,23;14,11,4,5];
disp(fdet(L))
-39136
disp(det(L))%matlab 内置函数。
-39136
当然,基于递归算法求解行列式的运算量是十分巨大的,这也就决定了这种方法只能用来算低阶行列式,高阶情况下运算量太大,短时间内难以得出结果。
想要学习更多相关知识,扫描下方二维码,关注公众号Math and Code吧!