如何在matlab中生成网格矩阵

时间:2016-11-30 15:03:33

标签: matlab

我想生成一个包含给定空间(x,y)点的矩阵。

xvalue = -15:0.25:20
yvalue = -20:0.25:25

for i = 1:141
    for j =1:181
        point1(i,j) = [xvalue(1,i) yvalue(1,j)];
    end
end

此代码出错。我是matlab的新手请帮帮忙。我希望矩阵看起来像这样

1  1


1  2

1  3
.

.
.
.

错误:

Subscripted assignment dimension mismatch

3 个答案:

答案 0 :(得分:3)

最简单的方法是使用meshgrid生成坐标网格,然后重新整形坐标,使其成为两列矩阵:

xvalue = -15:0.25:20;
yvalue = -20:0.25:25;
[X,Y] = meshgrid(xvalue, yvalue);
point1 = [X(:) Y(:)];

我们首先在xy方向创建所需的分辨率,然后使用meshgrid生成坐标的2D网格,其中每个元素X(i,j)和{{1一起在2D笛卡尔平面中为您提供唯一的Y(i,j)坐标。然后,您执行(x,y)X(:)将每个矩阵展开为列向量,然后我们将这两个列向量堆叠为单个两列矩阵。结果是每行提供由您定义的Y(:)x范围定义的唯一2D笛卡尔坐标。

但是,如果要更正代码,您需要做的是预先分配输出矩阵,以便行数是生成网格所需的总对数,这只是乘以yxvalue中的值的数量和列的数量为2,然后使用单独的计数器迭代输出矩阵的每一行,并将每对值添加到每一行:

yvalue

答案 1 :(得分:3)

一种直接的方式(我认为比@ rayryeng的建议更快):

xvalue = -15:0.25:20;
yvalue = -20:0.25:25;
xymat(:,1)=kron(xvalue ,ones(1,length(yvalue)));
xymat(:,2)=repmat(yvalue',length(xvalue),1);

答案 2 :(得分:0)

目前还不清楚你的成就。您正在为矩阵分配1X2矩阵,但其条目应该是双精度。 也许您可以将point1声明为cell来实现。

point1 =cell(141,181);
xvalue = -15:0.25:20;
yvalue = -20:0.25:25;

for i = 1:141
    for j =1:181
        point1{i,j} = [xvalue(1,i) yvalue(1,j)];
    end
end

如果您想要一个字符串,请将它们转换为字符串。

point1 =cell(141,181);
xvalue = -15:0.25:20;
yvalue = -20:0.25:25;

for i = 1:141
    for j =1:181
        point1{i,j} = [ num2str(xvalue(1,i)), ' ', num2str(yvalue(1,j)) ];
    end
end