`streamline` 没有绘制这个矢量场
`streamline` not plotting this vector field
我正在尝试使用非常简单的 3D 矢量场测试流线型。我使用 3 个 for 循环填充网格(不是最好的,但这让人想起“v”的不同表达式,我无法轻易对其进行矢量化)。然后我将矢量场 v 定义为 r。简单的径向场。我的完整代码如下。 quiver3 很好,但不幸的是流线型给我以下错误:
Error using griddedInterpolant
Interpolation requires at least two
sample points in each dimension.
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])
它returns回到网格X, Y
变量,如果你使用X
和Y
的转置版本,你将不会得到这个插值流线函数中的错误。要在 MATLAB 中转置 N 维数组,请使用 permute
函数,例如:
X = permute(X, [2,1,3]); % to rearrange X and Y dimension
或者只在 X
和 Y
的第一个位置定义正确的形式 [在循环中]
我正在尝试使用非常简单的 3D 矢量场测试流线型。我使用 3 个 for 循环填充网格(不是最好的,但这让人想起“v”的不同表达式,我无法轻易对其进行矢量化)。然后我将矢量场 v 定义为 r。简单的径向场。我的完整代码如下。 quiver3 很好,但不幸的是流线型给我以下错误:
Error using griddedInterpolant Interpolation requires at least two sample points in each dimension.
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])
它returns回到网格X, Y
变量,如果你使用X
和Y
的转置版本,你将不会得到这个插值流线函数中的错误。要在 MATLAB 中转置 N 维数组,请使用 permute
函数,例如:
X = permute(X, [2,1,3]); % to rearrange X and Y dimension
或者只在 X
和 Y
的第一个位置定义正确的形式 [在循环中]