为什么matlab符号计算如此缓慢?

为什么matlab符号计算如此缓慢?,matlab,symbolic-math,Matlab,Symbolic Math,我在用Matlab的符号工具箱进行测试。想知道为什么即使只是用符号数字计算,速度也会如此之慢。为了测试它,我写了这个 syms x x = subs(x,1); a = 1; tic for i=1:10000 z_sym = x + 1; end toc tic for i=1:10000 z_num = a + 1; end toc 对于第一个循环,它显示的运行时间是4.358483秒。对于第二个循环,在上显示的运行时间是0.000029秒。。我知道使用subs函数会

我在用Matlab的符号工具箱进行测试。想知道为什么即使只是用符号数字计算,速度也会如此之慢。为了测试它,我写了这个

syms x

x = subs(x,1);
a = 1;

tic
for i=1:10000
    z_sym = x + 1;
end
toc

tic
for i=1:10000
    z_num = a + 1;
end
toc
对于第一个循环,它显示的运行时间是4.358483秒。对于第二个循环,在
上显示的运行时间是0.000029秒。
。我知道使用subs函数会得到x=1,但它仍然是典型的
sym
,我可以通过转换来加快速度。但这就是重点


为什么计算1+1符号所需的时间是计算数字所需时间的15000倍。是什么让Matlab这么慢?

因为一个简单的数字加法是一个处理器可以轻松完成的事情,当使用符号时,编译器需要解析它,检查它是否是一个变量,应用它上面的数学规则,。。。。计算机很适合数值计算,但不适合分析计算。他们一开始就能做分析,这真是太神奇了。我不这么认为。很可能Matlab处理这个句子就像他处理200个字符的非线性希尔伯特空间方程一样。在他决定只放1和做1+1就足够了之前,他需要检查很多事情来理解分析方程。此外,Matlab中的数值计算速度非常快,有时甚至比C代码快得惊人(例如:)答案之一是数值版本很可能是优化的,而符号版本则不是。但更大的一部分答案是,你对符号数学计算难度的直觉是错误的。我没有把这个话题读得那么好!但那是另一回事。符号数字关系仍然适用!然而,Matlab在某些情况下可以像C一样快,正如@Peter所说的,Matlab是用C(某些东西)编写的。数值
for
循环几乎可以肯定是JIT编译成更快的代码(忘记别人告诉你的:
for
循环在Matlab中可能非常快)。循环的符号
几乎肯定不是。这是一个最坏的情况,但也不是一个很好的例子,说明如何在实践中使用符号数学。在许多情况下,您可以将符号表达式矢量化或使用专门的本机函数来获得更好的性能。在大多数情况下,你仍然会看到2-3个数量级的速度差异。符号数学也使用了更多的内存。