表达式的单变量导数(符号)

时间:2013-11-17 15:46:38

标签: javascript math expression-trees algebra

我使用JavaScript编写了一个HTML代码来区分单个变量函数。 我的代码是here。我用Mathjax打印输出。但产生的产出并未简化。例如,sin(x)/cos(x)的导数生成为

((((cos(x))*(cos(x)))-((sin(x))*(-(sin(x)))))/((cos(x))^2))

可以简化为

(sin(x)^2+cos(x)^2)/cos(x)^2

我用Dijkstra的调车码算法构造了表达式树。然后递归地构造了导数的表达式树。但我对简化有问题。

任何人都可以帮助简化输出的产生吗?我的知识不仅仅是基本的数据结构。

1 个答案:

答案 0 :(得分:1)

我只能想到代数规则的实现。

  • 极难编码
  • 更难调试

1.创建简化方程列表

  • 像:

    cos^2(x)+sin^2(x)=1
    ...
    
  • 这很容易

  • 但注意不要在这里添加循环方程式(因此它会循环而不是结束)
  • 或不简化输出的规则

2.创建替代方法列表

3.通过等式

  • 测试所有简化规则
  • 如果可以应用,则应用它(难以编码)
  • 如果没有找到,那么尝试替换(极端难以正确编码)
  • 如果仍然没有找到则停止

4.对于等式

的所有表示,得出第3点
  • 等式可以用更多方式写出
  • exponentiol
  • 分数等......
  • 您需要测试所有变体