一元函數自動求解在線計算工具

牛頓法是求解的核心方法,它的維基百科的定義爲:牛頓法是一種在實數域和複數域上近似求解方程的方法。方法使用函數f(x)的泰勒級數的前面幾項來尋找方程f(x)=0的根。簡言之,牛頓法就是對x進行叠代,直至x收斂于某個很小的範圍

所以,對于任意的一元函數,我們都可以嘗試用牛頓法來求得其近似解,當誤差小于10^-9時,或者叠代步數超過10^5時,叠代結束

在構建求解器時,有幾個關鍵問題需要解決:解析輸入的表達式,表達函數,求導函數方程,對函數進行代入求值。其中,最優先的一個問題是:我們怎麽儲存(表達)函數?

爲什麽選擇這種二分表達樹表達方式?主要是因爲它是樹形結構,方便遞歸處理節點,而我們之後求導函數其實就是用的遞歸思路,包括代入求值也是遞歸的思路\

預處理表達式:首先,我們需要預處理輸入的表達式字符串。因爲在數學中有一些簡略或者多余的寫法需要在此規範化。自然的輸入串經過預處理後,就應該是一個中綴的表達式字符串,這是人類能夠自然理解的表達式形式。但是爲了將表達式儲存成二叉表達樹,我們還需要將中綴表達式轉換成後綴表達式

调度场算法:度场算法基本和我们在栈 递归 汉诺塔文中提到的利用栈来计算表达式的方法类似。它用队列表达输出的后缀表达式,利用了栈来储存操作符和函数

构建二叉表达式树:假设输入表达式为:(a+b) * (c * (d+e)),经过调度场算法,我们得到a b + c d e + * *的后缀表达式。此时我们便可以利用后缀表达式的特点,快速的构建出一颗二叉表达树来

求值:對二叉表達樹進行代入求值的算法應該很容易就能想到。利用二叉樹的遞歸特性,根爲操作符或函數,左子樹右子樹是遞歸定義。我們只需要將左右子樹的值遞歸求出,然後在進行操作符運算即可

構建導函數樹:我們只剩下了求解導函數的步驟。這一步也是比較複雜的操作,因爲導函數的規則實在是很多。首先,表達導函數應該用二叉表達樹來進行表示,因爲可以直接對其進行代入求值,而且二叉表達樹具有遞歸的特性;其次,由于二叉表達樹的根節點總是操作符或函數的特性,左右子樹也是表達式,我們可以用遞歸的思路來求解導函數

在線工具導航