将数据拟合到python与gnuplot中的等式

时间:2013-01-14 16:25:47

标签: python gnuplot data-fitting

我正在尝试将一些数据拟合到python中的等式,我遇到了一些困难。我有等式:

y(t)=yo+a(t-ti)^b+kt

其中atibk是拟合参数,tdisp是表示时间和位移的数组变量分别。该方程将适合gnuplot一些迭代,但在python中拟合它会引发错误: -

ValueError: array must not contain infs or NaNs

完整的堆栈跟踪是:

creep_test.py:246: RuntimeWarning: invalid value encountered in power
  fitfunc = lambda p, t: disp_list[0]+(p[0]*(t-p[1])**p[2])+p[3]*t # Target function
Traceback (most recent call last):
  File "creep_test.py", line 374, in <module>
    main()
  File "creep_test.py", line 368, in main
    python_fit(filename)  
  File "creep_test.py", line 256, in python_fit
    out = optimize.leastsq(errfunc, p0[:], args=(t, disp,err), full_output=1)
  File "/usr/lib/python2.7/dist-packages/scipy/optimize/minpack.py", line 338, in leastsq
    cov_x = inv(dot(transpose(R),R))
  File "/usr/lib/python2.7/dist-packages/scipy/linalg/basic.py", line 285, in inv
    a1 = asarray_chkfinite(a)
  File "/usr/lib/python2.7/dist-packages/numpy/lib/function_base.py", line 590, in asarray_chkfinite
    "array must not contain infs or NaNs")
ValueError: array must not contain infs or NaNs

我发现,如果你ti固定在ti左右,那么导致问题的问题会引发问题35.5。我使用了电子表格,对于tti下的任何值,等式会引发#VALUE(可能是因为它的想象)

基本上有一种方法可以让python像gnuplot那样适合曲线(我假设忽略了无效的结果)?我用于我的程序的fittiong部分的代码如下:

  fitfunc = lambda p, t: disp_list[0]+(p[0]*(t-p[1])**p[2])+p[3]*t # Target function
  errfunc = lambda p, t, y, err: (fitfunc(p, t) - y)/(err) # Distance to the target function
  err=0.01
  p0 = [ 50, 35.5,0.005, 0.001] # Initial guess for the parameters
  out = optimize.leastsq(errfunc, p0[:], args=(t, disp,err), full_output=1)
  print out[0]
  print out[1]

三江源!!

1 个答案:

答案 0 :(得分:1)

有价值的经验教训。我用来试图打破我之前拟合的更简单的方程式的起始参数打破了现在拟合的更复杂的方程式。如果配件声称解决方案没有意义,请务必检查您的起始参数。学习python的方式很难,所以你不必......