2017-07-07 63 views
2

是否可以使用sympy來查找一系列表達式的算法?查找表達式列表的序列算法?

舉例來說,如果我有以下列表:

s = [ fraction(1/1), fraction(1/2), fraction(1/4), ... ] 

能sympy提取物佔表達式此列表中的表達?

>> fraction(1/(2**(x-1))) 

回答

2

如上所述,這是不明確定義的任務。公式1/(1+x*(x-1)/2)也適合給定的數據。更一般地說,對於任何有限的數據點集合,都有無限多的公式來精確匹配所有的點;哪一個應該作爲答案返回?

SymPy確實有插值程序interpolaterational_interpolate;前者返回多項式,後者返回通過給定點的有理函數。 (Reference)多項式插值可以在例如使用,如果你知道,指數函數應該適合,因此取數據的對數,具體如下:

s = [Rational(1, 1), Rational(1, 2), Rational(1, 4)] 
x = Symbol('x', real=True) 
result = exp(interpolate([log(y) for y in s], x)).simplify() 
print(result) 

這將打印2**(-x + 1)。其思想是取對數將指數函數轉化爲線性,可用interpolate構造。

但是一般來說,將某種形式的曲線擬合給定數據的問題可以用scikit-learn等軟件包進行數值求解。