我想在C#中實現一個基礎架構,它允許我創建任意的數學表達式。舉例來說,我希望能夠採取一種表達喜歡確認格林布恩在C中的第10條定律#
ASIN(開方(Z - SIN(X + Y)^ 2))
,並把它變成一個對象,讓我來評價它就x,y和z而言,可以得到導數,並且可能對它做某種象徵代數。在C#中,人們對此有何看法?
我有我自己的想法,我恐怕要去建築航天學,所以我想確保不是這樣。
基本上,像罪,+,SQRT等的功能的具有類基於離基類:
Function
Function<TOut> : Function
TOut Value
Function<Tin, TOut> : Function
TOut Evaluate(TIn value)
Function Derivative
Function<TOut, TIn> INverse
Function<TInA, TInB, TOut> : Function
TOut Evaluate(TInA valueA, TInB valueB)
Function PartialDerivativeA
Function PartialDerivativeB
到目前爲止,那麼簡單。訣竅是如何編寫函數。在這裏,我相信我想要一些類似柯里化方法的東西,以便我可以評估單個參數的功能,並保留其他參數。所以我想有這樣的工廠類:
Function<TInA, TInB, TOut> ->
Function<TInA, Function<TInB, TOut>>
(Function<TInA, TInB, TOut>, Function<TInX, TInA>, null) ->
Function<TInX, Function<TInB, TOut>>
(Function<TInA, TInB, TOut>, Function<TInA>, Function<TInX, TInY, TInB>) ->
Function<TInX, Function<TInY, TInB>>
等等。我主要關心的是泛型類型可能會使系統無法使用(如果用戶需要知道完整的泛型類型以便評估),並且我可能無法從輸入參數構造所有泛型類型。
感謝您的輸入!
我建議使用類似Matlab或Mathematica之類的東西,而不是試圖重新發明車輪。 – davr 2010-02-05 21:30:18
你爲什麼認爲你需要用泛型來做到這一點?它看起來完全可行(並且更簡單一些),使用普通的類層次結構。 – RBarryYoung 2010-02-05 21:32:02