質問: 一般化最小二乗法の定式化 現在,一自由度系の振動問題において(1)式の微分方程式の定式化を行い最小二乗法を用いたm(質量),b(粘性),k(剛性)のパラメータ同定を行っています。 f=m(dx^2/dy^2)+b(dx/dy)+kx・・・(1) f:力(測定値),x:変位(測定値) dx/dy:速度(差分による計算値) dx^2/dy^2:加速度(差分による計算値) ここで,式誤差の影響を減らすために,一般化最小二乗法を用いたm,b,kの算出を行おうと考えていますが,文献を調べても簡単に記載されているものが見つかりません。もしよろしければ,わかりやすいサイト,文献やc言語などのソースが手に入る場所などがあれば教えて頂けますでしょうか。 よろしくお願いします。
回答: さいしょう二乗法全般として 最適解の精度を上げるには、実験値の精度を上げること。ホワイトノイズを可能な限り除いてください。ただ、1桁精度を上げるのに最低で実験回数が10倍になります。nを無限大にすれば、積分されて誤差が減りますので。 真空中で空気抵抗を除くとか、振動物と押さえているものの間の接触抵抗を減らしたりする(振り子のアルコール脱脂による手垢の除去等。手垢がついていると蒸発して変な力がかかることがある)ことは、やっていますね。 単に計算精度を上げる、ざん差を減らす、というのであれば、発散しにくい式を使ってください。二乗法ではなく絶対値法をつかうとか、一次式ならばor法を使うとか。 計算機eとオーバーフローとけたおちに注意してください。収束が悪くておかしいな、と調べたら(1週間かけて手計算してみたら)桁おちになっていた事が何階かあります。単精度と倍精度を比較してみる・倍精度と4倍制度を比較してみるなどを行ってみてください。極端な場合には、自分で多倍精度塩山ルーチンを用意する必要があります(昔のfm7で24bit整数演算に変換して計算したことがあります。整数演算でしたらばメモリー制限以外の制限無しの可変長のライブラリ(一万桁10進演算とか)を自作しています)。 1000回の繰り返しがあるなんて場合には、2桁の測定精度でも、計算に必要な有効桁は6桁になります。単精度演算ですと5-6桁目がおかしなことになってくる数値になります。