如何识别哪个数学函数生成了一个由X和Y数组给出的曲线

时间:2016-05-17 17:55:10

标签: python sympy

如何使用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%准确。

3 个答案:

答案 0 :(得分:1)

您似乎可能正在寻找interpolate中的sympy.polys.polyfuncs函数,它可以为您的数据点构建插值多项式。请注意,这只是多项式插值,它不是一般的方程求解器,这将更加困难。您的示例相当基本,因为f(x)只有2 k = 0l = 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