在matlab中创建2d latice

时间:2017-03-09 06:20:49

标签: matlab

我想在Matlab中创建一个2d周期结构,每个方向上有一个恒定数量的点(比如说b),所以方形中有b * b个点。如果我们称格子盒的总大小等于L,我该怎么做?对于简短的b,我可以手工完成。例如,对于b = 2和l = 25:

x = [6.25;18.75;18.75;6.25]; 
y = [6.25;18.75;6.25;18.75]; 

但我怎么能为大型和不同的人做这件事?

根据答案,我认为问题不明确。所以我再添一个例子: 我想在一个长度等于27的方形中选择3 ^ 2个点。如下图所示:

enter image description here

在这种情况下,答案是:

x= [4.5;13.5;22.5;4.5;13.5;22.5;4.5;13.5;22.5] %x component of position of points
y= [22.5;22.5;22.5;13.5;13.5;13.5;4.5;4.5;4.5] %y component of position of points

1 个答案:

答案 0 :(得分:0)

啊哈,现在我明白了你的意思。

oneLattice = (l/(2*b) : l/b : l);
x = repmat(oneLattice, 1, b)'; % Make a column vector.
y = repmat(oneLattice, b, 1); % will be a matrix. You can use it the same as x - linear indexing.
y = y(:); % To make it in a single column.

旧版本:

我认为步骤被选择为在所有点之间具有相同的距离,其中第一个点和最后一个点是对称的,这是合理的并且很常见。似乎x已经镜像了边界条件,而对于y它是周期性的(你应该告诉它下一次)。

oneLattice = (l/(2*b) : l/b : l)';
x = [oneLattice; oneLattice(end:-1:1)];
y = [oneLattice; oneLattice];

简要说明:点之间的步长是l / b,在格子l上有b点。 0 + epsilon和l / b之间的第一点的任何东西都可以。 (从0开始,你需要结束条件l-epsilon不能有b + 1分)。为了让它居中 - 远离边缘作为最后一点,你应该显然把它放在中间,所以l / b / 2。

只是旁注,下次尝试不使用l作为变量。它与1太相似了。