2017-07-07 32 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等软件包进行数值求解。