Medidas estáticas: mudanças entre as edições

De Física Computacional
Ir para navegação Ir para pesquisar
Sem resumo de edição
 
(39 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 1: Linha 1:
Em dinâmica molecular, medidas estáticas são medidas realizadas em um passo específico de tempo da simulação.
Em dinâmica molecular, medidas estáticas são medidas realizadas em um passo específico de tempo da simulação.
= Psi 6=


No estudo do agrupamento de pontos equidistantes em um espaço 2D, é possível provar matematicamente que o formato formado pelos pontos que maximiza a utilização do espaço é o '''padrão hexagonal'''. Para dinâmicas moleculares com potenciais de Lennard-Jones com densidade suficientemente alta (rho ~) é possível observar que o padrão formado após o relaxamento (tempo suficiente para a rede se estabilizar) é de fato o padrão hexagonal.
=Pair Distribution Function=
 
[[Image:Gr.png|thumb|300px|right|Representação do cálculo numérico de <math>g(r)</math>;]]
 
A ''Pair Distribution Function'' , ou "<math>g(r)</math>", é uma função que estima o quão provável é encontrar duas partículas a uma distância <math>r</math> dentro de um sistema de várias partículas.
 
Em um sistema de <math>N</math> partículas, o <math>g(r)</math> é definido como a média do número de partículas a uma distância <math>r</math>:
 
<center><math>
g(r)=\frac{V}{N^2}\langle\sum_{i=1}^N\sum_{j\neq i}^N\delta(r-|r_i-r_j|)  \rangle
</math></center>
 
Numéricamente pode ser interpretado como a média do número de pares de partículas a uma distância entre <math>r</math> e <math>r+\Delta r</math> pesado pelo volume/área desta região.
 
<math>
g(r,\Delta r)=\frac{V_t}{N^2}\sum_{i=1}^N\sum_{j\neq i}^N\left[\frac{rect\left(\frac{r-|r_i-r_j|}{\Delta r}\right)}{V\left(r+\frac{\Delta r}{2}\right)-V\left(r-\frac{\Delta r}{2}\right)}\right]
</math></center>
 
Onde <math>V_t</math> é o/a volume/área total e <math>rect</math> é a função retangular.
 
 
Em resumo, o <math>g(r,\Delta r)</math> é a média dos [[Histogramas_e_Densidade_de_Probabilidade|histogramas]] do número de partículas em um ''bin''  de largura <math>\Delta r</math> a uma <math>r</math> feitos para cada partícula no sistema pesado pelo volume/área deste ''bin''.
 
==== Construção do Código ====
 
 
==== Resultados ====
 
[[Image:GR-D.png|400px|Resultado do cálculo de <math>g(r)</math>;]]
 
=Referências=
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.
 
 
= Psi 6 (<math> \psi_6 </math>)=
 
No estudo do agrupamento de pontos equidistantes em um espaço 2D, é possível provar matematicamente que o formato formado pelos pontos que maximiza a utilização do espaço é o '''padrão hexagonal'''. Para dinâmicas moleculares com potenciais de Lennard-Jones com densidade suficientemente alta (rho ~0.8) é possível observar que o padrão formado após o relaxamento (tempo suficiente para a rede se estabilizar) é de fato o padrão hexagonal.


O psi 6 é uma análise de o quão hexagonal um padrão de posições está em um certo tempo da simulação. É possível associar a cada partícula um valor que varia entre -1 e 1 da hexagonalidade do padrão de posições formado por ele e seus primeiros vizinhos (conjunto de partículas mais próximas).  Com essa medida é possível quantificar diferentes regiões da "caixa" em que as partículas estão localizadas e então localizar possíveis "defeitos" no padrão hexagonal.
O psi 6 é uma análise de o quão hexagonal um padrão de posições está em um certo tempo da simulação. É possível associar a cada partícula um valor que varia entre -1 e 1 da hexagonalidade do padrão de posições formado por ele e seus primeiros vizinhos (conjunto de partículas mais próximas).  Com essa medida é possível quantificar diferentes regiões da "caixa" em que as partículas estão localizadas e então localizar possíveis "defeitos" no padrão hexagonal.
Linha 15: Linha 50:


== Implementação Computacional ==
== Implementação Computacional ==
[[Image:Neighbors.jpg|thumb|200px|right|Definição de vizinhança:O primeiro círculo pontilhado delimita os primeiros vizinhos, o segundo círculo pontilhado delimita os segundos vizinhos;]]


Pode-se separar a implementação computacional em dois procedimentos necesssários: Encontrar os primeiros vizinhos para cada partícula e então calcular, de fato, o valor de <math>\psi_6</math>.
Pode-se separar a implementação computacional em dois procedimentos necesssários: Encontrar os primeiros vizinhos para cada partícula e então calcular, de fato, o valor de <math>\psi_6</math>.
Linha 20: Linha 57:
=== Encontrando vizinhos ===
=== Encontrando vizinhos ===


Por definição, os primeiros vizinhos de uma partícula são aquelas partículas que estão presentes em um anel mais próximo dela, como mostra a fig.
Por definição, os primeiros vizinhos de uma partícula são aquelas partículas que estão presentes em um anel mais próximo dela, como mostra a figura ao lado.
 
O problema de encontrar primeiros vizinhos é um problema bastante discutido em teoria da computação e diversos métodos foram desenvolvidos para efetuar esta tarefa. Desta forma a maioria dos métodos otimizados são de difícil implementação e então não serão tratados nesse verbete. Se o leitor tiver interesse, entretanto, são recomendados as seguintes referências:
 
O método aqui citado é pouco otimizado, pois utiliza-se um for em <math>N^2</math>, porém de implementação razoavelmente simples. O método consiste em encontrar as 6 partículas mais próximas da partícula-teste (partícula em que busca-se calcular o valor de <math>\psi_6</math>), desta forma o valor de <math>\psi_6</math> resultará em um valor razoável ( >0.8 ) se os 6 vizinhos são de fato os primeiros vizinhos e estão localizados em um padrão quase-hexagonal em torno da partícula-teste.
 
Define-se dois vetores chamados ''neighborsX'',''neighborsY'' e ''dNeighbors'', que guardarão as posições X,Y e a distância do i-ésimo vizinho. Então os valores iniciais destes vetores recebem valores altos em relação as medidas da caixa (neste exemplo utilizou-se 20 para os dois lados), da seguinte forma:
 
<pre>
for(i=0;i<6;i++){
neighborsX[i]=999;
neighborsY[i]=999;
        dNeighbors[i]=999;
}
 
</pre>


Após, realizar-se-á a busca pelas 6 partículas mais próximas da partícula-teste, como queremos calcular para todas as partículas (NP) presentes na simulação, faremos um "for" em <math>N^2</math> guardando as posições das duas partículas, é importante resetar os valores de dNeighbors toda vez que começa-se para outra partícula-teste. (Neste algoritmo chama-se a partícula-teste de "xOrg" (x original) e o possível vizinho de "x2") :


<pre>
O problema de encontrar primeiros vizinhos é um problema bastante discutido em teoria da computação e diversos métodos foram desenvolvidos para efetuar esta tarefa. Desta forma a maioria dos métodos otimizados são de difícil implementação e então não serão tratados nesse verbete.
for(i=0;i<NP;i++){           
xOrg=xx[i];
yOrg=yy[i];
for(j=0;j<6;j++){
dNeighbors[j]=999.;
}
for(j=0;j<NP;j++){
x2=xx[j];
y2=yy[j];
</pre>


O próximo passo é de fato calcular a distância entre as partículas e testar se essa distância é menor que a maior distância presente no vetor dNeighbors. Isto é, o vetor dNeighbors começará com valores altos (999) e irá guardar partículas que tenham alguma distância menor que um valor presente em dNeighbors.
O método aqui citado é pouco otimizado, pois utiliza-se um for em <math>N^2</math>, porém de implementação razoavelmente simples. O método consiste em encontrar as partículas mais próximas da partícula-teste (partícula em que busca-se calcular o valor de <math>\psi_6</math> baseando-se em outro valor já calculado, a medida do g(r), desta forma o valor de <math>\psi_6</math> resultará em um valor razoável ( >0.8 ) se os vizinhos dentro do raio medido no g(r) são de fato 6 e estão localizados em um padrão quase-hexagonal em torno da partícula-teste.


Também é importante ressaltar que esse algoritmo tomaria uma grande parte de tempo para sistemas com alto número de partículas, desta forma é bom setar um raio de corte para o cálculo da distância, isto é, os cálculos de se uma partícula é ou não vizinho somente serão calculados caso o possível vizinho esteja suficientemente perto da partícula-teste, suficientemente perto neste algoritmo é determinado utilizando a medida de g(r) (Explicada acima), pega-se um valor um pouco maior que o primeiro pico da g(r) e define-se como o "radiusLimit" (Raio limite) do codigo:
Para encontrar os primeiros vizinhos baseando-se no g(r), precisa-se observar qual a medida do primeiro pico no gráfico do g(r) e então definir este como uma distância de corte para a partícular ser ou não vizinha (isto é, um circulo com o raio da distância de corte ao redor da partícula-teste de forma que outras partículas dentro deste círculo são suas vizinhas). Neste caso, definem-se três vetores: "neighborsX" (que guarda a posição X do vizinho), "neighborsY"(que guarda a posição Y do vizinho) e "dNeighbors"(que guarda a distância do vizinho)[É recomendado definir estes vetores com tamanho pelo menos de 10, pois é possível que sejam encontrados mais de 6 vizinhos, para isso existe a variável de controle "k" que guarda quantos vizinhos cada partícula tem] e então faz-se o for em <math>N^2</math> buscando-se as distância menores que o raio de corte:


<pre>
<pre>
if(i!=j){
for(i=0;i<NP;i++){
//Calcula distância entre partícula-teste e possível vizinho
                k=0;
deltaX=fabs(x2-xOrg);
                xOrg=xx[i];
deltaY=fabs(y2-yOrg);
yOrg=yy[i];
deltaX=deltaX-rint(deltaX/Lx)*Lx;
for(j=0;j<NP;j++){
deltaY=deltaY-rint(deltaY/Ly)*Ly;
x2=xx[j];
dNew=sqrt((deltaX*deltaX)+(deltaY*deltaY));
y2=yy[j];
// --- //
if(i!=j){
 
                                deltaX=fabs(x2-x1);
if(dNew<radiusLimit) // Testa se a distância é menor que o raio limite
                        deltaY=fabs(y2-y1);
{
                                //Condições de contorno
//Procura-se o maior valor presente em dNeighbors e salva-se com o nome de "dOld", bem como seu indíce como "index"
                                deltaX=deltaX-rint(deltaX/Lx)*Lx;
dOld=0;
                                deltaY=deltaY-rint(deltaY/Ly)*Ly;
for(k=0;k<6;k++){
                                // --- //
if(dNeighbors[k]>dOld){
                                d=sqrt((deltaX*deltaX)+(deltaY*deltaY));
dOld=dNeighbors[k];
if(d<radiusLimit)
index=k;
{
}
neighborsX[k]=x2;
}
neighborsY[k]=y2;
// --- //   
dNeighbors[k]=d;
 
k+=1;
// Testa-se se a distância do possível vizinho é menor que a maior distância presente já em dNeighbors
if(dNew<dOld){
neighborsX[index]=x2;
neighborsY[index]=y2;
dNeighbors[index]=dNew;
}
}
}
}
}
                }
}       
 
</pre>
</pre>


Portanto após esse algoritmo, temos guardadas as posições das 6 partículas mais próximas, é importante ressaltar que o "for" em partícula-teste ainda não foi fechado, e ainda dentro deste mesmo loop serão calculados os valores de <math> \psi_6 </math>.
Portanto após esse algoritmo, temos guardadas as posições das partículas mais próximas. É importante ressaltar que o "for" em partícula-teste ainda não foi fechado, e ainda dentro deste mesmo loop serão calculados os valores de <math> \psi_6 </math>.


=== Calculando o Psi 6 ===
=== Calculando o Psi 6 ===
Linha 104: Linha 108:


<pre>
<pre>
for(j=0;j<6;j++){ // Calculating angles
for(j=0;j<k;j++){
delX=neighborsX[j]-xx[i];
delX=neighborsX[j]-xx[i];
delY=neighborsY[j]-yy[i];
delY=neighborsY[j]-yy[i];
Linha 120: Linha 124:
</pre>
</pre>


Agora somente precisa-se realizar um algoritmo que ordene o vetor "angle" do menor para o maior ângulo, desta forma é possível calcular os <math> \theta_i </math>
Agora somente precisa-se realizar um algoritmo que ordene o vetor "angle" do menor para o maior ângulo, utilizando algoritmos de ordenamento (bubblesort, quicksort, etc) desta forma é possível calcular os <math> \theta_i </math>.
 


Feito o ordenamento do vetor, basta calcular a média do valor do <math> \psi_6 </math> de cada vizinho. Para isto, precisamos calcular os valores de <math> \theta_i </math> em função dos <math> \phi </math>, basta realizar a subtração do próximo vizinho no vetor pelo valor do ângulo do vizinho atual, dessa forma: <math> \theta_i = \psi_{i+1} - \psi_i </math> com exceção do último vizinho, que será o ângulo dele menos o do primeiro, desta forma a implementação fica:
Feito o ordenamento do vetor, basta calcular a média do valor do <math> \psi_6 </math> de cada vizinho. Para isto, precisamos calcular os valores de <math> \theta_i </math> em função dos <math> \phi </math>, basta realizar a subtração do próximo vizinho no vetor pelo valor do ângulo do vizinho atual, dessa forma: <math> \theta_i = \psi_{i+1} - \psi_i </math> com exceção do último vizinho, que será o ângulo dele menos o do primeiro, desta forma a implementação fica:
Linha 128: Linha 131:


firstAngle=angle[0];
firstAngle=angle[0];
for(j=0;j<5;j++){  
for(j=0;j<k-1;j++){  
angle[j]=cos(6.*(angle[j+1]-angle[j]));
angle[j]=cos(6.*(angle[j+1]-angle[j]));
}
}
angle[5]=cos(6.*(firstAngle+2*PI-angle[5]));
angle[k-1]=cos(6.*(firstAngle+2*3.1415-angle[k-1]));
for(j=0;j<6;j++){  
for(j=0;j<k;j++){  
psix[i]+=angle[j]/6.;
psix[i]+=angle[j]/6.;
}
}
Linha 141: Linha 144:
E então está calculado o valor de <math> \psi_6 </math>, para facilitar a implementação é recomendado que este algoritmo seja uma função dentro de seu código e desta forma retorne o vetor "psix".
E então está calculado o valor de <math> \psi_6 </math>, para facilitar a implementação é recomendado que este algoritmo seja uma função dentro de seu código e desta forma retorne o vetor "psix".


=Pair Distribution Function=
=== Exemplos ===
 
Para o caso de um potencial de Lennard-Jones, é possível observar resultados de mapas de <math> \psi_6 </math>, isto é, um mapa que mostra para cada partícula o seu valor da medida, da seguinte forma para cada valor de rho:
[[Image:Gr.png|thumb|300px|right|Representação do cálculo numérico de <math>g(r)</math>;]]
[[Image:Psix_1.png|thumb|400px|right|Resultados do valor de <math>\psi_6</math> (em cores) para o caso de um potencial de Lennard Jones para <math> \rho=1.000 </math>]]
 
[[Image:Psix_0360.png|thumb|400px|left|Resultados do valor de <math>\psi_6</math> (em cores) para o caso de um potencial de Lennard Jones para <math> \rho=0.360 </math>.]]
A ''Pair Distribution Function'' , ou "<math>g(r)</math>", é uma função que estima o quão provável é encontrar duas partículas a uma distância <math>r</math> dentro de um sistema de várias partículas.
[[Image:Psix_0640.png|thumb|400px|center|Resultados do valor de <math>\psi_6</math> (em cores) para o caso de um potencial de Lennard Jones para <math> \rho=0.640 </math>]]
 
 
== Aplicações em outras áreas ==


Em um sistema de <math>N</math> partículas, o <math>g(r)</math> é definido como a média do número de partículas a uma distância <math>r</math>:
[[Image:Celulasdegrade.png|thumb|300px|right|Mapa neural de células de grade em que o valor de <math> \psi_6 </math> equivale 0,99.]]


<center><math>
No estudo de como animais processam a sua posição em seu cerébro, são observadas as chamadas "Células de grade", neurônios que disparam em certos locais específicos do espaço e tendem a formar padrões de grade (hexagonal). Em posse das posições de disparo desses neurônios é possível utilizar a medida do <math> \psi_6 </math> para determinar a "hexagonalidade" dos disparos, podendo-se realizar estudos da influência desse formato na interpretação geoespacial do animal.
g(r)=\frac{V}{N^2}\langle\sum_{i=1}^N\sum_{j\neq i}^N\delta(r-|r_i-r_j|)  \rangle
</math></center>
 
Numéricamente pode ser interpretado como a média do número de pares de partículas a uma distância entre <math>r</math> e <math>r+\Delta r</math> pesado pelo volume/área desta região.
 
<math>
g(r,\Delta r)=\frac{V_t}{N^2}\sum_{i=1}^N\sum_{j\neq i}^N\left[\frac{rect\left(\frac{r-|r_i-r_j|}{\Delta r}\right)}{V\left(r+\frac{\Delta r}{2}\right)-V\left(r-\frac{\Delta r}{2}\right)}\right]
</math></center>
 
Onde <math>V_t</math> é o/a volume/área total e <math>rect</math> é a função retangular.
 
 
Em resumo, o <math>g(r,\Delta r)</math> é a média dos [[Histogramas_e_Densidade_de_Probabilidade|histogramas]] do número de partículas em um ''bin''  de largura <math>\Delta r</math> a uma <math>r</math> feitos para cada partícula no sistema pesado pelo volume/área deste ''bin''.
 
==== Construção do Código ====
 
 
==== Resultados ====
 
[[Image:GR-D.png|400px|Resultado do cálculo de <math>g(r)</math>;]]
 
=Referências=
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.

Edição atual tal como às 18h17min de 1 de agosto de 2016

Em dinâmica molecular, medidas estáticas são medidas realizadas em um passo específico de tempo da simulação.

Pair Distribution Function

Representação do cálculo numérico de ;

A Pair Distribution Function , ou "", é uma função que estima o quão provável é encontrar duas partículas a uma distância dentro de um sistema de várias partículas.

Em um sistema de partículas, o é definido como a média do número de partículas a uma distância :

Numéricamente pode ser interpretado como a média do número de pares de partículas a uma distância entre e pesado pelo volume/área desta região.

Onde é o/a volume/área total e é a função retangular.


Em resumo, o é a média dos histogramas do número de partículas em um bin de largura a uma feitos para cada partícula no sistema pesado pelo volume/área deste bin.

Construção do Código

Resultados

Resultado do cálculo de '"`UNIQ--postMath-00000010-QINU`"';

Referências

  • Frenkel, Daan and Smit, Berend (2001). Understanding Molecular Simulation. Academic Press.


Psi 6 ()

No estudo do agrupamento de pontos equidistantes em um espaço 2D, é possível provar matematicamente que o formato formado pelos pontos que maximiza a utilização do espaço é o padrão hexagonal. Para dinâmicas moleculares com potenciais de Lennard-Jones com densidade suficientemente alta (rho ~0.8) é possível observar que o padrão formado após o relaxamento (tempo suficiente para a rede se estabilizar) é de fato o padrão hexagonal.

O psi 6 é uma análise de o quão hexagonal um padrão de posições está em um certo tempo da simulação. É possível associar a cada partícula um valor que varia entre -1 e 1 da hexagonalidade do padrão de posições formado por ele e seus primeiros vizinhos (conjunto de partículas mais próximas). Com essa medida é possível quantificar diferentes regiões da "caixa" em que as partículas estão localizadas e então localizar possíveis "defeitos" no padrão hexagonal.

Para um padrão hexagonal perfeito, cada partícula apresenta 6 primeiros vizinhos, cada qual posicionado simetricamente em torno dessa. Analisando a simetria, cada vizinho consecutivo deve apresentar um ângulo de . Buscando uma relação em que esta situação seja a situação de , é possível definir que o vale:

Onde i é o índice do i-ésimo vizinho e n é o número de primeiros vizinhos. Esta relação deixa específico que o caso de 6 primeiros vizinhos e resulte em um valor de .

Implementação Computacional

Definição de vizinhança:O primeiro círculo pontilhado delimita os primeiros vizinhos, o segundo círculo pontilhado delimita os segundos vizinhos;


Pode-se separar a implementação computacional em dois procedimentos necesssários: Encontrar os primeiros vizinhos para cada partícula e então calcular, de fato, o valor de .

Encontrando vizinhos

Por definição, os primeiros vizinhos de uma partícula são aquelas partículas que estão presentes em um anel mais próximo dela, como mostra a figura ao lado.


O problema de encontrar primeiros vizinhos é um problema bastante discutido em teoria da computação e diversos métodos foram desenvolvidos para efetuar esta tarefa. Desta forma a maioria dos métodos otimizados são de difícil implementação e então não serão tratados nesse verbete.

O método aqui citado é pouco otimizado, pois utiliza-se um for em , porém de implementação razoavelmente simples. O método consiste em encontrar as partículas mais próximas da partícula-teste (partícula em que busca-se calcular o valor de baseando-se em outro valor já calculado, a medida do g(r), desta forma o valor de resultará em um valor razoável ( >0.8 ) se os vizinhos dentro do raio medido no g(r) são de fato 6 e estão localizados em um padrão quase-hexagonal em torno da partícula-teste.

Para encontrar os primeiros vizinhos baseando-se no g(r), precisa-se observar qual a medida do primeiro pico no gráfico do g(r) e então definir este como uma distância de corte para a partícular ser ou não vizinha (isto é, um circulo com o raio da distância de corte ao redor da partícula-teste de forma que outras partículas dentro deste círculo são suas vizinhas). Neste caso, definem-se três vetores: "neighborsX" (que guarda a posição X do vizinho), "neighborsY"(que guarda a posição Y do vizinho) e "dNeighbors"(que guarda a distância do vizinho)[É recomendado definir estes vetores com tamanho pelo menos de 10, pois é possível que sejam encontrados mais de 6 vizinhos, para isso existe a variável de controle "k" que guarda quantos vizinhos cada partícula tem] e então faz-se o for em buscando-se as distância menores que o raio de corte:

	for(i=0;i<NP;i++){
                k=0;
                xOrg=xx[i];
		yOrg=yy[i];
		for(j=0;j<NP;j++){
			x2=xx[j];
			y2=yy[j];
			if(i!=j){
                                deltaX=fabs(x2-x1);
                        	deltaY=fabs(y2-y1);
                                //Condições de contorno
                                deltaX=deltaX-rint(deltaX/Lx)*Lx;
                                deltaY=deltaY-rint(deltaY/Ly)*Ly;
                                // --- //
                                d=sqrt((deltaX*deltaX)+(deltaY*deltaY));
				if(d<radiusLimit)
				{	
					neighborsX[k]=x2;
					neighborsY[k]=y2;
					dNeighbors[k]=d;
					k+=1;
				}
			}		
                 }

Portanto após esse algoritmo, temos guardadas as posições das partículas mais próximas. É importante ressaltar que o "for" em partícula-teste ainda não foi fechado, e ainda dentro deste mesmo loop serão calculados os valores de .

Calculando o Psi 6

Tendo os valores de X e Y dos vizinhos da partícula-teste, podemos proceder para o cálculo do . Para este cálculo, precisamos dos ângulos que cada vizinho tem em relação a partícula-teste, isto é, setamos um referencial X-Y com a origem na partícula-teste e calculamos o ângulo que cada vizinho tem com o eixo X, este ângulo será chamado de e será dado pela seguinte relação:

Na implementação em código fica:

	for(j=0;j<k;j++){
		delX=neighborsX[j]-xx[i];
		delY=neighborsY[j]-yy[i];

                //Condições de contorno periódicas
		delX=delX-rint(delX/Lx)*Lx; 
        	delY=delY-rint(delY/Ly)*Ly;
                // --- //

		angle[j]=atan2(delY,delX);
		if (angle[j]<0)
			angle[j]=2*PI+angle[j];
                psix[i]=0;
 

Agora somente precisa-se realizar um algoritmo que ordene o vetor "angle" do menor para o maior ângulo, utilizando algoritmos de ordenamento (bubblesort, quicksort, etc) desta forma é possível calcular os .

Feito o ordenamento do vetor, basta calcular a média do valor do de cada vizinho. Para isto, precisamos calcular os valores de em função dos , basta realizar a subtração do próximo vizinho no vetor pelo valor do ângulo do vizinho atual, dessa forma: com exceção do último vizinho, que será o ângulo dele menos o do primeiro, desta forma a implementação fica:


		firstAngle=angle[0];	
		for(j=0;j<k-1;j++){ 
			angle[j]=cos(6.*(angle[j+1]-angle[j]));
		}		
		angle[k-1]=cos(6.*(firstAngle+2*3.1415-angle[k-1]));
		for(j=0;j<k;j++){ 
			psix[i]+=angle[j]/6.;
		}	
	}
}

E então está calculado o valor de , para facilitar a implementação é recomendado que este algoritmo seja uma função dentro de seu código e desta forma retorne o vetor "psix".

Exemplos

Para o caso de um potencial de Lennard-Jones, é possível observar resultados de mapas de , isto é, um mapa que mostra para cada partícula o seu valor da medida, da seguinte forma para cada valor de rho:

Resultados do valor de (em cores) para o caso de um potencial de Lennard Jones para
Resultados do valor de (em cores) para o caso de um potencial de Lennard Jones para .
Resultados do valor de (em cores) para o caso de um potencial de Lennard Jones para


Aplicações em outras áreas

Mapa neural de células de grade em que o valor de equivale 0,99.

No estudo de como animais processam a sua posição em seu cerébro, são observadas as chamadas "Células de grade", neurônios que disparam em certos locais específicos do espaço e tendem a formar padrões de grade (hexagonal). Em posse das posições de disparo desses neurônios é possível utilizar a medida do para determinar a "hexagonalidade" dos disparos, podendo-se realizar estudos da influência desse formato na interpretação geoespacial do animal.