??? 定义交错网格时MATLAB中的下标赋值不匹配错误

??? 定义交错网格时MATLAB中的下标赋值不匹配错误,matlab,grid,Matlab,Grid,如何在MATLAB中绘制网格点?我需要在矩形刚性网格上解Navier-stokes方程。速度控制体积将移动半个单元边缘距离作为x-CV的宽度。您需要使用interp2插值误差线,并使用permute暂时返回到正常矩阵 您的问题中没有具体说明如何插值。我并不感到惊讶,因为您正在做: function [x, y, z, u, v, w] = rectNSgrid() global nX nY nZ nuX nvY nwZ h b l b=input('Input channel width:');

如何在MATLAB中绘制网格点?我需要在矩形刚性网格上解Navier-stokes方程。速度控制体积将移动半个单元边缘距离作为x-CV的宽度。

您需要使用interp2插值误差线,并使用permute暂时返回到正常矩阵


您的问题中没有具体说明如何插值。

我并不感到惊讶,因为您正在做:

function [x, y, z, u, v, w] = rectNSgrid()
global nX nY nZ nuX nvY nwZ h b l
b=input('Input channel width:');
h=input('Input channel height:');
l=input('Input channel length:');
nX = input('Input number of x divisions');
nY = input('Input number of y divisions');
nZ = input('Input number of z divisions');
x=zeros(nX,nY,nZ);
y=zeros(nX,nY,nZ);
z=zeros(nX,nY,nZ);
xu=zeros(nuX,nvY,nwZ);
yv=zeros(nuX,nvY,nwZ);
zw=zeros(nuX,nvY,nwZ);
for i = 1:nX
    x(i,:,:) = b*(i-1)/(nX-1);
end
for j = 1:nY
    y(:,j,:) = l*(j-1)/(nY-1);
end
for k = 1:nZ
    z(:,:,k) = h*(k-1)/(nZ-1);
end
nuX = nX-1;
nvY = nY-1;
nwZ = nZ-1;
for i=1:nuX
    xu(i,:,:) = (x(i,:,:)+x(i+1,:,:))/2; % Here is the place it shows the error
end
for j=1:nvY
    yv(:,j,:) = (y(:,j,:)+y(:,j+1,:))/2;
end
for k=1:nwZ
    zw(:,:,k) = (z(:,:,k)+z(:,:,k+1))/2;
end

但是
x
的大小是
(nX,nY,nZ)
,因此除非
nX=nuX
,否则您将有一个错误。即使
nX=nuX
,当
i=nuX
时,由于
x(i+1,:,:)
仍会出现错误,正如前面所说,此行无法工作:

for i=1:nuX
    xu(i,:,:) = (x(i,:,:)+x(i+1,:,:))/2; 
end
因为xu(i,:,:)是[1 nuy nuz],x(i,:,:)是[1 ny nz],而ni nui的定义不同

我想我明白你会怎么做,试试这个,也许它能帮你完成任务:

xu(i,:,:) = (x(i,:,:)+x(i+1,:,:))/2;

但是请注意,'meshgrid'并没有给出您想要的结果,因为它在结果矩阵的第2维中索引X维,在第一维中索引Y维。有关详细信息,请参阅“meshgrid”的文档。我想,你可以用“permute”随心所欲地使用它。

你需要更改代码中
x
的索引,以确保当
I
1
变为
nuX
时,你总是在
1
nX
之间。这很困难,因为您同时使用了
i
i+1
,所以我看不出这是如何工作的。谢谢您的回复。建议的代码很有帮助。但对于矩形网格,它是否同样有效?我的意思是我使用了b=2,l=290,h=1(根据我使用的通道的尺寸),并将nX=10;纽约=50,新西兰=5。它不显示非常规则的网格。我还需要问一下,我需要一个网格来解Navier-Stokes方程,其中网格中的每个点都会被指定一个特定的位置或速度值。用这种方式定义的网格可以这样做吗?谢谢。对于非正方形网格,它应该可以正常工作,但是对于“轴正方形”,你在绘图上看不到它,请改为“轴相等”。为了存储你的位置(和速度),只需复制一个X,Y,Z(和uX,uY,uZ)来存储你的数据。现在,对于你的Navier-Stokes问题,如果你用有限差分法求解,这种方法很好,如果你打算用有限元,你需要一个三角网格,我只使用有限差分法。这对我来说很有用。。非常感谢你。
function [x, y, z, u, v, w] = rectNSgrid(nX,nY,nZ,h,b,l)

% CELL NODES
[X Y Z] = meshgrid([0:b/nX:b],[0:l/nY:l],[0:h/nZ:h]);

% VELOCITY NODES
axX = [ 0.5*b/nX : b/nX : b-0.5*b/nX ];
axY = [ 0.5*l/nY : l/nY : l-0.5*l/nY ];
axZ = [ 0.5*h/nZ : h/nZ : h-0.5*h/nZ ];
[uX uY uZ] = meshgrid(axX,axY,axZ);

% PLOT
hold on; view(3); axis square;
plot3(X(:),Y(:),Z(:),'.b'); % CELL NODES
plot3(uX(:),uY(:),uZ(:),'.r'); % VELOCITY NODES