回答
Octave可以做到這一點,可以從within a C++ program調用。 您甚至可以使用SWIG輕鬆地從八度調用C++代碼來生成接口。
另一種方法是在應用程序中嵌入解釋語言並使用該語言的數學解析器。
LUA爲這個越來越受歡迎 - 見How to embed lua in c++ via SWIG
試試我ae庫,它是基於Lua的。另見Evaluating Mathematical Expressions using Lua
我有一個類似的編程需要,我用Shunting yard algorithm。 像你一樣,用於解析infix notation。
我一直使用用C++編寫的muParser進行解析。你不會得到一個可以整合的圖書館;沒有一個嚴肅的重量級的圖書館太簡單了。像Maxima,Octave等開源符號集成器存在,但它們很難與之交互,並且該功能不能輕易地與項目的其餘部分分離。
還有GNU libmatheval,它做評估和分化。整合是一個很大的問題,即使對於無辜的被積函數。
+1,我以前沒有遇到過,看起來很有趣。 – Flexo 2010-11-02 11:38:53
有MathPresso庫是解析器和數學表達式的JIT編譯器,當性能很重要時我使用它。
一些測試: 評估表達式「x/y +(x * x * y + 18.243 * y)/ z」 - 其中變量是雙精度浮點數。
- C++函數:144.1每秒百萬
- MathPresso評價:133.8百萬每秒
表達分析和綜合評價是相當不同的,這取決於你如何複雜的整合需要 – 2010-11-01 17:59:04
一些免費的調車場的算法Java和C++實現將表達式轉換爲逆波蘭表示法然後評估這些可以在這裏找到:http://www.technical-recipes.com/2011/a-mathematical-expression-parser-in-java -and-cpp/ – AndyUK 2013-07-27 15:06:39
解析數學表達式的示例:https:// stack overflow.com/a/32853177 – 2017-04-06 10:52:26