【发布时间】:2016-08-18 02:11:24
【问题描述】:
我从太阳能电池板充电器获得了一些时间与电流的数据,我试图将其拟合成曲线。数据集(由 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 中更可能发生,我只是想看看我在哪里搞砸了。
有人对如何找到更好的曲线有任何想法吗?
【问题讨论】:
-
您是在暗示 polyfit 例程不起作用吗?从数学上讲,您必须定义“更好的曲线”的含义。为什么选择多项式而不是指数或简单的直线?为什么最小二乘拟合而不是某些数据平滑算法?无论您使用什么函数(多项式或其他函数),任何统计方法都会在最小二乘意义上为您提供最适合数据的方法。
-
您的实现看起来不错,问题是您的数据看起来不像多项式。你健身的目标是什么?当然,您不是在寻找一些预期的系数(因为太阳通量与时间的关系并不是真正的多项式),也许您只是想要一个很好的绘图曲线?也许您正在寻找峰值电流的时间或值?
-
肯定比直线要好。
标签: python numpy curve-fitting