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

时间:2016-03-04 18:57:06

标签: arrays matlab multidimensional-array symbolic-math

根据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版本创建这样的变量?

1 个答案:

答案 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符号数学函数可能不支持此类多维数组。