[英]Representing Math Equations as Java Objects
我試圖設計一種將數學方程表示為Java對象的方法。 這是我到目前為止所提出的:
- 擴展Term的對象將包括諸如TrigTerm之類的東西來表示三角函數。
方程
總的想法是我能夠以編程方式操縱方程式(例如,一個能夠返回方程式的方向式方法,這個方程式是它所要求的方程式的導數,或者是一個評估方程式來評估一個方程式的方程式變量等於某個值)。
我對簡單方程式的效果很好:
這只是兩個Term s:一個帶有變量“x”和一個指數“2”,另一個帶有一個常量“3”。
但對於更復雜的方程式而言並非如此:
是的,這是一個可怕的例子,但我只是說明一點。
那么現在問題是:將數學方程表示為Java對象的最佳方法是什么? 有沒有圖書館已經這樣做了?
將數學方程表示為Java對象的最佳方法是什么?
我要你注意,你沒有任何方程式。 方程看起來像這樣;
x = 3
你所擁有的是表達式:在某些情況下可以評估某些特定值的符號集合。
你應該寫一個類Expression。 表達式有三個子類:常量(例如3),變量(例如x)和操作。
操作具有類型(例如“取冪”或“否定”)以及要處理的表達式列表。 這是關鍵的想法:一個操作,它是一種表達,也有表達的一些數字。
所以你的 是SUM(EXP(X,2),3) - 即SUM操作,取兩個表達式,第一個是表達式變量X和常量2的指數,第二個是常量3。
這個概念可以無限細化,以表示您可以在紙上書寫的任何表達。
困難的部分是評估表示表達式的字符串並生成一個Expression對象 - 正如有人建議的那樣,閱讀一些關於解析的文章。 這是最難的部分,但仍然很容易。
評估表達式(給出所有變量的固定值)並打印出一個實際上很容易。 更復雜的變換(如差異化和整合)可能具有挑戰性,但仍然不是火箭科學。
有關如何編寫將輸入轉換為表達式樹的編譯器部分的詳細信息,請參閱一本好的編譯器書。
您可能會發現這個系列鼓舞人心: http : //compilers.iecc.com/crenshaw/
如果您“只是”想要評估輸入字符串,那么請查看Javassist庫中的代碼段編譯器。
在這里,我將解析的數學表達式的表示描述為Symja項目中的抽象語法樹 。
D.java文件中的D[f,x]
函數通過從System.mep文件中讀取初始Derivative[]
規則來實現派生函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.