是否可以使用sympy来查找表达式序列的算法?
例如,如果我有以下列表:
s = [ fraction(1/1), fraction(1/2), fraction(1/4), ... ]
是否可以提取表示此表达式列表的表达式?
>> fraction(1/(2**(x-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等软件包进行数值求解。