2

How to Preallocate memory in Large Symbolic Matrix manipulation in MATLAB.

For eg: In code given below size of variable "Toc" and "Tnw" increase in each iteration. I have tried preallocation by Toc = zeros(0,50) but there is error "error occurred converting from sym to double". So what is symbolic version of syntax for Preallocation?

syms c z
Tnw = 1;
for i = 1:9
    Toc(c, z) = [(1-c)*z c-c*z ; -c+c*z (1+c)*z];
    f = collect(Toc(c,z));
    Tnw = Tnw*f;
end

So what is best practice used for Preallocation in large symbolic manipulation?

Thanks in advance

4

1 回答 1

2

首先,zeros(0,50)不会分配任何东西。它不是一个空向量。它也是一个 double 类型的向量,这就是为什么当您尝试在其中存储符号值时会出现错误的原因。我不确定“最佳实践”,但这就是我分配符号数组的方式。

Toc = sym(zeros(1,50));

分配一个双精度数组,然后将其重铸为符号。更新:在较新版本的 Matlab 中,您可以使用zeros(1,50,'sym')or zeros(1,50,'like',Y),其中Y是任意大小的符号变量。

Tnw但是,在您的示例中,和数组的维度Toc不会像您所说的那样在每次迭代中增长。增长的是每个元素中字符串的长度Tnw。我认为这可能是您真正要问的问题,而且我认为这不是您可以预先分配的东西。您必须将其留给符号引擎。

最后,您似乎不必要地使用符号函数 ( symfun) 而不是Toc. 这两行将是相同的:

Toc = [(1-c)*z c-c*z ; -c+c*z (1+c)*z];
f = collect(Toc);
于 2013-05-27T18:24:23.890 回答