1

Python でいくつかのデータを方程式に当てはめようとしていますが、問題があります。私は方程式を持っています:

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

ここでa、 、tibおよびkはフィッティング パラメータであり、tおよびdispはそれぞれ時間と変位を表す配列変数です。方程式は 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場合にフィッティングが機能するという問題を引き起こしている用語であることがわかりました。私はスプレッドシートを使用しました.ti35.5tti#VALUE

基本的に、Pythonをgnuplotのように曲線に合わせる方法はありますか(無効な結果を無視すると思います)? プログラムのフィッティング部分に使用したコードは次のとおりです。

  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]

ありがとうございました!!

4

1 に答える 1

2

貴重な教訓。これより前に適合させていたより単純な方程式を破ろうとして使用していた開始パラメータは、現在適合しているより複雑な方程式を破っていました。解が意味をなさないとフィッティングが主張している場合は、常に開始パラメーターを確認してください。あなたがする必要がないように、Pythonを難しい方法で学ぶ.....

于 2013-01-14T17:41:05.473 に答える