首页 > 解决方案 > 为什么这个 Scilab 递归查找行列式的程序不起作用?

问题描述

我试图找到 $N\timesN$ 矩阵的行列式。这是我的代码:

clc
function determinant=take_detm(A)
order=sqrt(length(A))
disp(order)
if order==2 then 
    determinant=A(1,1)*A(2,2)-A(1,2)*A(2,1);

else

    s=0
    for i=1:order
        s=s+((-1)^(i+1))*A(1,i)*take_detm(A(:,i)=[]);//deleting 1st row and a column in the recursive call
    end
    determinant=s

end
endfunction
matr=input("Enter a matrix")
printf (string(take_detm(matr)))

这就是问题所在:当我运行代码并输入矩阵为: [1 2 3 4;5 6 7 8;9 10 11 12;13 14 15 16] 控制台打印 4 (顺序)并且程序挂起。我得到了 Windows 7 的滚动蓝色环,一段时间后,一条消息说 Scilab 6.0.1 已停止工作。算法有问题还是有其他问题?PS-初级

标签: recursionscilabdeterminants

解决方案


问题是由于 A(:,i)=[] 指令造成的。分配 [] 仅适用于一组完整的行或一组完整的行,因此您的指令只是删除了 A 矩阵的第 i 列(结果是一个矩形矩阵)

你可以解决这个问题

    Ai=A(2:order,[1:i-1 i+1:order])//deleting 1st row and  column i
    s=s+((-1)^(i+1))*A(1,i)*take_detm(Ai); //recursive call

但是请注意,Scilab det 函数更加精确和高效


推荐阅读