MATLAB Answers

0

データが正方行列では​ない場合の3Dグラフ​の作成について

Asked by rei shimizu on 29 Oct 2019
Latest activity Commented on by michio
on 31 Oct 2019
卒業研究で急遽matlabを使用することとなったため、matlabの知識に関してとても疎いです。
76×3行列の3Dグラフ(surfなど)の作成方法について教えていただきたいです。
1列ずつ3つのデータに分けて、それをそれぞれ正方行列に変換してからsurf関数を使うのかと考えているのですがどうも上手くいきません。

  4 Comments

Show 1 older comment
rei shimizu on 29 Oct 2019
お返事ありがとうございます。
1枚目が元データで、コード上はAという名前にしてdouble型でインポートしました。
2枚目はネットの情報をほぼそのままコピペしたコードなため、このコードで自分が望む結果になるのかも想像できていません。
ほかに足りない情報などありましたら教えていただけると助かります。
Kazuya
on 29 Oct 2019
できればデータはファイル(csv, Excel, mat など) の添付で、コードとエラーメッセージはコメント蘭にコピペで投稿頂けると助かります。
実際にMATLABで試してみた方が速いのですが、画像から情報を吸い出すのは多少手間でして。
rei shimizu on 30 Oct 2019
kazuyaさんお返事ありがとうございます。
元データはこちらになります。
コードとエラーメッセージについては、大学のパソコンでmatlabを使用しているためすぐに投稿できないかもしれないです。
協力していただいてるのに申し訳ございません。

Sign in to comment.

Tags

1 Answer

michio
Answer by michio
on 29 Oct 2019
 Accepted Answer

matlab質問2.PNG のコードの中で、
x = A(:,1);
y = A(:,1);
z = A(:,1);
となっているところ、
x = A(:,1);
y = A(:,2);
z = A(:,3);
に変えるとよいように思います。
適当なダミーデータで実行してみると、
x = rand(100,1);
y = rand(100,1);
z = sin(2*pi*x)+cos(2*pi*y);
xlin = linspace(min(x),max(x),76);
ylin = linspace(min(y),max(y),76);
[X,Y] = meshgrid(xlin,ylin);
Z = griddata(x,y,z,X,Y,'cubic');
surf(X,Y,Z)
untitled.png
こんな感じです。griddata に 'cubic' と入れているのは、データの補間方法を指定しています。何も指定しなければ 'linear' ということで、線形補間を行います。

  7 Comments

rei shimizu on 30 Oct 2019
v4を使って進めていきたいと思います。
michioさん、どの質問にも丁寧に答えていただきありがとうございました!
本当に助かりました!
rei shimizu on 30 Oct 2019
度々申し訳ございません。
以下の図のように、座標のデータを表示させてみると、元データには存在しないx座標、y座標、z座標の数値の組み合わせが表示されました。
これはもともとこのような仕様なのでしょうか?
念のため元データも添付しておきます。
matlab質問4.png
michio
on 31 Oct 2019
そうですね。。
xlin6 = linspace(min(x6),max(x6),76);
ylin6 = linspace(min(y6),max(y6),76);
[X6,Y6] = meshgrid(xlin6,ylin6);
の部分、xlin6, ylin6 それぞれ個別にみるとデータに存在するデータ点ですが、2次元で見るとデータに含まれない部分も出てくると思います。'v4' 以外の手法だと、その存在しない部分が NaN で返されているはずです。

Sign in to comment.