我想生成一个包含给定空间(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
答案 0 :(得分:3)
最简单的方法是使用meshgrid
生成坐标网格,然后重新整形坐标,使其成为两列矩阵:
xvalue = -15:0.25:20;
yvalue = -20:0.25:25;
[X,Y] = meshgrid(xvalue, yvalue);
point1 = [X(:) Y(:)];
我们首先在x
和y
方向创建所需的分辨率,然后使用meshgrid
生成坐标的2D网格,其中每个元素X(i,j)
和{{1一起在2D笛卡尔平面中为您提供唯一的Y(i,j)
坐标。然后,您执行(x,y)
和X(:)
将每个矩阵展开为列向量,然后我们将这两个列向量堆叠为单个两列矩阵。结果是每行提供由您定义的Y(:)
和x
范围定义的唯一2D笛卡尔坐标。
但是,如果要更正代码,您需要做的是预先分配输出矩阵,以便行数是生成网格所需的总对数,这只是乘以y
和xvalue
中的值的数量和列的数量为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