我正在寻找适合的方法 使用Python,parametric equations到一组数据点。
作为一个简单的例子,给出了以下数据点集:
import numpy as np
x_data = np.array([1, 2, 3, 4, 5])
y_data = np.array([2, 0, 3, 7, 13])
使用t
作为参数,我想将以下参数方程拟合到数据点,
t = np.arange(0, 5, 0.1)
x = a1*t + b1
y = a2*t**2 + b2*t + c2
也就是说,让Python找到适合a1
的系数b1
,a2
,b2
,c2
,(x,y)
的值最好的数据点(x_data, y_data)
。
请注意,上面的y(t)
和x(t)
函数仅用作参数方程的示例。我希望适合我的数据的实际函数要复杂得多,在这些函数中,将y
表示为x
的函数并非易事。
帮助将不胜感激 - 谢谢!
答案 0 :(得分:2)
您可以使用polyfit,但请注意t的长度必须与数据点的长度匹配
import numpy as np
tt = np.linspace(0, 5, len(x_data))
x_params = np.polyfit(tt, x_data, 1)
y_params = np.polyfit(tt, y_data, 2)
将第三个参数更改为您认为适合您数据的程度。
要获得可以使用的功能
y = np.poly1d(y_params)
t = np.arange(0, 5, 0.1)
plot(t, y(t))
plot(tt, y_data, 'o')
答案 1 :(得分:0)
由于x
和y
之间的关系是二次关系,因此您可以使用np.polyfit
来获取系数。
根据您的等式,您的x
和y
关系为:
y = a2*((x-b1)/a1)**2 + b2*((x-b1)/a1) + c2
使用polyfit,我们得到
y_data = np.array([2, 0, 3, 7, 13])
x_data = np.array([1, 2, 3, 4, 5])
np.polyfit(x_data,y_data,2)
[p2,p1,p0] = list(array([ 1.21428571, -4.38571429, 4.8 ]))
a1, b1, a2, b2, c2
的值可以通过求解以下方程
p2 = a2/a1**2
p1 = -2b1*a2/a1**2 + b2/a1
p0 = a2*b1**2/a1**2 -b2*b1/a1 + c2