最小二乗法で近似曲線/平面を得る(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
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
スポンサーサイト