Matlab 在每行上改变变量的情况下构建矩阵的问题
我正在尝试对我将在数据集上定义的多边形的4个点进行循环。我用lat,lon,dlat和dlon来表达这些观点Matlab 在每行上改变变量的情况下构建矩阵的问题,matlab,for-loop,matrix,Matlab,For Loop,Matrix,我正在尝试对我将在数据集上定义的多边形的4个点进行循环。我用lat,lon,dlat和dlon来表达这些观点 lat = [35.314166 35.413909 35.533307 35.751982 35.3142 35.1607 35.0475 34.9878 34.9441]; lon = [-119.865953 -119.970299 -120.086757 -120.300046 -119.8659 -119.7068 -119.5583 -119.4711 -119.4029];
lat = [35.314166 35.413909 35.533307 35.751982 35.3142 35.1607 35.0475 34.9878 34.9441];
lon = [-119.865953 -119.970299 -120.086757 -120.300046 -119.8659 -119.7068 -119.5583 -119.4711 -119.4029];
首先,我想创建一个循环来创建4个点,并将它们保存为矩阵b的第一行,大小为(4,4)
这是我需要的矩阵
b = [p11 p12 p13 p14 ;
p21 p22 p23 p24 ;
p31 p32 p33 p34 ;
p41 p42 p43 p44]
以下是我想定义的前两个多边形点的示例:
p11 = [lon(9) + dlon, lat(9) + dlat]
p12 = [lon(8) + dlon, lat(8) + dlat]
p13 = [lon(8) - dlon, lat(8) - dlat]
p14 = [lon(9) - dlon, lat(9) - dlat]
p21 = [lon(8) + dlon, lat(8) + dlat]
p22 = [lon(7) + dlon, lat(7) + dlat]
p23 = [lon(7) - dlon, lat(7) - dlat]
p24 = [lon(8) - dlon, lat(8) - dlat]
我一直在定义for循环,我甚至不知道解决方案是否是for循环。请帮帮我。谢谢 这里有两种解决方案。一个我试图尽可能接近你给我看的非循环代码的地方:
s=numel(lon); % I guess we start at 9 because lon has 9 elements?
b=zeros(4,4,2);
for ix=1:size(b,1)
%Calculate the indices of lon and lat
index=s-ix;
%very similar to the example you showed, insert the data into the
%matrix
b(ix,1,:)=[lon(index+1) + dlon, lat(index+1) + dlat];
b(ix,2,:)=[lon(index) + dlon, lat(index) + dlat];
b(ix,3,:)=[lon(index) - dlon, lat(index) - dlat];
b(ix,4,:)=[lon(index+1) - dlon, lat(index+1) - dlat];
end
这里有一个替代方案,它稍微减少了代码
s=numel(lon); % I guess we start at 9 because lon has 9 elements?
b=zeros(4,4,2);
for ix=1:size(b,1)
%Calculate the indices of lon and lat
index=s-ix+[1,0,0,1];
%Build up one slice
h=([lon(index);lat(index)]+[dlon;dlat].*[1,1,-1,-1]).';
%insert h into the matrix. h is wrong way round, so it is transposed.
b(ix,:,:)=h.';
end
您可能想用您试图使用的语言标记帖子……您使用的是Matlab2016b还是更高版本?您的变量
p11
已经有两个元素,如果将这些变量中的4x4放入矩阵中,您将得到类似8x4或(您可能需要的)4x4x2的结果。我的MATLAB版本是2019b。是的,事实上,正如你所说,它将是4x2。有可能做这样一个for循环吗?非常感谢。工作得很好。
s=numel(lon); % I guess we start at 9 because lon has 9 elements?
b=zeros(4,4,2);
for ix=1:size(b,1)
%Calculate the indices of lon and lat
index=s-ix+[1,0,0,1];
%Build up one slice
h=([lon(index);lat(index)]+[dlon;dlat].*[1,1,-1,-1]).';
%insert h into the matrix. h is wrong way round, so it is transposed.
b(ix,:,:)=h.';
end