如何使用sympy或者Python中的其他方法从X和Y数组的数值中获取数学函数?
要明确: 对于跟随X和Y:
X = [0, 1, 2, 3, 4, 5]
Y = [2, 2, 2, 2, 2, 2]
我想说它是f(x)= kx + l,如果可能的话还有k和l。
我必须找到一个我只知道形状的函数的逆。它可以是合适的,不必100%准确。
答案 0 :(得分:1)
您似乎可能正在寻找interpolate
中的sympy.polys.polyfuncs
函数,它可以为您的数据点构建插值多项式。请注意,这只是多项式插值,它不是一般的方程求解器,这将更加困难。您的示例相当基本,因为f(x)
只有2
k = 0
和l = 2
,但是对于更一般的例子,您可能有
from sympy.polys.polyfuncs import interpolate
from sympy.abc import x
a = [1, 2, 3]
b = [3, 5, 7]
data = list(zip(a,b))
print(interpolate(data,x))
<强>输出强>:
2*x + 1
您可以使用Poly.coeffs
之后的多项式提取系数
result = sympy.polys.polyfuncs.interpolate(data,x)
coefficients = sympy.Poly(result).coeffs()
print(coefficients)
<强>输出强>:
[2,1]
答案 1 :(得分:1)
嗯,你真的需要一个合适的例程,这里有一些代码
import numpy as np
from scipy.optimize import curve_fit
def func(x, k, l):
return k * x + l
X = [0, 1, 2, 3, 4, 5]
Y = [2, 2, 2, 2, 2, 2]
popt, pcov = curve_fit(func, X, Y)
print(popt)
print(pcov)
k,l
的输出
[ -2.18143147e-12 2.00000000e+00]
这是有道理的,Y
是常数
您可以尝试任何功能形状,只需根据自己的喜好重写func
答案 2 :(得分:0)
由于我们可以有多个多项式(或非线性)解决方案,因此无法确定生成序列的唯一函数。
想象一下......有许多函数的点与系列中的点重合。
我认为解决问题最合理的方法是使用一些回归技术。
例如,您可以使用最小二乘法拟合数据。
您应该指定一个模型(例如y = a + bx + error
)并将数据拟合到此功能形式。
然后你会得到如下系数:
a = 0.2
b = 0.05
y = 0.2 + 0.05*x + error
深入了解:Regression Analysis