1

キャリブレーションされていないコンパスを使用して現場で収集された簡単な調査データがあります。問題を認識し、現場で、良好なコンパスと校正されていないコンパスを比較して方位を取得し、その違いを 11 の方位で記録しました。プロットは、差が sin 関数にかなり近いことを示しています。この結果の関数に多項式 (次数 3) を当てはめて、校正されていないコンパスを使用して測量データを修正したいと考えています。私のカーブ フィッティング プログラムでは、フィッティング カーブが不十分です。誰が何が間違っているかを見ることができますか?

import numpy as np
import scipy
import pylab
correctCompass=\
np.array([134.4,112.6,069.7,051.1,352.5,314.6,218.3,258.2,237.8,186.5,153.7])
errorCompass=\
np.array([131.6,108.9,065.6,047.0,349.8,314.0,284.6,262.7,243.4,189.8,153.2])
# sort compass values
for i in range(0,11):
   for j in range(i+1,11):
       if correctCompass[i] > correctCompass[j]:
          tmp=correctCompass[j]
          correctCompass[j]=correctCompass[i]
          correctCompass[i]=tmp
          tmp=errorCompass[j]
          errorCompass[j]=errorCompass[i]
          errorCompass[i]=tmp

diff = correctCompass - errorCompass + 15.0
height=diff.max() + 16.0
polycoeffs = scipy.polyfit(correctCompass, diff, 3)

# fit the data with a polynomial
yfit = scipy.polyval(polycoeffs,correctCompass)

pylab.plot(correctCompass, diff, 'k.')
pylab.plot(correctCompass, yfit, 'r-')

pylab.axis([0,360,-10.0,height])
pylab.show()
4

1 に答える 1

2

polyfit正常に機能します。問題はdiff、フィットを下げるという1つのマイナスの点ですが、y軸の最小値を-10に設定すると、プロットには表示されません。

diff = array([ 19.1,  19.1,  18.7,  17.8,  15.5,  11.7, -51.3,   9.4,  10.5, 15.6,  17.7])

コメントpylab.axis([0,360,-10.0,height])すると「問題」が表示されます

さらに、次の3行で、ネストされた2つのforループを置き換えて、コードを改善し、読みやすくすることができます。

sort = np.argsort(correctCompass)
correctCompass = correctCompass[sort]
errorCompass = errorCompass[sort]
于 2013-02-03T21:49:24.087 に答える