2012-10-06 39 views
0

我已經構建了一個完整的工作計算器,用於評估任何表達式並繪製它。我還構建了一個符號區分器,它可以正確區分公式w.r.t. x但是我有點失落了,因爲如何以編程方式簡化任何泛型方程式,因爲在那一刻答案出現了許多倍數的答案。我意識到一個* 1很容易簡化,但我需要一個全面的簡化來覆蓋任何情況。表達式編程

+0

最好的(許可方式)做到這一點恕我直言,是使用[sympy](https://github.com/sympy/sympy/wiki)爲你做簡化。 – enobayram

+0

不,我需要自己做,它是iOS應用程序,所以我不認爲我可以在那裏實現該庫。我有簡單的方程來簡化,它看起來像X這樣的每個'字母',並通過查看其中每個表達式的其餘表達式的X的冪來簡化它,但它不適用於括號或其他函數。 – bobjamin

+0

關鍵是你正在尋找一個計算機代數系統(CAS),C++計算機代數系統出現[SymbolicC++](http://issc.uj.ac.za/symbolic/symbolic.html),雖然它有一個GPL許可證,這可能不適合您的需求。如果你堅持從頭開始,我認爲這比數學編程更像是一個數學問題,這超出了Stackoveflow的範圍。你也可以考慮在服務器上進行簡化,然後你不必去解決一個邪惡公司的任意限制...... – enobayram

回答

1

我認爲簡化是一種歸一化的形式。也許你可能要實施的第一件事是多項式的簡化:

  • 計算包含在所有
  • 沒有變量定義的順序爲您的變量,除非X是唯一有效的變量爲您帶來任何的子表達式根據它們的變量
  • 基於變量這個量級上,限定用於單項式的順序,這需要變量及其度考慮
  • 階項用於在單項式
  • 次項根據自己的單項
  • 多項式識別重複的單項式,並結合他們的係數
  • 刪除其變成零

如果你也想簡化包含函數的表達式的所有單項式,事情就會變得更加任意複雜。一般來說,我會嘗試定義一些方法來衡量一個術語的簡單性,即給定兩個術語,決定哪一個更簡單。然後你可以考慮規則並檢查你是否可以保證他們只會讓你的條款更簡單。您可能還想檢查終止(即,無論您的條款對於無數步驟而言都變得更簡單)和匯合(即,當有兩種可能的簡化時,您接下來要做哪一項並不重要,因爲最終結果將是相同的)。

您可能想要閱讀關於term rewriting,rewrite systems及相關主題的一些文獻。

+0

感謝你的輸入,你所說的幾乎是我所需要的,它是匹配的我自己到目前爲止的解決方案的發展,功能確實證明是困難的。 – bobjamin