頭と尻尾はくれてやる!

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


最小二乗法で近似曲線/平面を得る(Swift)

以前(Objective-Cを使ってた頃)n次の近似曲線を得るためガウスジョルダン法で解く、というのをやったことがあった。

Swiftで最小二乗平面を得たいので調べてみた(※1)ら「あー、これもガウスジョルダン法でいい奴だよな?」と思い(実は思い違いだった)、Objective-Cの関数をSwiftに書き直した。

元はn次の近似曲線を得ていたので、それができているのを確認するサンプルが一つ。

もう一つは今回メインの、空間内の複数の点に対する最小二乗平面を得るというサンプル。

YamaguchiTatsuya/ApproximateCurveAndPlane: Sample code to calculate approximate curve and plane using Least squares method and Gauss-Jordan elimination in Swift, macOS
↑GitHubにアップしたそれらのサンプルコード。
macOSアプリで1つの画面に両方のを表示させてる(プロジェクト二つ作るほどでもないし?)。

近似曲線/平面を得た実行結果のスクショ
↑スクショはこんな感じ。左が近似曲線を描いたNSViewで右は最小二乗平面(を意味するたくさんの小さい点)を描いたSceneKitのview(なのでマウスで視点を動かせる)。


最小二乗平面はガウスジョルダン法でもいいけど、未知数3個に式が3つの連立方程式なので単に逆行列(simd_float4x4までは逆行列を得る関数がある)を作ってかけてやればいい、ということに後で気付きました、、、


※1 参考ページ
[数学] 最小二乗平面をプログラムで求める - Qiita



macOS 10.15.3 Catalina
Xcode 11.3.1
Swift 5.1.3
スポンサーサイト




  TopPage  ポケモンGOの相性表から見る有利/不利なわざのタイプ >>

コメント


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

トラックバック

トラックバックURL
https://ringsbell.blog.fc2.com/tb.php/1342-e22a1ae4




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