如何将参数方程拟合到Python中的数据点

时间:2016-07-06 09:49:54

标签: python curve-fitting

我正在寻找适合的方法 使用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的系数b1a2b2c2(x,y)的值最好的数据点(x_data, y_data)

请注意,上面的y(t)x(t)函数仅用作参数方程的示例。我希望适合我的数据的实际函数要复杂得多,在这些函数中,将y表示为x的函数并非易事。

帮助将不胜感激 - 谢谢!

2 个答案:

答案 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)

由于xy之间的关系是二次关系,因此您可以使用np.polyfit来获取系数。 根据您的等式,您的xy关系为:

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