我一直在徒劳地尝试将线性方程式等于零。
我正在使用Math.js库对我提供的方程式执行一阶微分:
const derivative = math.derivative(equation,"x");
这为我提供了以下内容:
(0.10471975511965977 * (x * -2 / 3 + 72) - 0.06981317007977317 * x) * 2025 / 3.37496e+5
我想将此等于0,以找到x。
我尝试使用Algebra.js,但解析器似乎存在负数问题(请参见https://github.com/nicolewhite/algebra.js/issues/88)
有什么方法可以做到这一点(最好使用一个库)。
答案 0 :(得分:1)
我避免通过字符串表示形式,而是通过递归转换将Math.js expression tree转换为Algebra.js expression tree。如果Math.js表达式支持访问者模式会更容易,但是您可以通过扩展相应的原型将其添加到库中,或者使用一系列区分大小写的方法。处理3或4个节点类型的可能性最大应该就足够了:OperatorNode,SymbolNode,ConstantNode,也许还有ParenthesisNode。
答案 1 :(得分:1)
您可以为此nerdamer进行尝试,尤其是因为您更喜欢图书馆。请参阅摘要。完全披露,我写了nerdamer。希望它会有所帮助。
var ans = nerdamer.solve('(0.10471975511965977 * (x * -2 / 3 + 72) - 0.06981317007977317 * x) * 2025 / 3.37496e+5', 'x');
console.log(ans.toString());
<script src="https://cdn.jsdelivr.net/npm/nerdamer@0.7.16/nerdamer.core.js"></script>
<script src="https://cdn.jsdelivr.net/npm/nerdamer@0.7.16/Algebra.js"></script>
<script src="https://cdn.jsdelivr.net/npm/nerdamer@0.7.16/Calculus.js"></script>
<script src="https://cdn.jsdelivr.net/npm/nerdamer@0.7.16/Solve.js"></script>