查找表达式列表的序列算法?

时间:2017-07-07 17:02:10

标签: sympy

是否可以使用sympy来查找表达式序列的算法?

例如,如果我有以下列表:

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

是否可以提取表示此表达式列表的表达式?

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

1 个答案:

答案 0 :(得分:3)

如上所述,这不是一个定义明确的任务。公式(id=2, state=st3, val=1.5, dat1='2017-02-01', dat2='2017-02-28', month='2017-02-01')也适合给定的数据。更一般地说,对于任何有限的数据点集合,存在无限多个完全匹配所有点的公式;哪一个应该作为答案返回?

SymPy确实有插值例程1/(1+x*(x-1)/2)interpolate;前者返回多项式,后者返回通过给定点的有理函数。 (Reference。)多项式插值可用于您的示例 if 您知道指数函数应该适合,因此取数据的对数,如下所示:

rational_interpolate

这会打印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)构造。

但总的来说,将某种形式的曲线拟合到给定数据的问题用scikit-learn等软件包进行数值求解。