在 Matlab 2013b 中创建多维符号数组

Create a multidimensional symbolic array in Matlab 2013b

根据 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 版本创建此类变量?

我还没有使用 R2016a,但查看了 sym class 的代码(在您的命令 Window 中键入 edit sym),它不是太很难编写自己的函数来做到这一点:

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]) 进行测试,其中 returns:

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 支持的许多 options/niceties。可以添加这些。另外,请注意许多 R2016a 之前的符号数学函数可能不支持此类多维数组。