Python 如何识别哪一个数学函数生成了由symphy中的X和Y数组给出的曲线
如何使用sympy或Python中的其他方法从X和Y数组的数值中获取数学函数 我想说清楚: 对于以下X和Y:Python 如何识别哪一个数学函数生成了由symphy中的X和Y数组给出的曲线,python,sympy,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%精确。您可能正在从中寻找函数,该函数可以为数据点构造插值多项式。请注意,这只做多项式插值,它不是一些通用的方程求解器,这将是更加困难的。您给出的示例非常基本,因为您
X = [0, 1, 2, 3, 4, 5]
Y = [2, 2, 2, 2, 2, 2]
我想说,它是f(x)=kx+l,如果可能的话,还有k和l
我必须找到一个函数的倒数,我只知道它的形状。它可以是一个拟合,不必100%精确。您可能正在从中寻找函数,该函数可以为数据点构造插值多项式。请注意,这只做多项式插值,它不是一些通用的方程求解器,这将是更加困难的。您给出的示例非常基本,因为您的
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
[2,1]
您可以从多项式中提取系数
result = sympy.polys.polyfuncs.interpolate(data,x)
coefficients = sympy.Poly(result).coeffs()
print(coefficients)
输出:
2*x + 1
[2,1]
不可能确定生成序列的唯一函数,因为我们可以有多个多项式(或非线性)解 想象一下。。。有许多函数的点与序列中的点重合 我认为解决问题最合理的方法是使用一些回归技术 例如,可以使用最小二乘法拟合数据 您应该指定一个模型(例如,
y=a+bx+error
),并将数据与此功能表相匹配
然后你会得到如下系数:
a = 0.2
b = 0.05
y = 0.2 + 0.05*x + error
深入研究:好吧,您确实需要一个合适的例程,这里有一些代码
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
,没有通用的解决方案,因为可能没有简单的数学函数描述。例如,您可以使用scipy中提供的各种曲线拟合函数,但由您决定拟合哪种曲线以及如何确定哪种曲线最好。您的示例中发生了什么?Y值都是一样的,所以这只是一条水平线,我不知道你说的“f(Y)=kx+l”是什么意思,因为“kx+l”显然不是Y的函数。你是说f(x)
?是否有一系列可能的函数类型(即多项式、指数、幂等)?@Jasper:是的,谢谢。开始写y=kx+l,改变了我的想法,显然成功地把事情搞砸了调整我需要的东西!就我的例子来说,为什么仅仅因为k和l不是代表性的东西就毫无意义呢。它成功了。我希望所有人都能看到这是一条线,因为并不是所有人都把线系数k和l命名。以缩短任何可能的混淆。有些人不善于把东西形象化。所以…@Dalen也许荒谬是错误的术语,只是“基本的”:)很高兴我能帮上忙。你知道如何从x得到y吗?我成功地得到了一个多项式,对于给定的x值,它近似地给出y。但是无论我做什么,我都不能从y得到x。X从17到零,Y是[19.683,20.257,20.802,21.317,21.801,22.253,22.673,23.059,23.412,23.731,24.015,24.264,24.478,24.655,24.796,24.901,24.969,25.000]