2014-06-08 55 views
-1

我有一些数据(xy坐标)来自一项研究,我必须绘制它们并找到适合数据的最佳曲线。我的曲线是:Python拟合多项式,幂律和指数数据

  • 多项式达6度;
  • 幂律;
  • 指数。

我能找到多项式最适合与

while(i < 6): 
    coefs, val = poly.polyfit(x, y, i, full=True) 

,我采取最小化val程度。

当我必须适应幂律(最有可能在我的研究中),我不知道如何正确地做到这一点。这就是我所做的。我已将日志函数应用于所有xy,并且我试图用线性多项式来拟合它。如果误差(val)低于之前尝试过的其他多项式,我选择幂律函数(自然如果线的m为负数)。我对么?

现在我怎么能重建我的幂律从y = mx + q行,以绘制它与原始点?我还需要显示找到的功能。

我试图与:

def power_law(x, m, q): 
    return q * (x**m) 

使用

x_new = np.linspace(x[0], x[-1], num=len(x)*10) 
y1 = power_law(x_new, coefs[0], coefs[1]) 
popt, pcov = curve_fit(power_law, x_new, y1) 

但得到的曲线不拟合数据。

+2

*“看起来效果不好”*是什么意思?错误(提供完整的追溯)?意想不到的产出(提供投入,预期和实际产出)? – jonrsharpe

+0

这是一个方法论上的问题,我不要求一个完整的代码,代码在这里没有必要。我不是问这个问题。有一个问题:“我是否正确?如何重建权力法?” – Nadir

+0

曲线不符合数据,所以,从方法论角度来说,我的想法可能不是正确的。 – Nadir

回答

2

如果你谷歌短语“曲线拟合”,我的网站是最高回报 - 所以我知道这种事情。

我建议不要进行任何日志或其他数据转换,因为scipy具有非常适合此类拟合的非线性求解器。请看:

http://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.curve_fit.html

我使用SciPy的非线性求解器在我的网站,它可以直接在网上贴合您的数据。尝试:

http://zunzun.com/Equation/2/Power/Standard%20Power/

,并确保没有实验引入偏移,如DC偏移例如电压,尝试:

http://zunzun.com/Equation/2/Power/Standard%20Power%20With%20Offset/

的一个问题,你可以在运行与非线性拟合是非线性求解器迭代精化的合适的起始参数集的选择。 BSD许可的网站源代码使用遗传算法自动确定起点,因此您可能需要自己尝试。它带有很多例子,包括一个适合数百个方程式的“函数查找器”并对它们进行排序 - 您也可以在线尝试。源代码是在谷歌代码库在:

https://code.google.com/p/pyeq2/

或链接,压缩和tgz'd源分布是在每一页的网站上的底部。

如果您有任何问题,请直接与我联系,我会很乐意提供帮助。我喜欢这个东西。

James [email protected]

+1

zunzun.com不见了,链接不起作用 – wordsforthewise

+0

Zunzun移居到github。 [谷歌搜索结果](https://www.google.com/search?q=zunzun%20github&ie=utf-8&oe=utf-8) – mikey

+0

我变得太盲目,无法让网站继续运行,我的歉意。我仍然可以用右眼看到放大的文字,所以我可以阅读并回复电子邮件。 zunzun.com的网站源代码位于https://github.com/zunzun/zunzunsite/(Python 2.X)和https://github.com/zunzun/zunzunsite3/(Python 3)。 –