【问题标题】:How to fit parametric equations to data points in Python如何将参数方程拟合到 Python 中的数据点
【发布时间】:2016-07-06 20:21:19
【问题描述】:

我正在寻找适合的方式 parametric equations 到一组数据点,使用 Python。

作为一个简单的例子,给出以下一组数据点:

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 找到最适合 (x,y) 数据点 (x_data, y_data) 的系数 a1b1a2b2c2 的值。

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

我们将不胜感激 - 谢谢!

【问题讨论】:

  • 我尝试使用scipy.optimize.curve_fit。问题是scipy.optimize.curve_fit需要(据我所知)y作为x的函数。在我的问题中,我有一个参数方程,其中 yx 作为 t 的函数。

标签: python curve-fitting


【解决方案1】:

你可以使用 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')

【讨论】:

  • 作者说方程比给出的简单多项式更复杂。这不适用于手头的问题。
【解决方案2】:

由于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

【讨论】:

  • 非常感谢您的努力。但是,在我的实际问题中,没有简单的方法可以找到xy 之间的关系,我希望将参数方程拟合到我的数据点。我在此处提供的 xy 函数仅作为一个简单示例 - 如果不清楚,请见谅。
  • 好吧,那么下面的答案是正确的,假设你知道数组t的值是什么。
猜你喜欢
  • 1970-01-01
  • 2021-03-16
  • 2023-03-28
  • 1970-01-01
  • 2022-06-10
  • 2021-03-26
  • 1970-01-01
  • 2017-02-03
  • 2016-06-17
相关资源
最近更新 更多