在线一元函数(方程)求解计算工具

该侠剑江湖工具箱可非常简单直观的对一元函数(方程)进行求解运算,给出运算结果的同时详细说明运算步骤,下方还对求解运算的原理进行了详尽的文字说明,提供给需要的朋友使用。


一元函数自动求解器 / 在线一元方程求解

  • 请先看一道题:求解x,使得 e^-x-x=0,如果你能用纸笔解出这道题的话,请务必留言告知我方法,如果你不能用纸笔解出这道题的话,那么我们可以完全借助代码来对其进行求解。
  • 以下就是我写的求解器,它几乎能够对所有的一元函数进行自动求解。可以在输入框内尝试任意一元函数,按Enter键或点击求解按钮进行求解。如有bug请留言,谢谢。
  • 支持函数:加+ 减- 乘* 除/ 乘方^ 三角函数 对数函数ln(x)和log(base,x)
 一元函数: 
= 0

一元函数(方程)求解计算工具原理

  • 牛顿法是求解的核心方法,它的维基百科的定义为:牛顿法是一种在实数域和复数域上近似求解方程的方法。方法使用函数f(x)的泰勒级数的前面几项来寻找方程f(x)=0的根。简言之,牛顿法就是对x进行迭代,直至x收敛于某个很小的范围。
  • 所以,对于任意的一元函数,我们都可以尝试用牛顿法来求得其近似解,当误差小于10^-9时,或者迭代步数超过10^5时,迭代结束.
  • 在构建求解器时,有几个关键问题需要解决:解析输入的表达式,表达函数,求导函数方程,对函数进行代入求值。其中,最优先的一个问题是:我们怎么储存(表达)函数?
  • 为什么选择这种二分表达树表达方式?主要是因为它是树形结构,方便递归处理节点,而我们之后求导函数其实就是用的递归思路,包括代入求值也是递归的思路。
  • 预处理表达式:首先,我们需要预处理输入的表达式字符串。因为在数学中有一些简略或者多余的写法需要在此规范化。自然的输入串经过预处理后,就应该是一个中缀的表达式字符串,这是人类能够自然理解的表达式形式。但是为了将表达式储存成二叉表达树,我们还需要将中缀表达式转换成后缀表达式。
  • 调度场算法:度场算法基本和我们在栈 递归 汉诺塔文中提到的利用栈来计算表达式的方法类似。它用队列表达输出的后缀表达式,利用了栈来储存操作符和函数。
  • 构建二叉表达式树:假设输入表达式为:(a+b) * (c * (d+e)),经过调度场算法,我们得到a b + c d e + * *的后缀表达式。此时我们便可以利用后缀表达式的特点,快速的构建出一颗二叉表达树来。
  • 求值:对二叉表达树进行代入求值的算法应该很容易就能想到。利用二叉树的递归特性,根为操作符或函数,左子树右子树是递归定义。我们只需要将左右子树的值递归求出,然后在进行操作符运算即可。
  • 构建导函数树:我们只剩下了求解导函数的步骤。这一步也是比较复杂的操作,因为导函数的规则实在是很多。首先,表达导函数应该用二叉表达树来进行表示,因为可以直接对其进行代入求值,而且二叉表达树具有递归的特性;其次,由于二叉表达树的根节点总是操作符或函数的特性,左右子树也是表达式,我们可以用递归的思路来求解导函数。
  • 更多算法原理的相关内容可查看http://wuzhiwei.net/newton_method_auto_solver/ 。