Z軸情報のマトリクスから曲面近似を行う方法

5 ビュー (過去 30 日間)
mi
mi 2021 年 10 月 28 日
コメント済み: mi 2021 年 11 月 2 日
ある3次元データに対して,各点の高さ情報が入ったマトリクスAがあります.
このAから曲面近似を行いたいと思っています.
Aに沿うようにx座標,y座標の情報をいれたマトリクスx,yを作製し
Matlabヘルプを参考に以下のように書いてみたのですが,うまく動きませんでした.
sf = fit([x, y],A,'poly23')
どうしたら各点の高さ情報マトリクスから曲面近似ができるでしょうか?
ちなみに曲面はほぼ球面の一部となっています.
  2 件のコメント
mi
mi 2021 年 11 月 1 日
  • Aとx,yはどんなデータですか? 
⇒Aは2862×1415の大きさで,各座標点のz軸の値が入っています.
xは1415×1の大きさで,Aに対応するようx軸の値が入っています.(1.25 2.5 3.75 5 6.25…)
yは2862×1の大きさで,Aに対応するようy軸の値が入っています. (0.625 1.25 1.875 2.5 3.125 3.75…)
座標(x(n),y(m))のz軸値がA(m,n)となります.
  • どんなエラーが出ますか?
⇒「エラー: horzcat 連結する配列の次元が一致しません。」と出ます.
  • Curve Fitting Toolboxは入っていますか?
⇒入っています.
どうぞよろしくお願いいたします。

サインインしてコメントする。

採用された回答

Atsushi Ueno
Atsushi Ueno 2021 年 11 月 1 日
頂いたコメントからの想定ですが、xとyの情報が1次元であるのに対して、Aの情報が2次元なので、そのままfit関数に適用しようとすると、データの数が合わない事になります。平面上の各座標に応じたx座標とy座標をベクトルにする必要があるので、meshgrid関数で平面上のx座標、y座標を生成して、これを行列⇒ベクトルに伸ばしてfit関数に与えると動きます。
下の例は14*28と少ないデータで実行しました。1415*2862だとwarningが出ました。
x = (1.25:1.25:14*1.25)'; % xは1415×1の大きさで,Aに対応するようx軸の値が入っています.(1.25 2.5 3.75 5 6.25…)
y = (0.625:0.625:28*0.625)'; % yは2862×1の大きさで,Aに対応するようy軸の値が入っています. (0.625 1.25 1.875 2.5 3.125 3.75…)
[xx yy] = meshgrid(x,y); % これ(meshgrid)が必要です
A = rand([28,14]); % Aは2862×1415の大きさで,各座標点のz軸の値が入っています.
sf = fit([xx(:), yy(:)], A(:),'poly23');
plot(sf,[xx(:), yy(:)], A(:));
zlim([-10,10])
  1 件のコメント
mi
mi 2021 年 11 月 2 日
ありがとうございます。
頂いたプログラムを使用して多項式近似モデルの次数を調整することで,うまく成功しました.

サインインしてコメントする。

その他の回答 (0 件)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!