1

次の問題があります。次のような行列 A(a,b,c) で読み取った実験データを含むテーブルがあります。

4.00000   7.00000   0.09035
4.00000   6.00000   0.02632
4.00000   5.00000   0.01184
4.00000   4.00000   0.30728
4.00000   3.00000   0.16022
4.00000   2.00000   0.01734
3.00000   6.00000   0.05817
3.00000   5.00000   0.02296
3.00000   4.00000   0.00000
3.00000   3.00000   0.22576
3.00000   2.00000   0.08331
3.00000   1.50000   0.00297
2.00000   6.00000   0.00000
2.00000   5.00000   0.05184
2.00000   4.00000   0.01883
2.00000   3.00000   0.00000
2.00000   2.00000   0.10719
2.00000   1.50000   0.06689

私の実際の問題は、メッシュを使用して 3D プロットを行う方法がわからないことです。plot3d() を使用しないと、私には役に立たない曲線しかありません。古い質問に答えたように、解決策は次のようになります。

X = reshape(A(:,1),m,n);
Y = reshape(A(:,2),m,n);    % might be reshape(data(:,2),n,m)
Z = reshape(A(:,3),m,n);
mesh(X,Y,Z);

説明付き: この場合、Y に m 個の一意の値があり、X に n 個の一意の値があると仮定しています。メッシュへの呼び出しで、これらを mesh(X',Y',Z) または何かとして転置する必要がある場合があります。そのように。

説明を理解したように、m と n は、3D プロットの x 方向と y 方向のグリッド ポイントの量でなければなりません。私が抱えている問題は、たとえば、x方向の1つのグリッドポイントに対応するy方向のグリッドポイントがポイントごとに変化する可能性があることです。

 aa=unique(a)
 bb=unique(b)
 lengthaa=length(aa)
 lengthbb=length(bb)

3D プロット (n,m)=((lengthaa),length(bb)) の最終的なグリッド スケールを取得しますが、上記のように A の形状を変更したい場合、もちろん次のようなエラー メッセージが表示されます。

 octave:20> x = reshape (A(:,1),clength,dlength)
 error: reshape: can't reshape 36x1 array to 6x12 array

そして今、私は何を検索すればよいかさえわからないところまで来ています。助けていただけますか?:)

編集:今、私はさらに一歩進んでいます:with

 [aaa,bbb]=meshgrid(aa,bb)

私は自分の斧の正しいスケーリングを持っています。ここで、データを正しい方法で注文する必要があります。

Edit2:問題は、データがないグリッドポイントがあることです。それが理由であり、reshape が機能しないのです。何か助けはありますか?

4

1 に答える 1

3

欠落した点を生成するには、データを補間することができます。同様の問題があったため、簡単なテストを行いました。

# Test script for http://stackoverflow.com/questions/19604387/octave-3d-plot-with-mesh-out-of-experimental-data
# Trygve Utstumo, 2013-10-28

data = [
4.00000   7.00000   0.09035
4.00000   6.00000   0.02632
4.00000   5.00000   0.01184
4.00000   4.00000   0.30728
4.00000   3.00000   0.16022
4.00000   2.00000   0.01734
3.00000   6.00000   0.05817
3.00000   5.00000   0.02296
3.00000   4.00000   0.00000
3.00000   3.00000   0.22576
3.00000   2.00000   0.08331
3.00000   1.50000   0.00297
2.00000   6.00000   0.00000
2.00000   5.00000   0.05184
2.00000   4.00000   0.01883
2.00000   3.00000   0.00000
2.00000   2.00000   0.10719
2.00000   1.50000   0.06689
];

# Evenly spaced axis, hacked to this dataset 
xi = min(data(:,1)):max(data(:,1));
yi = min(data(:,2)):0.5:max(data(:,2));

zi = griddata( data(:,1),data(:,2),data(:,3),xi,yi);

mesh( xi, yi, zi )
print("figure.png")
pause()

サンプル出力、補間解像度を少し上げたいと思うかもしれません

于 2013-10-28T13:28:40.203 に答える