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, но дает все корни?

Переписать мои функции в скалярную операцию почти невозможно, я не буду пытаться. Большое спасибо всем, кто это обсуждает.

0 ответов

Другие вопросы по тегам