2
是否可以使用sympy来查找一系列表达式的算法?查找表达式列表的序列算法?
举例来说,如果我有以下列表:
s = [ fraction(1/1), fraction(1/2), fraction(1/4), ... ]
能sympy提取物占表达式此列表中的表达?
>> fraction(1/(2**(x-1)))
是否可以使用sympy来查找一系列表达式的算法?查找表达式列表的序列算法?
举例来说,如果我有以下列表:
s = [ fraction(1/1), fraction(1/2), fraction(1/4), ... ]
能sympy提取物占表达式此列表中的表达?
>> fraction(1/(2**(x-1)))
如上所述,这是不明确定义的任务。公式1/(1+x*(x-1)/2)
也适合给定的数据。更一般地说,对于任何有限的数据点集合,都有无限多的公式来精确匹配所有的点;哪一个应该作为答案返回?
SymPy确实有插值程序interpolate
和rational_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等软件包进行数值求解。