簡體   English   中英

將數學方程表示為Java對象

[英]Representing Math Equations as Java Objects

我試圖設計一種將數學方程表示為Java對象的方法。 這是我到目前為止所提出的:

  • 術語
  • - 包括諸如系數(可以是負數),指數和變量(x,y,z等)之類的字段。 有些字段甚至可能完全符合他們自己的條件,引入遞歸。
  • - 擴展Term的對象將包括諸如TrigTerm之類的東西來表示三角函數。

  • 方程

  • - 這是Term的集合
  • - Equation的toString()方法將調用其所有Term的toString()方法並連接結果。

總的想法是我能夠以編程方式操縱方程式(例如,一個能夠返回方程式的方向式方法,這個方程式是它所要求的方程式的導數,或者是一個評估方程式來評估一個方程式的方程式變量等於某個值)。


我對簡單方程式的效果很好:
x ^ 2 + 3
這只是兩個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM