2017-03-09 63 views
-2

我想在Matlab中創建一個二維週期性結構,每個方向有不變的點數(比如說b),所以在這個平方中有b * b個點。如果我們稱格子框的總大小等於L,我該怎麼做?對於簡稱b,我可以手工完成。例如對於b = 2和l = 25:在matlab中創建2d latice

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

但是我怎麼能做到這一點大b和不同l?

根據回答,我認爲這個問題並不清楚。因此,我添加另一個例子: 我想選擇在長度等於一個squre 3^2分〜27它被示於下面的圖:

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

我不明白'x'和'y'是如何計算的。封閉式公式是什麼? – rayryeng

+0

我選擇它們以便| x_2-x_1 | = | l + x_1-x_2 |和y一樣... @rayryeng –

+0

我想創建一個2d的週期性結構@rayryeng –

回答

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.

+0

沒有鏡像邊界條件。我想在2d中找到格子中的位置。 –

+0

你的回答是錯誤的。我想要長度爲l的正方形中的b * b個點。 –

+0

@saranj好的,我製作了一些與x和y的樣例輸出相匹配的東西,並且類似。我應該怎麼知道你需要別的東西?解決你的問題,我會考慮修復我的答案。 –