我是 Julia 的新手,只是想将我的 MATLAB 代码移动到IntervalRootFinding
包中以找到所有潜在的根源。如果我使用我在 MATLAB 中编写矩阵运算的习惯并且不理解 Julia 处理变量类型的方式,我深表歉意。
我试图找到 6 个变量(一个向量和一个 2x2 矩阵)的函数的所有根。我的第一个版本的代码看起来像这样
function EXAMPLE1((a, b); param=param_default)
(Some operations taking a as a 2x1 vector and b as a 2x2 matrix.)
return SVector{6}(condition1, condition2,...,condition6)
end
然后我意识到不可能告诉roots
函数矩阵中元素的间隔,所以我重写了我的函数,以便将标量变量作为输入。但是由于我所有的计算在矩阵中的效率更高,所以我在函数的第一行构造了向量和矩阵,这使我的代码
function EXAMPLE2((a1, a2, b11, b12, b21, b22); param=param_default)
a = [a1 a2]';
b = [b11 b12; b21 b22];
(Same operations taking a as a 2x1 vector and b as a 2x2 matrix.)
return SVector{6}(condition1, condition2,...,condition6)
end
# Define intervals and finding roots
A = 0..10
B = 0..1
rts = roots(EXAMPLE2, A × A × B × B × B × B )
当我使用随机输入测试函数时
EXAMPLE2(1.0,1.0,0.3,0.3,0.3,0.3)
它通过并给了我6-element SVector{6, Float64} with indices SOneTo(6):
。但是当我roots
在我的函数上运行时,出现以下错误
ERROR: LoadError: MethodError: no method matching Float64(::Interval{Float64})
这条线a = [a1 a2]';
被标记为红色。
它看起来像一个数据类型不匹配的问题 - 它不能将 a 分配Float64 Interval
为数组的元素a
?是因为IntervalRootFinding
还是roots
仅适用于对标量进行操作的函数,而不支持多维数组的函数?
另一种提问方式是,由于我只是想找到矩阵函数的所有根,因此 Julia 中是否有更好的包用于此目的?对矩阵更灵活,例如fsolve
在 MATLAB 中,但给出所有根?
将我的函数重写为标量操作几乎是不可能的,我不会费心去尝试。非常感谢任何讨论这个问题的人。