繁体   English   中英

在Matlab中的3D轴上绘制2D向量

[英]Plotting a 2d vector on 3d axes in matlab

我有三个向量x,y,t。 对于每个组合x,y,t,都有一个与之关联的(u,v)值。 如何在matlab中绘制? 实际上,我正在尝试绘制2d双曲方程v t = A 1 v x + A 2 v y的解 ,其中A 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))

您可以用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM