matlab中syms空间问题

问题场景及描述:

在matlab中用syms定义一个多维的符号变量后,再利用循环进行赋值时警告未预分配内存。

例如:在求解多元非线性方程组时,需要用syms来创建符号变量来装载方程,当方程组个数可变或可选时,在赋值时也必须与个数相同。
在如下例子中,解释器会产生橙色警告,说‘f’会随迭代数而变化,请预分配内存,但在syms f [1,4]中不是已经分配过了吗?虽然警告并不影响使用,但作为一个被迫强迫症患者,消除警告势在必行。

syms x y
syms f [1,4]

for i = 1:4
    f(i) = x^i+y;
end

matlab中syms空间问题_第1张图片

原因分析:

解释器说没有预分配,说明syms f [1 4]并不会分配空间

用whos查看内存分配情况
matlab中syms空间问题_第2张图片可见f和f1,f2等都是8个字节,说明f和f1,f2,f3,f4并不是一个包含关系,


解决方案:

方法一:在syms f [1 4]前加上一行f = zeros(1,4),手动为其分配。

matlab中syms空间问题_第3张图片可见警告消失了。

方法二:使用sym代替syms

matlab中syms空间问题_第4张图片依旧可行,GG!

你可能感兴趣的:(matlab,数据结构,迭代加深,经验分享)