2011-03-23 50 views
8

有沒有人知道一個無理數的表示類型/對象/類/無論在任何編程語言?任何編程語言中的非理性數字表示?

歡迎任何建議。

簡而言之,如果我有兩個非理性的對象,都代表五的平方根,並且我將這些對象相乘,我想取回整數5,而不是浮點4點。

具體而言,我需要表示法能夠收集術語,而不是每次都解析爲整數/浮點數。例如,如果我想添加5的一個平方根,我不希望它返回一些近似的整數/浮點數,我希望它返回一個對象,我可以與另一個非理性對象相加,我可以告訴對象在最近可能的時間解決以最小化浮點逼近誤差。

非常感謝!

+1

大多數編程語言提供了一個專用的類型複數。這不夠好嗎? – 2011-03-23 15:06:28

+5

@ Space_C0wb0y:無理數的類與複數的類不是同一類。 – Thanatos 2011-03-23 15:08:56

+3

編號複數和無理數是兩個不同的東西。 – 2011-03-23 15:09:18

回答

14

你在找什麼叫符號數學。您可能想嘗試一些計算機代數系統,如Maxima,Maple或Mathematica。也有用於此目的的庫,例如Python的SymPy庫。

+0

啊!你知道,90%的時間,我發現圖書館和寶石的問題等都是術語。一旦我搜索了「符號數學......」,我發現了各種各樣的東西。 Sympy看起來很不錯。由於我是面向Ruby的,所以Maxima很有趣,因爲它是用Lisp編寫的。 GiNaC是競爭者,還有Axiom(看起來像野獸,但它有40年的使用歷史),再加上JAS和JACAL。非常感謝所有體重過磅的人。非常感謝! – oaklodge 2011-03-24 14:31:00

+0

[Symbolic](http://brainopia.github.com/symbolic/)用於Ruby。答對了!再次感謝所有的指針。 – oaklodge 2011-03-24 14:59:27

7

你可以試試sympy,因爲你似乎是在符號計算之後,可以使用Python。

+0

如果您需要在Java中使用sympy(如您的標籤所示),您還可以使用Jython之類的東西。 – Riggy 2011-03-23 15:28:27

+0

@Riggy這些標籤並沒有真正指出這一點。 OP對編程語言不可知的程度更高。 – 2011-03-23 15:30:08

0

Matlab中的基本數值類型是複數浮點矩陣。具體來說,如果您鍵入x = 1,那麼您真正分配給x的是1x1矩陣,其[0,0]元素等於1 + 0i。

+2

OP正在尋找非理性的幫助,而不是複雜的。 – PaulMcG 2011-03-23 15:45:04

3

它看起來像已經提到的SymPy將是最合適的方式 - 因爲你可能做你需要的東西,並且不要求你的軟件是用專用語言編寫的,比如所提到的數學產品。

在另一方面,如果你不希望引入進一步的依賴關係,和你的非理性情況下僅限於平方根的乘法,在Python這是一個簡單的任務:

class Irrational(float): 
    def __new__(cls, base, radix=1): 
     self = float.__new__(cls, base ** (1.0/radix)) 
     self.base = base 
     self.radix = radix 
     return self 
    def __mul__(self, other): 
     if isinstance(other, Irrational) and other.radix == self.radix: 
      return Irrational(self.base * other.base, self.radix) 
     return float.__mul__(self, other) 

例子:

>>> a = Irrational(5,2) 
>>> a 
2.2360679774997898 
>>> a * Irrational(5,2) 
5.0 

您可以進一步追求它,幷包括其他操作和角落案例。但是對於表達式,你很快就會意識到你需要使用符號數學。

0

我記得Smalltalk中的MathMorph具有代數數字(包括部首)的表示形式,作爲具有整數係數的單變量多項式的根,位於一定的間隔內。
你會發現斯特姆定理有趣的應用http://en.wikipedia.org/wiki/Sturm%27s_theorem
你必須google了一下,在舊檔案雖然挖,MathMorph是一個老項目...