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

5 views (last 30 days)
mi
mi on 28 Oct 2021
Commented: mi on 2 Nov 2021
ある3次元データに対して,各点の高さ情報が入ったマトリクスAがあります.
このAから曲面近似を行いたいと思っています.
Aに沿うようにx座標,y座標の情報をいれたマトリクスx,yを作製し
Matlabヘルプを参考に以下のように書いてみたのですが,うまく動きませんでした.
sf = fit([x, y],A,'poly23')
どうしたら各点の高さ情報マトリクスから曲面近似ができるでしょうか?
ちなみに曲面はほぼ球面の一部となっています.
  2 Comments
Atsushi Ueno
Atsushi Ueno on 28 Oct 2021
  • Aとx,yはどんなデータですか?
  • どんなエラーが出ますか?
  • Curve Fitting Toolboxは入っていますか?
load franke
size(x)
ans = 1×2
293 1
size(y)
ans = 1×2
293 1
size(z)
ans = 1×2
293 1
sf = fit([x, y],z,'poly23');
plot(sf,[x,y],z)
mi
mi on 1 Nov 2021
  • 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は入っていますか?
⇒入っています.
どうぞよろしくお願いいたします。

Sign in to comment.

Accepted Answer

Atsushi Ueno
Atsushi Ueno on 1 Nov 2021
頂いたコメントからの想定ですが、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 Comment
mi
mi on 2 Nov 2021
ありがとうございます。
頂いたプログラムを使用して多項式近似モデルの次数を調整することで,うまく成功しました.

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!