2010-11-13 96 views
5

我試圖找到類似Java Embedding Plugin(JEP)的東西,它可以評估數學公式(字符串)並返回答案。數學表達式(字符串)到Java中的數字

但它也應該計算一個變量,例如:(25 + 36 + X)* 2 = 25應該給:X = -11

有點像http://www.wolframalpha.com/,但它不應該是通用的,它應該離線工作。

開源是首選。

我需要它爲我的小計算器項目,http://sourceforge.net/projects/calex/

+0

這不應該是封閉的,因爲他要解決的一個方程,是不是找像javascripts eval()。 – stacker 2010-11-13 17:40:03

+2

除非你將自己侷限於幾種形式的方程式(比如線性直到四次方程式),否則這將是一個重大項目。 http://en.wikipedia.org/wiki/Comparison_of_computer_algebra_systems有幾個Java的。 – 2010-11-13 18:47:13

回答

3

這叫做Arithmetic evaluation。最簡單的方法之一是使用Edsger Dijkstra Shunting-yard_algorithm

的調度場算法是用於解析在綴表示法指定的數學方程 一個 方法。 它可用於產生 逆向波蘭記數法(RPN)或 抽象語法樹(AST)的輸出。該算法由Edsger Dijkstra發明,並命名爲「調車場」 算法,因爲其操作 類似於鐵路分流 碼。像RPN評估一樣, 分流碼算法是基於堆棧的 。中綴表達式是 形式的數學符號,大多數 人們習慣於,例如3 + 4 或3 + 4 *(2-1)。對於轉換, 是兩個文本變量(字符串), 輸入和輸出。還有一個 堆棧,用於將運營商尚未將 添加到輸出隊列中。爲了轉換, 該程序以 的順序讀取每個符號,並且基於該 符號進行一些操作。

但我已經看到確切的解決方案你在一些stackoverflow用戶博客上尋找什麼,但我不記得地址(這就像'代碼monkeyism')。它是輕量級類,可以在小程序中使用(您也可以定義常量和重置值)。

編輯:發現:http://tech.dolhub.com/Code/MathEval

一個線性遞歸數學計算器

這個數學表達式求值器誕生出需要有一個小巧的,並且可以評估有效的解決方案任意表達式合理有效,無需預編譯。我需要一些能夠對變量進行基本數學運算的表達式,例如:「Top + 2」,「Bottom-2」和「(Right + 1-Left)/ 2」。

在互聯網上的研究出現了一些相當不錯的解決方案,所有這些都圍繞創建分析樹(這是有道理的)。問題是 - 它們都很笨重,我不能僅僅爲數學增加100K到我的小程序大小。所以我開始想知道這個問題的線性遞歸解決方案。最終結果是一個可接受的單一課程,沒有外部依賴性,重量不到10 KiB。

+2

除了我的評估者不會在變量是未知數的問題中求解象例子這樣的方程。它只能使用試驗和錯誤來計算x的各種值,並評估'(25 + 36 + x)* 2',直到給出的答案爲25. – 2010-11-13 20:39:49

+1

您必須操縱方程來自己在x等於:我認爲(25 + 36 + x)* 2 = 25' =>'x = 25/2-(25 + 36)',如果我正確地記得我的數學,正確地評價爲-48.5, 11。 – 2010-11-13 20:45:51

+0

嗯,是的。 Wolfram alpha使用一些奇特的AI來修復無效輸入,並且'(25 + 36 + x)* 2 = 25'成爲'Solve [(25 + 36 + x)* 2 == 25,x]',他需要編寫一個「線性系統求解器」或手動完成。 – Margus 2010-11-13 21:05:15

相關問題