根据Matlab R2016a文档,使用sym
命令可以轻松创建符号多维数组,如下所示:
A = sym('a',[2 2 2])
,输出
A(:,:,1) =
[ a1_1_1, a1_2_1;
a2_1_1, a2_2_1]
A(:,:,2) =
[ a1_1_2, a1_2_2;
a2_1_2, a2_2_2]
但是,我使用的是Matlab 2013b,此命令不适用于多个维度。有没有其他方法可以为2013b版本创建这样的变量?
答案 0 :(得分:0)
我还没有使用R2016a,但是查看sym
类的代码(在命令窗口中输入edit sym
),编写一个&不太难#39;自己的功能:
function s = ndSym(x,a)
a = a(:).';
format = repmat('%d_',[1 numel(a)]);
x = [x format(1:end-1)];
s = cellfun(@createCharArrayElement,num2cell(1:prod(a)),'UniformOutput',false);
s = sym(reshape(s,a));
function s = createCharArrayElement(k)
[v{1:numel(a)}] = ind2sub(a,k);
s = sprintf(x,v{:});
end
end
您可以通过A = ndSym('A',[2 2 2])
进行测试,然后返回:
A(:,:,1) =
[ A1_1_1, A1_2_1]
[ A2_1_1, A2_2_1]
A(:,:,2) =
[ A1_1_2, A1_2_2]
[ A2_1_2, A2_2_2]
此函数适用于具有任意维数的数组。我在R2013b和R2015b中进行了测试。但请注意,上述功能并未包含任何输入验证以及sym
支持的许多选项/细节。这些可以添加。另外,请注意许多pre-R2016a符号数学函数可能不支持此类多维数组。