recursion - 为什么这个 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-初级
解决方案
问题是由于 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 函数更加精确和高效
推荐阅读
- java - Thymeleaf 不适用于 lombok forEach
- javascript - Safari 12 css 动画效果不佳
- types - graphQL - 是否可以从单个解析器函数将关系数据解析为不同类型?
- c - Makefile 中未定义对“le16toh”错误的引用
- sql - 跨行累积减法
- android - VS2017 未附加到 Android 上的统一应用程序 - 显示在列表中,选择时没有任何反应
- laravel - 使用模型在 Laravel-admin 中设置上传图片的名称
- c# - 在 UserControls 之间共享数据的最佳实践
- python - Python Pandas If Else 返回多个值 DataFrame 值
- java - NoSuchMethodError 使用 JNA User32 平台映射