0

我正在尝试使用非常简单的 3D 矢量场来测试流线型。我使用 3 个 for 循环填充网格(不是最好的,但这让人想起“v”的不同表达式,我无法轻易矢量化)。然后我将向量场 v 定义为 r。简单的径向场。我的完整代码如下。quiver3 很好,但不幸的是 streamline 给了我以下错误:

使用 griddedInterpolant 插值的错误需要在每个维度中至少有两个样本点。

N = 5;
L = 2;
dl = 2*L/N;
for i = 1:N+1
    for j = 1:N+1
        for k = 1:N+1
     
        x = -L + (i-1)*dl;
        y = -L + (j-1)*dl;
        z = -L + (k-1)*dl;
        
        X(i,j,k) = x;
        Y(i,j,k) = y;
        Z(i,j,k) = z;
        
        r = [x,y,z];
        
        v = r-r0;
        
        Vx(i,j,k) = v(1);
        Vy(i,j,k) = v(2);
        Vz(i,j,k) = v(3);
        
        end
    end
end

quiver3(X,Y,Z,Vx,Vy,Vz);
[sx,sy,sz] = meshgrid(0:0.1:1,0:1:5,0:1:5);
streamline(X,Y,Z,Vx,Vy,Vz,sx,sy,sz);
hold on;
streamslice(X,Y,Z,Vx,Vy,Vz,[],[],5);
pbaspect([1,1,1])
4

1 回答 1

1

它返回网格X, Y 变量,如果您使用 和 的转置版本XY您将不会在流线函数中得到此插值错误。要在 MATLAB 中转置 ND 数组,请使用permute函数,例如:

X = permute(X, [2,1,3]);  % to rearrange X and Y dimension

或者只是在[循环中]首先定义Xand的正确形式Y

于 2021-01-15T20:03:52.070 回答