アプリ版:「スタンプのみでお礼する」機能のリリースについて

ある(x,y)の集合を、次式のような関数にフィッティングしたい場合、係数a~fを算出する方法、アルゴリズムを教えてください。

z(x,y) = a + bx + cy + dxy + ex^2 + fy^2

A 回答 (3件)

最小二乗法で良いですか?



1.残差を求める.
  R=Σ(zi(xi,yi)-z(xi,yi))^2

2.残差を係数で偏微分したものが0,として,
  係数に関する連立方程式を作る.
  例えば,∂R/∂a=0,∂R/∂b=0,・・・

3.上を行列で書くと,
  A(xi,yi) K(a,b,c,d,e,f) = b(xi,yi,zi)
  となるので,行列Aの逆行列を両辺に左からかけると
  係数ベクトルKが求まる.

この回答への補足

どうもありがとうございます。

上記手順をCプログラムで記述したようなwebページ等はありますでしょうか?
あれば教えていただけますでしょうか?

補足日時:2003/11/07 14:18
    • good
    • 0

(x,y)の集合は大域的に2次曲線になるとわかっているのでしょうか?


局所的でいいなら、ある点列の軌跡((x,y)の集合に順序が入っている)と思って
ベジュ曲線が使えますが。
    • good
    • 0

いまちょっと検索してみましたが,見付かりませんでした.


(あまりトライしてませんが・・・)

1,2と3の行列AとベクトルBを求めるところまでは,
手計算で式をぐりぐりします.

簡単な例として,
回帰曲線y(x)=a+bx+cx^2
計測点(xi,yi)
の場合,手順1で,
R=Σ(y(xi) - yi(xi))^2
 =Σ(a+bxi+cxi^2 - yi)^2
これを手順2で,
∂R/∂a= 2Σ(a+bxi+cxi^2 - yi)=0
∂R/∂b= 2Σ(xi×(a+bxi+cxi^2 - yi))=0
∂R/∂c= 2Σ(xi^2×(a+bxi+cxi^2 - yi))=0
と言うふうにします.これを展開して,係数a,b,c毎に分け,
a,b,cの係数のかかっていない項を右辺にもってけば,
連立方程式が完成します.

ここまではまず手で式を書いて,それをプログラムに反映させます.

3の連立方程式を解くものは,一番簡単なガウスの消去法とか,
ガウスジョルダン法とか,LU分解法とかあります,
この辺は数値計算の基本なので,
大概の本に載っていますし,ネット上にもあるような気がします.

こんなものですみません.
    • good
    • 0
この回答へのお礼

どうもありがとうございます。
とりあえず、これを参考に考えて見ます。

お礼日時:2003/11/09 12:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!