2016-03-20 23 views
0

私は3つのベクトルx、y、tを持っています。各組み合わせx、y、tには(u、v)値が関連付けられています。 MATLABでこれをプロットする方法は?実際に私は2D双曲線方程式 Vの溶液をプロットしようとしているトンは= V X + V Y とである 2 * 2 vは2 * 1ベクトルです。私はscatter3とquiver3しようとしていたが、私は解決策を正しく表現することができませんmatlabに新しいです。 以下のコードでは、特定の時間レベルでしかプロットしていません。 1つのプロットで完全なソリューションを表示するには?どんな助け?matlabの3d軸上に2次元ベクトルをプロットする

A1 = [5/3 2/3; 1/3 4/3]; 
A2 = [-1 -2; -1 0]; 
M = 10; 
N = 40; 
delta_x = 1/M; 
delta_y = delta_x; 
delta_t = 1/N; 
x_points = 0:delta_x:1; 
y_points = 0:delta_y:1; 
t_points = 0:delta_t:1; 

u = zeros(M+1,M+1,N+1,2); 
for i=1:M+1, 
    for j=1:M+1, 
     u(i,j,1,1) = (sin(pi*x_points(i)))*sin(2*pi*y_points(j)) ; 
     u(i,j,1,2) = cos(2*pi*x_points(i)); 
    end 
end 

for j=1:M+1, 
    for t=1:N+1, 
     u(M+1,j,t,1) = sin(2*t); 
     u(M+1,j,t,2) = cos(2*t); 
    end 
end 

for i=1:M+1 
    for t=1:N+1 
     u(i,1,t,1) = sin(2*t); 
     u(i,M+1,t,2) = sin(5*t) ; 
    end 
end 

Rx = delta_t/delta_x; 
Ry = delta_t/delta_y; 

for t=2:N+1 
    v = zeros(M+1,M+1,2); 
    for i=2:M, 
     for j=2:M, 
      A = [(u(i+1,j,t-1,1) - u(i-1,j,t-1,1)) ; (u(i+1,j,t-1,2) - u(i-1,j,t-1,2))]; 
      B = [(u(i+1,j,t-1,1) -2*u(i,j,t-1,1) +u(i-1,j,t-1,1)) ; (u(i+1,j,t-1,2) -2*u(i,j,t-1,2) +u(i-1,j,t-1,2))]; 
      C = [u(i,j,t-1,1) ; u(i,j,t-1,2)]; 
      v(i,j,:) = C + Rx*A1*A/2 + Rx*Rx*A1*A1*B/2; 
     end 
    end 
    for i=2:M, 
     for j=2:M, 
      A = [(v(i,j+1,1) - v(i,j-1,1)) ; (v(i,j+1,2) - v(i,j-1,2)) ]; 
      B = [(v(i,j+1,1) - 2*v(i,j,1) +v(i,j-1,1)) ; (v(i,j+1,2) - 2*v(i,j,2) +v(i,j-1,2))]; 
      C = [v(i,j,1) ; v(i,j,2)]; 
      u(i,j,t,:) = C + Ry*A2*A/2 + Ry*Ry*A2*A2*B/2; 
     end 
    end 
if j==2 
    u(i,1,t,2) = u(i,2,t,2); 
end 
if j==M 
    u(i,M+1,t,1) = u(i,M,t,1); 
end 

if i==2 
    u(1,j,t,:) = u(2,j,t,:) ; 
end 
end 

time_level = 2; 
quiver(x_points, y_points, u(:,:,time_level,1), u(:,:,time_level,2)) 
+0

あなたが試したことのコードサンプルを追加してください。 –

+0

@ nirvana-msu私はコードを追加しました。 –

答えて

1

3Dでプロットすることはできますが、個人的には分かりづらいと思います。

プロット機能に相当するquiver3があります。 z - この場合の軸は時間(例えば等間隔)であり、ベクトルのz成分はゼロになります。あなたはまた、1度に1つずつをプロットすることによって、それぞれ異なる時間スケールを色付けする

sz = size(u); 
[X, Y, Z] = meshgrid(x_points, y_points, 1:sz(3)); 
quiver3(X, Y, Z, u(:,:,:,1), u(:,:,:,2), zeros(sz(1:3))); 

が、この機能の2D版とは異なり、それはあなたがmeshgridを使用して明示的にグリッドを作成する必要があるので、座標ベクトルで渡すことをサポートしていません。結果を理解することはまだ難しいです:

figure(); hold('all'); 
for z = 1:sz(3) 
    [X, Y, Z] = meshgrid(x_points, y_points, z); 
    quiver3(X, Y, Z, u(:,:,z,1), u(:,:,z,2), zeros([sz(1:2),1])); 
end 
関連する問題