我有两个for循环:
for x = 1:1:15
for y = 1:1:15
values(x,y) = x^2 + y
end
end
这允许我为x和y的每个组合计算x ^ 2 + y(如果它们是整数)。
但是,如果我想计算小数的x ^ 2 + y怎么办?
这样的事情:
for x = 0:0.1:15
for y = 0:0.1:15
????? = x^2 + y
end
end
如果x和y是小数,那么有人可以帮我找到一个可以计算x ^ 2 + y的所有可能性的方法,所以不能再用作索引了吗?
答案 0 :(得分:5)
使用meshgrid,matlab内置的2-D矩形网格,无需循环!
[y x]=meshgrid(0:0.1:15)
values=x.^2+y
可视化:
imagesc(values);
title('values=x^2+y'); axis square
xlabel('x'); ylabel('y'); colorbar;
axis xy;
set(gca,'XTick',1:10:151,'YTick',1:10:151);
set(gca,'XTickLabel',0:1:15,'YTickLabel',0:1:15);
修改强>
mdgrid
也很好,唯一要注意的是[y x]=meshgrid...
是相同的[x y]=ndgird...
答案 1 :(得分:3)
使用:
[x y] = ndgrid(0:0.1:15);
values = x.^2 + y;
其他答案的问题:
x
和y
与初始示例相比的顺序(使用meshgrid
而不是ndgrid
。d_x
x
x = 0:.1:15; y = 0:.1:15; values = zeros(numel(x),numel(y)); for xnum = 1:numel(x) for ynum = 1:numel(y) values(xnum,ynum) = x(xnum)^2 + y(ynum); end end
由于它产生了一些讨论,从文档(在MATLAB中,而不是在在线文档中)讨论了meshgrid
和ndgrid
之间的差异:
meshgrid
与ndgrid
类似,只是前两个输入和输出参数的顺序被切换(即[X,Y,Z] = meshgrid(x,y,z)
产生与[Y,X,Z] = ndgrid(y,x,z)
相同的结果)。 。meshgrid
也仅限于2D或3D。
答案 2 :(得分:2)
for x =1:0.1:15
for y=1:0.1:15
values(x*10-10, y*10-10) =x^2+y;
end
end
答案 3 :(得分:1)
为什么不循环从1到151的整数然后计算要使用的小数?然后你仍然可以使用索引引用。
即
for x = 1:1:151
for y = 1:1:151
d_x = x / 10.0 - 0.1
d_y = y / 10.0 - 0.1
values(x,y) = d_x^2 + d_y
end
end
(请原谅我,如果我的语法略有偏离,暂时没有使用MATLAB)。