Как можно суммировать символьные матрицы, собранные в массиве ячеек, по неиспользуемому измерению? Предположим, по причинам, выходящим за рамки этого поста, что матрицы должны быть элементами массива ячеек, а не плоскостями многомерной матрицы. Ниже приводится краткая демонстрация проблемы.
Предположим, у нас есть массив ячеек 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
Edit:
На самом деле, проблема многомерного сложения является более общей, чем я думал: 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®, функция символьной суммы не работает на многомерных массивах. Для получения подробной информации перейдите на страницу сумм MATLAB.
Тем не менее, предложения по альтернативам все еще приветствуются.