matlab: добавление символьных матриц вдоль неиспользуемого измерения

#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: Спасибо, я ценю рекомендацию.