在matlab上绘制3d轴上的2d矢量

时间:2016-03-20 21:15:41

标签: matlab plot 3d 2d

我有三个向量x,y,t。对于每个组合x,y,t,存在与其相关联的(u,v)值。如何在matlab中绘制这个?实际上我试图绘制二维双曲方程的解 v t = A 1 v x + A 2 v y 其中A < sub> 1 且A 2 是2 * 2矩阵,v是2 * 1矢量。我正在尝试使用scatter3和quiver3但是对matlab不熟悉我无法正确表示解决方案。 在下面的代码中,我只绘制了一个特定的时间级别。如何在一个图中显示完整的解决方案?有帮助吗?

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))

1 个答案:

答案 0 :(得分:1)

你可以用3D绘制它,但我个人觉得很难理解它。

您的绘图功能具有quiver3等效值。 z - 在这种情况下,轴是时间(例如,等间距),矢量的z分量将为零。与此函数的2D版本不同,它不支持传递坐标向量,因此您需要使用meshgrid显式创建网格:

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)));

您也可以通过逐个绘制一个时间刻度来对每个时间刻度进行着色,但仍然难以理解结果:

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