Javascript 后缀数学

Javascript Postfix Math

我 运行 遇到了一个关于程序速度的小问题,我想知道如何解决它。我正在接受以下形式的用户输入方程式:

"y = 3*x^2 - 2*x"

为简洁起见,我将使用此示例。将其转换为后缀后,我得到:

[ 3, x, 2, ^, *, 2, x, *, - ]

因此,如果我想绘制此图形,我只需简单地创建一个 x 值数组并找到相应的 y 值让我的线通过。但是,如果我可以接受此用户输入并将其转换为如下函数,则该函数的计算速度会快得多(这对于制作动画图形至关重要):

function userExpression( x ){
  return 3*Math.pow(x,2)-2*x
}

有什么方法可以将此字符串转换为函数以加快计算速度。我很清楚我可以解析我所做的后缀表达式并且它会起作用,但我相当确定这将成为一个非常糟糕的瓶颈,特别是如果我正在使用 3D 图形.

我想在页面中注入 html 和 script 标签,但我想听听其他人在这种情况下会怎么做。另外,我很想知道您是如何用其他语言(例如 C 或 C++)来实现的,Python,任何真的。

如果您已经弄清楚如何解析表达式并生成必需的 Javascript 作为字符串,那么您可以通过使用 Function 构造函数创建编译函数来优化性能:

var expression = "return 3 * Math.pow(x, 2) - 2 * x;";
var func = new Function("x", expression);

snippet.log(func(-2));
snippet.log(func(-1));
snippet.log(func(0));
snippet.log(func(1));
snippet.log(func(2));
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

请记住关于 eval() 的所有常见注意事项,因为这实际上并没有什么不同,尽管它应该比 eval() 性能更高,因为该函数是在全局范围内编译的。