如何改善numpy曲线拟合

时间:2014-03-25 22:58:34

标签: python numpy curve-fitting

我从太阳能电池板充电器获得了一些时间与电流的数据,我正试图拟合曲线。数据集(由matplotlib.dates.date2num转换的时间)位于http://pastebin.com/4FAMbbCJ。我将时间放入名为Time的列表中,将当前时间放入Current。

import numpy
import matplotlib.pyplot as plt

fit = numpy.polyfit(Time, Current, 10)
fit_fxn = numpy.poly1d(fit)

plt.figure(1)
plt.subplot(211)
plt.plot_date(Time, Current, '-r', xdate=True, ydate=False)
plt.title("Current flow over time")
plt.ylabel("milliAmps")
plt.xlabel("Time")

plt.subplot(212)
plt.plot_date(Time, fit_fxn(Time), '-r', xdate=True, ydate=False)
plt.title("Current fxn with time")

plt.show()

散点图很好,但无论我尝试使用polyfit多少系数,我仍然得到一个大致直线。编辑:在我眼中,电流上升和下降,正如中午在太阳能中所预测的那样,但是曲线在最早的时间放置最大电流,然后从那里落在一条直线上。我会添加一张图片,但没有足够的声望点。我认为错误在我的实现中比在polyfit中更有可能,我只是想看看我搞砸了。

任何人对如何找到更好的曲线都有任何想法?

2 个答案:

答案 0 :(得分:1)

这更多是自变量的问题。你正在使用10度的多项式,但这意味着你将有类似4.5e + 58 - >的东西。你的系数必须非常小,你将失去精确度。

尝试以这种方式最小化时间变量。

import numpy
import matplotlib.pyplot as plt
t = Time-Time.min()

fit = numpy.polyfit(t, Current, 10)
fit_fxn = numpy.poly1d(fit)

plt.figure(1)
plt.subplot(211)
plt.plot_date(Time, Current, '-r', xdate=True, ydate=False)
plt.title("Current flow over time")
plt.ylabel("milliAmps")
plt.xlabel("Time")

plt.subplot(212)
plt.plot_date(Time, fit_fxn(t), '-r', xdate=True, ydate=False)
plt.title("Current fxn with time")

plt.show()

答案 1 :(得分:0)

我遇到了同样的问题。我意识到,如果数字太大,那么合身将无法正常工作。 尝试重新调整您的单位。这对我有用。