首页 > 解决方案 > matlab:沿未使用的维度添加符号矩阵

问题描述

如何将单元格数组中收集的符号矩阵沿未使用的维度求和?假设出于本文范围之外的原因,矩阵必须是元胞数组的元素,而不是高维矩阵的平面。以下是该问题的简要说明。

假设我们有一个二维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 不同,符号 sum 函数不适用于多维数组。有关详细信息,请关注 MATLAB sum 页面。

尽管如此,仍然欢迎有关替代方案的建议。

标签: matlabsymbolic-math

解决方案


推荐阅读