Julia IntervalRootFinding не позволяет функциональным переменным быть векторными или матричными?
Я новичок в Джулии и просто пытаюсь переместить свой код MATLAB в пакет, чтобы найти все потенциальные корни. Извините, если я использую свои привычки написания матричных операций в MATLAB и не понимаю, как Джулия обращается с типами переменных.
Я пытаюсь найти все корни функции 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
Затем я понял, что невозможно сообщить функции интервал элементов в матрице, поэтому я переписал свою функцию так, чтобы она принимала скалярные переменные в качестве входных данных. Но так как все мои вычисления намного эффективнее делать в матрице, я построил вектор и матрицу в первой строке функции, что сделало мои коды для
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):
. Но когда я запускаю свою функцию, я получаю следующую ошибку
ERROR: LoadError: MethodError: no method matching Float64(::Interval{Float64})
и линия
a = [a1 a2]';
был отмечен красным.
Похоже на проблему несоответствия типа данных - он не может назначить
Float64 Interval
как элемент массива
a
? Это потому что
IntervalRootFinding
или же
roots
работает только с функциями, оперирующими скалярами, а не поддерживает функции многомерных массивов?
Другой способ спросить, поскольку я просто пытаюсь найти все корни функции матрицы, есть ли в Джулии лучшие пакеты для этой цели? Более гибкий для матриц, таких как
fsolve
в MATLAB, но дает все корни?
Переписать мои функции в скалярную операцию почти невозможно, я не буду пытаться. Большое спасибо всем, кто это обсуждает.