打印带有替换变量的mathjs表达式

时间:2019-05-01 19:43:08

标签: javascript math mathjs

有没有办法在范围替换之后打印表达式字符串

var n = math.compile('x * 2');
n.eval({x:2}); // returns 4

// I WISH I could do this:
n.toString({x:2}); // returns '2 * 2'

1 个答案:

答案 0 :(得分:0)

首先必须了解MathJS解析为表达式树的方式以及所使用的不同类型的节点。 您可以阅读更多here in the docs

代数变量被解析为SymbolNodes。这些将需要替换为其值。最简单的方法是使用 transform 函数,该函数在上面上一页的API中进行了解释。

来自文档

转换(回调:函数)

通过转换函数递归转换表达式树。 与Array.map类似,但是在Array.map中的所有节点上递归执行 表达式树。回调函数是接受的映射函数 一个节点,并返回该节点或原始节点的替换。 函数回调称为callback(node:Node,path:string, 父级:节点),必须返回树中的每个节点。 参数路径是包含相对JSON路径的字符串。

当节点替换为时,转换功能将停止迭代 回调函数,它将不会迭代替换的节点。

例如,替换名称为“ x”的所有SymbolNode类型的节点 具有值为3的ConstantNode:

const node = math.parse('x^2 + 5*x')
const transformed = node.transform(function (node, path, parent) {
  if (node.isSymbolNode && node.name === 'x') {
    return new math.expression.node.ConstantNode(3)
  }
  else {
    return node
  }
})
transformed.toString() // returns '3 ^ 2 + 5 * 3'