5

私は修士論文から始めたばかりですが、MATLABの能力/理解にすでに問題があります。

問題は、私は惑星/月の表面に軌道を持っているということです(時間と座標を含む.mat。次に、時間とその時の測定値を含む.matを持っています。

これを、scatter()で(測定値と座標を使用して)色分けされた軌道としてプロットすることができます。これは非常にうまく機能します。

しかし、私の問題は、もっと洗練されたものが必要なことです。ここで、軌道を取得する必要があります。色分けする代わりに、測定値のグラフ(値)(各ポイントに指定)を軌道(必ずしも直線ではない)に追加することになっています。私が欲しいものを説明するために小さなスケッチを追加します。赤い矢印はプロットに追加したいものを示し、緑は私が持っているものを示しています。

ここに画像の説明を入力してください

4

3 に答える 3

5

データはいつでも自分で変換できます:(@Shaiと同じ表記を使用)

x = 0:0.1:10;
y = x;
m = 10*sin(x);

したがって、必要なのは、各データポイントの曲線に垂直なベクトルです。

dx = diff(x); % backward finite differences for 2:end points
dx = [dx(1) dx]; % forward finite difference for 1th point
dy = diff(y);
dy = [dy(1) dy];
curve_tang = [dx ; dy];
% rotate tangential vectors 90° counterclockwise
curve_norm = [-dy; dx];
% normalize the vectors:
nrm_cn = sqrt(sum(abs(curve_norm).^2,1));
curve_norm = curve_norm ./ repmat(sqrt(sum(abs(curve_norm).^2,1)),2,1);

そのベクトルに測定値(m)を掛け、データポイント座標でオフセットすると、次のようになります。

mx = x + curve_norm(1,:).*m;
my = y + curve_norm(2,:).*m;

それをプロットします:

figure; hold on
axis equal;
scatter(x,y,[],m);
plot(mx,my)

Straightline_sine

これはまさにあなたが望むものです。この例では、座標として直線だけが使用されていますが、このコードでは、任意の曲線を適切に処理できます。

x=0:0.1:10;y=x.^2;m=sin(x);

parabole_sine

t=0:pi/50:2*pi;x=5*cos(t);y=5*sin(t);m=sin(5*t);

circle_sine

于 2012-12-27T13:21:18.363 に答える
5

あなたの質問を正しく理解できれば、実際のデータを原点を中心に特定の角度で回転させる必要があります。座標に回転行列を掛けるだけなので、これは非常に簡単です。hold onその後、コメントで提案されているように、とを使用plotして、回転した点をプロットに重ねることができます。

まず、あなたのデータに似たデータを生成して、散布図を作成しましょう。

% # Generate some data
t = -20:0.1:20;
idx = (t ~= 0);
y = ones(size(t));
y(idx) = abs(sin(t(idx)) ./ t(idx)) .^ 0.25;

% # Create a scatter plot
x = 1:numel(y);
figure
scatter(x, x, 10, y, 'filled')

次に、ポイント ( と の値で指定) を (0, 0) の周りで 45° の角度で回転させxますy

P = [x(:) * sqrt(2), y(:) * 100] * [1, 1; -1, 1] / sqrt(2);

次に、それらを散布図の上にプロットします。

hold on
axis square
plot(P(:, 1), P(:, 2))

ここでは、視覚化のために追加の処理が行われていることに注意してください。

  1. sqrt(2)最終的な x 座標は、適切な長さに(によって) 引き伸ばされています。
  2. 回転したプロットが目立つように、最終的な y 座標が (100 倍に) 拡大されています。
  3. 歪みを避けるために、軸は四角になっています。

これはあなたが得るべきものです:

ここに画像の説明を入力

于 2012-12-27T13:28:10.597 に答える
0

3Dプロットに興味があるようです。私があなたの質問を正しく理解しているなら、あなたはとして表される2D曲線を持っています[x(t), y(t)]m(t)さらに、各ポイントにいくつかの値があります。したがって、3D曲線のプロットを見ています[x(t) y(t) m(t)]。これを使用して簡単に達成できます

plot3( x, y, m ); % assuming x,y, and m are sorted w.r.t t

または、3Dバージョンのスキャッターを使用することもできます

scatter3( x, y, m );

あなたの選択を選んでください。

素敵なプロットところで。

あなたの論文で頑張ってください。

于 2012-12-27T12:13:23.247 に答える