matlab: сложение символических матриц вдоль неиспользуемого измерения - PullRequest
2 голосов
/ 23 марта 2019

Как можно суммировать символьные матрицы, собранные в массиве ячеек, по неиспользуемому измерению? Предположим, по причинам, выходящим за рамки этого поста, что матрицы должны быть элементами массива ячеек, а не плоскостями многомерной матрицы. Ниже приводится краткая демонстрация проблемы.

Предположим, у нас есть массив ячеек 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.

Тем не менее, предложения по альтернативам все еще приветствуются.

...