matlab:沿未使用维度添加符号矩阵
单元格数组中收集的符号矩阵如何沿未使用的维度求和?由于超出本文范围的原因,假设矩阵必须是单元数组的元素,而不是高维矩阵的平面。下面是这个问题的简要说明 假设我们有一个2Dmatlab:沿未使用维度添加符号矩阵,matlab,symbolic-math,Matlab,Symbolic Math,单元格数组中收集的符号矩阵如何沿未使用的维度求和?由于超出本文范围的原因,假设矩阵必须是单元数组的元素,而不是高维矩阵的平面。下面是这个问题的简要说明 假设我们有一个2Dsym向量的单元数组,如下所示: a = vpa(ones(2,2)); c = {a; 2*a; 3*a}; 尽管可以使用较新版本的matlab制作多维符号矩阵(例如,sym('c',[2])),但沿三维添加2Dsym矩阵失败 sum(cat(3, c{:}), 3) Error using symengine
sym
向量的单元数组,如下所示:
a = vpa(ones(2,2));
c = {a; 2*a; 3*a};
尽管可以使用较新版本的matlab制作多维符号矩阵(例如,sym('c',[2])
),但沿三维添加2Dsym
矩阵失败
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
不能应用于任何维度大于2的sym
矩阵
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页面
尽管如此,关于替代方案的建议仍然是受欢迎的。我只会使用循环,而不会回头看。不管怎样,符号矩阵处理起来很慢,我不会担心循环的开销可以忽略不计。@CrisLuengo:谢谢,我很感谢你的推荐。