頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


n次の近似曲線を求める(1)

iOSでn次の近似曲線を計算して描いてみるってお話だよ。
iPhoneアプリを前提としてるからiOSって書いたけど、どちらかというとObjective-CというよりC言語っぽいかもしれないね。あまりNSArrayとか使わないし。

近似曲線ってのは、計測した点がいくつかあって、そこをなるべく通るようにしゅーっと線を描くあれだよ。
そんな時の王道のやり方と言えばやはり最小二乗法を使う方法だよね。今回はこの最小二乗法を使ってやってみようと思うんだよ。
この最小二乗法を使って近似曲線を描く、というのはiOSアプリ「赤ちゃんの成長グラフ」で体重や身長の変化量を求めるのに使っているんだ。この時は二次関数で近似していたんだ(下の画像ね)。

二次の近似曲線

ただ、今回は任意の高次の関数で近似してみることにするよ。その方が使い回しがきくしね。

何次関数で近似、、、というのは次のようなことだよ。

二次関数で近似 → y = ax^2 + bx + c
三次関数で近似 → y = ax^3 + bx^2 + cx + d
n次関数で近似 → y = ax^n + bx^(n-1) +cx^(n-2) + ...

n次関数のは最後まで書いてないけどこれも定数で終わるよ。
こういう曲線を当てはめた時にどうやったら各点との差が一番小さくなるかを求める方法が最小二乗法だよね。

miki - 最小二乗法で曲線近似

↑最小二乗法についてはこちらのサイトが詳しいのでオススメ。
次数が増えていっても規則性があるから、それを考慮すれば案外簡単に高次の関数に対応できるんだよ、、、とえらそうに言ってるけどそれは今回やったから言えるのであって、以前は面倒だと思って二次関数専用のコードを書いていたわけなんだけどね。

その規則性に従ってマトリックスの要素を求めて、それ(連立方程式)を解くのがガウスジョルダン法/ガウスの消去法とかいわれるものなんだけど、こちらも前に作ったのが二次関数の係数を求める用だったので、これも高次に対応できるようにするよ。

まだ全然コードもないんだけど、長くなったので今回はここまでってことで。




<< n次の近似曲線を求める(2)   TopPage  これで簡単に全角で入力しかけた文字を半角にできる! >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
http://ringsbell.blog117.fc2.com/tb.php/700-145fc7d0




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad