#matlab #symbolic-math
#matlab #символьный-математика
Вопрос:
Как можно суммировать символьные матрицы, собранные в массиве ячеек, по неиспользуемому измерению? Предположим, по причинам, выходящим за рамки этого поста, что матрицы должны быть элементами массива ячеек, а не плоскостями матрицы более высокой размерности. Далее следует краткая демонстрация проблемы.
Предположим, у нас есть массив ячеек из 2D sym
векторов, подготовленный следующим образом:
a = vpa(ones(2,2));
c = {a; 2*a; 3*a};
Несмотря на то, что возможно создавать многомерные символьные матрицы с более новыми версиями matlab (например, sym('c', [2 2 2])
), добавление 2D sym
матриц вдоль третьего измерения завершается неудачей
sum(cat(3, c{:}), 3)
Error using symengine
Arguments must be 2-dimensional.
При числовых вводах операция выполняется успешно:
a = ones(2,2);
c = {a; 2*a; 3*a};
sum(cat(3,c{:}), 3)
6 6
6 6
Редактировать:
На самом деле, проблема многомерного сложения является более общей, чем я думал: sum
не может быть применена к любой sym
матрице размерности больше 2.
a=vpa(ones(2,2));
sum(a,1)
[ 2.0, 2.0]
sum(a,2)
2.0
2.0
a = vpa(ones(2,2,2));
sum(a,1) % fails
sum(a,2) % fails
sum(a,3) % fails
Ручное добавление плоскостей вдоль третьего измерения работает, поэтому итеративное добавление является вариантом, хотя sum
было бы предпочтительнее:
a=vpa(ones(2,2,2));
plus(a(:,:,1), a(:,:,2))
[ 2.0, 2.0]
[ 2.0, 2.0]
Правка # 2:
Согласно этой странице, проблема, по-видимому, неизбежна, поскольку поддержка размерности >2 явно не предлагается.
В отличие от MATLAB® sum, функция символьной суммы не работает с многомерными массивами. Для получения подробной информации перейдите на страницу MATLAB sum.
Тем не менее, предложения по альтернативам по-прежнему приветствуются.
Комментарии:
1. Я бы просто использовал цикл и не оглядывался назад. Символьные матрицы в любом случае работают медленно, я бы не беспокоился о незначительных накладных расходах цикла.
2. @CrisLuengo: Спасибо, я ценю рекомендацию.