在 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 之前的符号数学函数可能不支持此类多维数组。
根据 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 之前的符号数学函数可能不支持此类多维数组。