<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pt-BR">
	<id>http://fiscomp.if.ufrgs.br/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Rmoreira</id>
	<title>Física Computacional - Contribuições do usuário [pt-br]</title>
	<link rel="self" type="application/atom+xml" href="http://fiscomp.if.ufrgs.br/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Rmoreira"/>
	<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php/Especial:Contribui%C3%A7%C3%B5es/Rmoreira"/>
	<updated>2026-04-21T03:11:17Z</updated>
	<subtitle>Contribuições do usuário</subtitle>
	<generator>MediaWiki 1.39.4</generator>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=683</id>
		<title>Medidas estáticas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=683"/>
		<updated>2016-08-01T21:17:08Z</updated>

		<summary type="html">&lt;p&gt;Rmoreira: /* Calculando o Psi 6 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em dinâmica molecular, medidas estáticas são medidas realizadas em um passo específico de tempo da simulação.&lt;br /&gt;
&lt;br /&gt;
=Pair Distribution Function=&lt;br /&gt;
&lt;br /&gt;
[[Image:Gr.png|thumb|300px|right|Representação do cálculo numérico de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
A ''Pair Distribution Function'' , ou &amp;quot;&amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;&amp;quot;, é uma função que estima o quão provável é encontrar duas partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; dentro de um sistema de várias partículas.&lt;br /&gt;
&lt;br /&gt;
Em um sistema de &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas, o &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt; é definido como a média do número de partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
	g(r)=\frac{V}{N^2}\langle\sum_{i=1}^N\sum_{j\neq i}^N\delta(r-|r_i-r_j|)  \rangle&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Numéricamente pode ser interpretado como a média do número de pares de partículas a uma distância entre &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;r+\Delta r&amp;lt;/math&amp;gt; pesado pelo volume/área desta região.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	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]&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde &amp;lt;math&amp;gt;V_t&amp;lt;/math&amp;gt; é o/a volume/área total e &amp;lt;math&amp;gt;rect&amp;lt;/math&amp;gt; é a função retangular.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Em resumo, o &amp;lt;math&amp;gt;g(r,\Delta r)&amp;lt;/math&amp;gt; é a média dos [[Histogramas_e_Densidade_de_Probabilidade|histogramas]] do número de partículas em um ''bin''  de largura &amp;lt;math&amp;gt;\Delta r&amp;lt;/math&amp;gt; a uma &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; feitos para cada partícula no sistema pesado pelo volume/área deste ''bin''.&lt;br /&gt;
&lt;br /&gt;
==== Construção do Código ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Resultados ====&lt;br /&gt;
&lt;br /&gt;
[[Image:GR-D.png|400px|Resultado do cálculo de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
=Referências=&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Psi 6 (&amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;)=&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;caixa&amp;quot; em que as partículas estão localizadas e então localizar possíveis &amp;quot;defeitos&amp;quot; no padrão hexagonal.&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\frac{\pi}{3}&amp;lt;/math&amp;gt;. Buscando uma relação em que esta situação seja a situação de &amp;lt;math&amp;gt;\psi_6 = 1&amp;lt;/math&amp;gt;, é possível definir que o &amp;lt;math&amp;gt;\psi_6 &amp;lt;/math&amp;gt; vale:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\psi_6=\frac{1}{6}\sum_i^ncos(6\theta_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\theta=\frac{\pi}{3}&amp;lt;/math&amp;gt; resulte em um valor de &amp;lt;math&amp;gt;\psi_6=1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Implementação Computacional ==&lt;br /&gt;
[[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;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Encontrando vizinhos ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
O método aqui citado é pouco otimizado, pois utiliza-se um for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;, 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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; baseando-se em outro valor já calculado, a medida do g(r), desta forma o valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; resultará em um valor razoável ( &amp;gt;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.&lt;br /&gt;
&lt;br /&gt;
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: &amp;quot;neighborsX&amp;quot; (que guarda a posição X do vizinho), &amp;quot;neighborsY&amp;quot;(que guarda a posição Y do vizinho) e &amp;quot;dNeighbors&amp;quot;(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 &amp;quot;k&amp;quot; que guarda quantos vizinhos cada partícula tem] e então faz-se o for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; buscando-se as distância menores que o raio de corte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(i=0;i&amp;lt;NP;i++){&lt;br /&gt;
                k=0;&lt;br /&gt;
                xOrg=xx[i];&lt;br /&gt;
		yOrg=yy[i];&lt;br /&gt;
		for(j=0;j&amp;lt;NP;j++){&lt;br /&gt;
			x2=xx[j];&lt;br /&gt;
			y2=yy[j];&lt;br /&gt;
			if(i!=j){&lt;br /&gt;
                                deltaX=fabs(x2-x1);&lt;br /&gt;
                        	deltaY=fabs(y2-y1);&lt;br /&gt;
                                //Condições de contorno&lt;br /&gt;
                                deltaX=deltaX-rint(deltaX/Lx)*Lx;&lt;br /&gt;
                                deltaY=deltaY-rint(deltaY/Ly)*Ly;&lt;br /&gt;
                                // --- //&lt;br /&gt;
                                d=sqrt((deltaX*deltaX)+(deltaY*deltaY));&lt;br /&gt;
				if(d&amp;lt;radiusLimit)&lt;br /&gt;
				{	&lt;br /&gt;
					neighborsX[k]=x2;&lt;br /&gt;
					neighborsY[k]=y2;&lt;br /&gt;
					dNeighbors[k]=d;&lt;br /&gt;
					k+=1;&lt;br /&gt;
				}&lt;br /&gt;
			}		&lt;br /&gt;
                 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Portanto após esse algoritmo, temos guardadas as posições das partículas mais próximas. É importante ressaltar que o &amp;quot;for&amp;quot; em partícula-teste ainda não foi fechado, e ainda dentro deste mesmo loop serão calculados os valores de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Calculando o Psi 6 ===&lt;br /&gt;
&lt;br /&gt;
Tendo os valores de X e Y dos vizinhos da partícula-teste, podemos proceder para o cálculo do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;. 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 &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt; e será dado pela seguinte relação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\phi_i=arctg\left(\frac{\Delta Y}{\Delta X}\right)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na implementação em código fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(j=0;j&amp;lt;k;j++){&lt;br /&gt;
		delX=neighborsX[j]-xx[i];&lt;br /&gt;
		delY=neighborsY[j]-yy[i];&lt;br /&gt;
&lt;br /&gt;
                //Condições de contorno periódicas&lt;br /&gt;
		delX=delX-rint(delX/Lx)*Lx; &lt;br /&gt;
        	delY=delY-rint(delY/Ly)*Ly;&lt;br /&gt;
                // --- //&lt;br /&gt;
&lt;br /&gt;
		angle[j]=atan2(delY,delX);&lt;br /&gt;
		if (angle[j]&amp;lt;0)&lt;br /&gt;
			angle[j]=2*PI+angle[j];&lt;br /&gt;
                psix[i]=0;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora somente precisa-se realizar um algoritmo que ordene o vetor &amp;quot;angle&amp;quot; do menor para o maior ângulo, utilizando algoritmos de ordenamento (bubblesort, quicksort, etc) desta forma é possível calcular os &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Feito o ordenamento do vetor, basta calcular a média do valor do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; de cada vizinho. Para isto, precisamos calcular os valores de &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt; em função dos &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt;, basta realizar a subtração do próximo vizinho no vetor pelo valor do ângulo do vizinho atual, dessa forma: &amp;lt;math&amp;gt; \theta_i = \psi_{i+1} - \psi_i &amp;lt;/math&amp;gt; com exceção do último vizinho, que será o ângulo dele menos o do primeiro, desta forma a implementação fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		firstAngle=angle[0];	&lt;br /&gt;
		for(j=0;j&amp;lt;k-1;j++){ &lt;br /&gt;
			angle[j]=cos(6.*(angle[j+1]-angle[j]));&lt;br /&gt;
		}		&lt;br /&gt;
		angle[k-1]=cos(6.*(firstAngle+2*3.1415-angle[k-1]));&lt;br /&gt;
		for(j=0;j&amp;lt;k;j++){ &lt;br /&gt;
			psix[i]+=angle[j]/6.;&lt;br /&gt;
		}	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E então está calculado o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, para facilitar a implementação é recomendado que este algoritmo seja uma função dentro de seu código e desta forma retorne o vetor &amp;quot;psix&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Exemplos ===&lt;br /&gt;
Para o caso de um potencial de Lennard-Jones, é possível observar resultados de mapas de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, isto é, um mapa que mostra para cada partícula o seu valor da medida, da seguinte forma para cada valor de rho:&lt;br /&gt;
[[Image:Psix_1.png|thumb|400px|right|Resultados do valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; (em cores) para o caso de um potencial de Lennard Jones para &amp;lt;math&amp;gt; \rho=1.000 &amp;lt;/math&amp;gt;]]&lt;br /&gt;
[[Image:Psix_0360.png|thumb|400px|left|Resultados do valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; (em cores) para o caso de um potencial de Lennard Jones para &amp;lt;math&amp;gt; \rho=0.360 &amp;lt;/math&amp;gt;.]]&lt;br /&gt;
[[Image:Psix_0640.png|thumb|400px|center|Resultados do valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; (em cores) para o caso de um potencial de Lennard Jones para &amp;lt;math&amp;gt; \rho=0.640 &amp;lt;/math&amp;gt;]]&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
== Aplicações em outras áreas ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Celulasdegrade.png|thumb|300px|right|Mapa neural de células de grade em que o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; equivale 0,99.]]&lt;br /&gt;
&lt;br /&gt;
No estudo de como animais processam a sua posição em seu cerébro, são observadas as chamadas &amp;quot;Células de grade&amp;quot;, 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 &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; para determinar a &amp;quot;hexagonalidade&amp;quot; dos disparos, podendo-se realizar estudos da influência desse formato na interpretação geoespacial do animal.&lt;/div&gt;</summary>
		<author><name>Rmoreira</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=682</id>
		<title>Medidas estáticas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=682"/>
		<updated>2016-08-01T21:16:02Z</updated>

		<summary type="html">&lt;p&gt;Rmoreira: /* Encontrando vizinhos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em dinâmica molecular, medidas estáticas são medidas realizadas em um passo específico de tempo da simulação.&lt;br /&gt;
&lt;br /&gt;
=Pair Distribution Function=&lt;br /&gt;
&lt;br /&gt;
[[Image:Gr.png|thumb|300px|right|Representação do cálculo numérico de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
A ''Pair Distribution Function'' , ou &amp;quot;&amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;&amp;quot;, é uma função que estima o quão provável é encontrar duas partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; dentro de um sistema de várias partículas.&lt;br /&gt;
&lt;br /&gt;
Em um sistema de &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas, o &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt; é definido como a média do número de partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
	g(r)=\frac{V}{N^2}\langle\sum_{i=1}^N\sum_{j\neq i}^N\delta(r-|r_i-r_j|)  \rangle&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Numéricamente pode ser interpretado como a média do número de pares de partículas a uma distância entre &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;r+\Delta r&amp;lt;/math&amp;gt; pesado pelo volume/área desta região.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	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]&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde &amp;lt;math&amp;gt;V_t&amp;lt;/math&amp;gt; é o/a volume/área total e &amp;lt;math&amp;gt;rect&amp;lt;/math&amp;gt; é a função retangular.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Em resumo, o &amp;lt;math&amp;gt;g(r,\Delta r)&amp;lt;/math&amp;gt; é a média dos [[Histogramas_e_Densidade_de_Probabilidade|histogramas]] do número de partículas em um ''bin''  de largura &amp;lt;math&amp;gt;\Delta r&amp;lt;/math&amp;gt; a uma &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; feitos para cada partícula no sistema pesado pelo volume/área deste ''bin''.&lt;br /&gt;
&lt;br /&gt;
==== Construção do Código ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Resultados ====&lt;br /&gt;
&lt;br /&gt;
[[Image:GR-D.png|400px|Resultado do cálculo de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
=Referências=&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Psi 6 (&amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;)=&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;caixa&amp;quot; em que as partículas estão localizadas e então localizar possíveis &amp;quot;defeitos&amp;quot; no padrão hexagonal.&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\frac{\pi}{3}&amp;lt;/math&amp;gt;. Buscando uma relação em que esta situação seja a situação de &amp;lt;math&amp;gt;\psi_6 = 1&amp;lt;/math&amp;gt;, é possível definir que o &amp;lt;math&amp;gt;\psi_6 &amp;lt;/math&amp;gt; vale:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\psi_6=\frac{1}{6}\sum_i^ncos(6\theta_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\theta=\frac{\pi}{3}&amp;lt;/math&amp;gt; resulte em um valor de &amp;lt;math&amp;gt;\psi_6=1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Implementação Computacional ==&lt;br /&gt;
[[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;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Encontrando vizinhos ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
O método aqui citado é pouco otimizado, pois utiliza-se um for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;, 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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; baseando-se em outro valor já calculado, a medida do g(r), desta forma o valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; resultará em um valor razoável ( &amp;gt;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.&lt;br /&gt;
&lt;br /&gt;
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: &amp;quot;neighborsX&amp;quot; (que guarda a posição X do vizinho), &amp;quot;neighborsY&amp;quot;(que guarda a posição Y do vizinho) e &amp;quot;dNeighbors&amp;quot;(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 &amp;quot;k&amp;quot; que guarda quantos vizinhos cada partícula tem] e então faz-se o for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; buscando-se as distância menores que o raio de corte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(i=0;i&amp;lt;NP;i++){&lt;br /&gt;
                k=0;&lt;br /&gt;
                xOrg=xx[i];&lt;br /&gt;
		yOrg=yy[i];&lt;br /&gt;
		for(j=0;j&amp;lt;NP;j++){&lt;br /&gt;
			x2=xx[j];&lt;br /&gt;
			y2=yy[j];&lt;br /&gt;
			if(i!=j){&lt;br /&gt;
                                deltaX=fabs(x2-x1);&lt;br /&gt;
                        	deltaY=fabs(y2-y1);&lt;br /&gt;
                                //Condições de contorno&lt;br /&gt;
                                deltaX=deltaX-rint(deltaX/Lx)*Lx;&lt;br /&gt;
                                deltaY=deltaY-rint(deltaY/Ly)*Ly;&lt;br /&gt;
                                // --- //&lt;br /&gt;
                                d=sqrt((deltaX*deltaX)+(deltaY*deltaY));&lt;br /&gt;
				if(d&amp;lt;radiusLimit)&lt;br /&gt;
				{	&lt;br /&gt;
					neighborsX[k]=x2;&lt;br /&gt;
					neighborsY[k]=y2;&lt;br /&gt;
					dNeighbors[k]=d;&lt;br /&gt;
					k+=1;&lt;br /&gt;
				}&lt;br /&gt;
			}		&lt;br /&gt;
                 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Portanto após esse algoritmo, temos guardadas as posições das partículas mais próximas. É importante ressaltar que o &amp;quot;for&amp;quot; em partícula-teste ainda não foi fechado, e ainda dentro deste mesmo loop serão calculados os valores de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Calculando o Psi 6 ===&lt;br /&gt;
&lt;br /&gt;
Tendo os valores de X e Y dos vizinhos da partícula-teste, podemos proceder para o cálculo do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;. 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 &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt; e será dado pela seguinte relação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\phi_i=arctg\left(\frac{\Delta Y}{\Delta X}\right)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na implementação em código fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(j=0;j&amp;lt;k;j++){&lt;br /&gt;
		delX=neighborsX[j]-xx[i];&lt;br /&gt;
		delY=neighborsY[j]-yy[i];&lt;br /&gt;
&lt;br /&gt;
                //Condições de contorno periódicas&lt;br /&gt;
		delX=delX-rint(delX/Lx)*Lx; &lt;br /&gt;
        	delY=delY-rint(delY/Ly)*Ly;&lt;br /&gt;
                // --- //&lt;br /&gt;
&lt;br /&gt;
		angle[j]=atan2(delY,delX);&lt;br /&gt;
		if (angle[j]&amp;lt;0)&lt;br /&gt;
			angle[j]=2*PI+angle[j];&lt;br /&gt;
                psix[i]=0;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora somente precisa-se realizar um algoritmo que ordene o vetor &amp;quot;angle&amp;quot; do menor para o maior ângulo, utilizando algoritmos de ordenamento (bubblesort, quicksort, etc) desta forma é possível calcular os &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Feito o ordenamento do vetor, basta calcular a média do valor do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; de cada vizinho. Para isto, precisamos calcular os valores de &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt; em função dos &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt;, basta realizar a subtração do próximo vizinho no vetor pelo valor do ângulo do vizinho atual, dessa forma: &amp;lt;math&amp;gt; \theta_i = \psi_{i+1} - \psi_i &amp;lt;/math&amp;gt; com exceção do último vizinho, que será o ângulo dele menos o do primeiro, desta forma a implementação fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		firstAngle=angle[0];	&lt;br /&gt;
		for(j=0;j&amp;lt;k-1;j++){ &lt;br /&gt;
			angle[j]=cos(6.*(angle[j+1]-angle[j]));&lt;br /&gt;
		}		&lt;br /&gt;
		angle[k-1]=cos(6.*(firstAngle+2*PI-angle[k-1]));&lt;br /&gt;
		for(j=0;j&amp;lt;k;j++){ &lt;br /&gt;
			psix[i]+=angle[j]/6.;&lt;br /&gt;
		}	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E então está calculado o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, para facilitar a implementação é recomendado que este algoritmo seja uma função dentro de seu código e desta forma retorne o vetor &amp;quot;psix&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Exemplos ===&lt;br /&gt;
Para o caso de um potencial de Lennard-Jones, é possível observar resultados de mapas de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, isto é, um mapa que mostra para cada partícula o seu valor da medida, da seguinte forma para cada valor de rho:&lt;br /&gt;
[[Image:Psix_1.png|thumb|400px|right|Resultados do valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; (em cores) para o caso de um potencial de Lennard Jones para &amp;lt;math&amp;gt; \rho=1.000 &amp;lt;/math&amp;gt;]]&lt;br /&gt;
[[Image:Psix_0360.png|thumb|400px|left|Resultados do valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; (em cores) para o caso de um potencial de Lennard Jones para &amp;lt;math&amp;gt; \rho=0.360 &amp;lt;/math&amp;gt;.]]&lt;br /&gt;
[[Image:Psix_0640.png|thumb|400px|center|Resultados do valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; (em cores) para o caso de um potencial de Lennard Jones para &amp;lt;math&amp;gt; \rho=0.640 &amp;lt;/math&amp;gt;]]&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
== Aplicações em outras áreas ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Celulasdegrade.png|thumb|300px|right|Mapa neural de células de grade em que o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; equivale 0,99.]]&lt;br /&gt;
&lt;br /&gt;
No estudo de como animais processam a sua posição em seu cerébro, são observadas as chamadas &amp;quot;Células de grade&amp;quot;, 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 &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; para determinar a &amp;quot;hexagonalidade&amp;quot; dos disparos, podendo-se realizar estudos da influência desse formato na interpretação geoespacial do animal.&lt;/div&gt;</summary>
		<author><name>Rmoreira</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=681</id>
		<title>Medidas estáticas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=681"/>
		<updated>2016-08-01T21:13:30Z</updated>

		<summary type="html">&lt;p&gt;Rmoreira: /* Encontrando vizinhos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em dinâmica molecular, medidas estáticas são medidas realizadas em um passo específico de tempo da simulação.&lt;br /&gt;
&lt;br /&gt;
=Pair Distribution Function=&lt;br /&gt;
&lt;br /&gt;
[[Image:Gr.png|thumb|300px|right|Representação do cálculo numérico de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
A ''Pair Distribution Function'' , ou &amp;quot;&amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;&amp;quot;, é uma função que estima o quão provável é encontrar duas partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; dentro de um sistema de várias partículas.&lt;br /&gt;
&lt;br /&gt;
Em um sistema de &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas, o &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt; é definido como a média do número de partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
	g(r)=\frac{V}{N^2}\langle\sum_{i=1}^N\sum_{j\neq i}^N\delta(r-|r_i-r_j|)  \rangle&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Numéricamente pode ser interpretado como a média do número de pares de partículas a uma distância entre &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;r+\Delta r&amp;lt;/math&amp;gt; pesado pelo volume/área desta região.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	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]&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde &amp;lt;math&amp;gt;V_t&amp;lt;/math&amp;gt; é o/a volume/área total e &amp;lt;math&amp;gt;rect&amp;lt;/math&amp;gt; é a função retangular.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Em resumo, o &amp;lt;math&amp;gt;g(r,\Delta r)&amp;lt;/math&amp;gt; é a média dos [[Histogramas_e_Densidade_de_Probabilidade|histogramas]] do número de partículas em um ''bin''  de largura &amp;lt;math&amp;gt;\Delta r&amp;lt;/math&amp;gt; a uma &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; feitos para cada partícula no sistema pesado pelo volume/área deste ''bin''.&lt;br /&gt;
&lt;br /&gt;
==== Construção do Código ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Resultados ====&lt;br /&gt;
&lt;br /&gt;
[[Image:GR-D.png|400px|Resultado do cálculo de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
=Referências=&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Psi 6 (&amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;)=&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;caixa&amp;quot; em que as partículas estão localizadas e então localizar possíveis &amp;quot;defeitos&amp;quot; no padrão hexagonal.&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\frac{\pi}{3}&amp;lt;/math&amp;gt;. Buscando uma relação em que esta situação seja a situação de &amp;lt;math&amp;gt;\psi_6 = 1&amp;lt;/math&amp;gt;, é possível definir que o &amp;lt;math&amp;gt;\psi_6 &amp;lt;/math&amp;gt; vale:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\psi_6=\frac{1}{6}\sum_i^ncos(6\theta_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\theta=\frac{\pi}{3}&amp;lt;/math&amp;gt; resulte em um valor de &amp;lt;math&amp;gt;\psi_6=1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Implementação Computacional ==&lt;br /&gt;
[[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;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Encontrando vizinhos ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
O método aqui citado é pouco otimizado, pois utiliza-se um for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;, 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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; baseando-se em outro valor já calculado, a medida do g(r), desta forma o valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; resultará em um valor razoável ( &amp;gt;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.&lt;br /&gt;
&lt;br /&gt;
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: &amp;quot;neighborsX&amp;quot; (que guarda a posição X do vizinho), &amp;quot;neighborsY&amp;quot;(que guarda a posição Y do vizinho) e &amp;quot;dNeighbors&amp;quot;(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 &amp;quot;k&amp;quot; que guarda quantos vizinhos cada partícula tem] e então faz-se o for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; buscando-se as distância menores que o raio de corte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(i=0;i&amp;lt;NP;i++){&lt;br /&gt;
                k=0;&lt;br /&gt;
                xOrg=xx[i];&lt;br /&gt;
		yOrg=yy[i];&lt;br /&gt;
		for(j=0;j&amp;lt;NP;j++){&lt;br /&gt;
			x2=xx[j];&lt;br /&gt;
			y2=yy[j];&lt;br /&gt;
			if(i!=j){&lt;br /&gt;
				if(distance(xOrg,yOrg,x2,y2)&amp;lt;radiusLimit)&lt;br /&gt;
				{	&lt;br /&gt;
					neighborsX[k]=x2;&lt;br /&gt;
					neighborsY[k]=y2;&lt;br /&gt;
					dNeighbors[k]=distance(x2,y2,xOrg,yOrg);&lt;br /&gt;
					k+=1;&lt;br /&gt;
				}&lt;br /&gt;
			}		&lt;br /&gt;
                 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Portanto após esse algoritmo, temos guardadas as posições das partículas mais próximas. É importante ressaltar que o &amp;quot;for&amp;quot; em partícula-teste ainda não foi fechado, e ainda dentro deste mesmo loop serão calculados os valores de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Calculando o Psi 6 ===&lt;br /&gt;
&lt;br /&gt;
Tendo os valores de X e Y dos vizinhos da partícula-teste, podemos proceder para o cálculo do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;. 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 &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt; e será dado pela seguinte relação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\phi_i=arctg\left(\frac{\Delta Y}{\Delta X}\right)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na implementação em código fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(j=0;j&amp;lt;k;j++){&lt;br /&gt;
		delX=neighborsX[j]-xx[i];&lt;br /&gt;
		delY=neighborsY[j]-yy[i];&lt;br /&gt;
&lt;br /&gt;
                //Condições de contorno periódicas&lt;br /&gt;
		delX=delX-rint(delX/Lx)*Lx; &lt;br /&gt;
        	delY=delY-rint(delY/Ly)*Ly;&lt;br /&gt;
                // --- //&lt;br /&gt;
&lt;br /&gt;
		angle[j]=atan2(delY,delX);&lt;br /&gt;
		if (angle[j]&amp;lt;0)&lt;br /&gt;
			angle[j]=2*PI+angle[j];&lt;br /&gt;
                psix[i]=0;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora somente precisa-se realizar um algoritmo que ordene o vetor &amp;quot;angle&amp;quot; do menor para o maior ângulo, utilizando algoritmos de ordenamento (bubblesort, quicksort, etc) desta forma é possível calcular os &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Feito o ordenamento do vetor, basta calcular a média do valor do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; de cada vizinho. Para isto, precisamos calcular os valores de &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt; em função dos &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt;, basta realizar a subtração do próximo vizinho no vetor pelo valor do ângulo do vizinho atual, dessa forma: &amp;lt;math&amp;gt; \theta_i = \psi_{i+1} - \psi_i &amp;lt;/math&amp;gt; com exceção do último vizinho, que será o ângulo dele menos o do primeiro, desta forma a implementação fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		firstAngle=angle[0];	&lt;br /&gt;
		for(j=0;j&amp;lt;k-1;j++){ &lt;br /&gt;
			angle[j]=cos(6.*(angle[j+1]-angle[j]));&lt;br /&gt;
		}		&lt;br /&gt;
		angle[k-1]=cos(6.*(firstAngle+2*PI-angle[k-1]));&lt;br /&gt;
		for(j=0;j&amp;lt;k;j++){ &lt;br /&gt;
			psix[i]+=angle[j]/6.;&lt;br /&gt;
		}	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E então está calculado o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, para facilitar a implementação é recomendado que este algoritmo seja uma função dentro de seu código e desta forma retorne o vetor &amp;quot;psix&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Exemplos ===&lt;br /&gt;
Para o caso de um potencial de Lennard-Jones, é possível observar resultados de mapas de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, isto é, um mapa que mostra para cada partícula o seu valor da medida, da seguinte forma para cada valor de rho:&lt;br /&gt;
[[Image:Psix_1.png|thumb|400px|right|Resultados do valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; (em cores) para o caso de um potencial de Lennard Jones para &amp;lt;math&amp;gt; \rho=1.000 &amp;lt;/math&amp;gt;]]&lt;br /&gt;
[[Image:Psix_0360.png|thumb|400px|left|Resultados do valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; (em cores) para o caso de um potencial de Lennard Jones para &amp;lt;math&amp;gt; \rho=0.360 &amp;lt;/math&amp;gt;.]]&lt;br /&gt;
[[Image:Psix_0640.png|thumb|400px|center|Resultados do valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; (em cores) para o caso de um potencial de Lennard Jones para &amp;lt;math&amp;gt; \rho=0.640 &amp;lt;/math&amp;gt;]]&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
== Aplicações em outras áreas ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Celulasdegrade.png|thumb|300px|right|Mapa neural de células de grade em que o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; equivale 0,99.]]&lt;br /&gt;
&lt;br /&gt;
No estudo de como animais processam a sua posição em seu cerébro, são observadas as chamadas &amp;quot;Células de grade&amp;quot;, 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 &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; para determinar a &amp;quot;hexagonalidade&amp;quot; dos disparos, podendo-se realizar estudos da influência desse formato na interpretação geoespacial do animal.&lt;/div&gt;</summary>
		<author><name>Rmoreira</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=680</id>
		<title>Medidas estáticas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=680"/>
		<updated>2016-08-01T19:12:26Z</updated>

		<summary type="html">&lt;p&gt;Rmoreira: /* Aplicações em outras áreas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em dinâmica molecular, medidas estáticas são medidas realizadas em um passo específico de tempo da simulação.&lt;br /&gt;
&lt;br /&gt;
=Pair Distribution Function=&lt;br /&gt;
&lt;br /&gt;
[[Image:Gr.png|thumb|300px|right|Representação do cálculo numérico de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
A ''Pair Distribution Function'' , ou &amp;quot;&amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;&amp;quot;, é uma função que estima o quão provável é encontrar duas partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; dentro de um sistema de várias partículas.&lt;br /&gt;
&lt;br /&gt;
Em um sistema de &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas, o &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt; é definido como a média do número de partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
	g(r)=\frac{V}{N^2}\langle\sum_{i=1}^N\sum_{j\neq i}^N\delta(r-|r_i-r_j|)  \rangle&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Numéricamente pode ser interpretado como a média do número de pares de partículas a uma distância entre &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;r+\Delta r&amp;lt;/math&amp;gt; pesado pelo volume/área desta região.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	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]&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde &amp;lt;math&amp;gt;V_t&amp;lt;/math&amp;gt; é o/a volume/área total e &amp;lt;math&amp;gt;rect&amp;lt;/math&amp;gt; é a função retangular.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Em resumo, o &amp;lt;math&amp;gt;g(r,\Delta r)&amp;lt;/math&amp;gt; é a média dos [[Histogramas_e_Densidade_de_Probabilidade|histogramas]] do número de partículas em um ''bin''  de largura &amp;lt;math&amp;gt;\Delta r&amp;lt;/math&amp;gt; a uma &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; feitos para cada partícula no sistema pesado pelo volume/área deste ''bin''.&lt;br /&gt;
&lt;br /&gt;
==== Construção do Código ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Resultados ====&lt;br /&gt;
&lt;br /&gt;
[[Image:GR-D.png|400px|Resultado do cálculo de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
=Referências=&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Psi 6 (&amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;)=&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;caixa&amp;quot; em que as partículas estão localizadas e então localizar possíveis &amp;quot;defeitos&amp;quot; no padrão hexagonal.&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\frac{\pi}{3}&amp;lt;/math&amp;gt;. Buscando uma relação em que esta situação seja a situação de &amp;lt;math&amp;gt;\psi_6 = 1&amp;lt;/math&amp;gt;, é possível definir que o &amp;lt;math&amp;gt;\psi_6 &amp;lt;/math&amp;gt; vale:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\psi_6=\frac{1}{6}\sum_i^ncos(6\theta_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\theta=\frac{\pi}{3}&amp;lt;/math&amp;gt; resulte em um valor de &amp;lt;math&amp;gt;\psi_6=1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Implementação Computacional ==&lt;br /&gt;
[[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;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Encontrando vizinhos ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
O método aqui citado é pouco otimizado, pois utiliza-se um for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;, 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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; baseando-se em outro valor já calculado, a medida do g(r), desta forma o valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; resultará em um valor razoável ( &amp;gt;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.&lt;br /&gt;
&lt;br /&gt;
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: &amp;quot;neighborsX&amp;quot; (que guarda a posição X do vizinho), &amp;quot;neighborsY&amp;quot;(que guarda a posição Y do vizinho) e &amp;quot;dNeighbors&amp;quot;(que guarda a distância do vizinho) e então faz-se o for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; buscando-se as distância menores que o raio de corte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(i=0;i&amp;lt;NP;i++){&lt;br /&gt;
                k=0;&lt;br /&gt;
                xOrg=xx[i];&lt;br /&gt;
		yOrg=yy[i];&lt;br /&gt;
		for(j=0;j&amp;lt;NP;j++){&lt;br /&gt;
			x2=xx[j];&lt;br /&gt;
			y2=yy[j];&lt;br /&gt;
			if(i!=j){&lt;br /&gt;
				if(distance(xOrg,yOrg,x2,y2)&amp;lt;radiusLimit)&lt;br /&gt;
				{	&lt;br /&gt;
					neighborsX[k]=x2;&lt;br /&gt;
					neighborsY[k]=y2;&lt;br /&gt;
					dNeighbors[k]=distance(x2,y2,xOrg,yOrg);&lt;br /&gt;
					k+=1;&lt;br /&gt;
				}&lt;br /&gt;
			}		&lt;br /&gt;
                 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Portanto após esse algoritmo, temos guardadas as posições das partículas mais próximas. É importante ressaltar que o &amp;quot;for&amp;quot; em partícula-teste ainda não foi fechado, e ainda dentro deste mesmo loop serão calculados os valores de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Calculando o Psi 6 ===&lt;br /&gt;
&lt;br /&gt;
Tendo os valores de X e Y dos vizinhos da partícula-teste, podemos proceder para o cálculo do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;. 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 &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt; e será dado pela seguinte relação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\phi_i=arctg\left(\frac{\Delta Y}{\Delta X}\right)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na implementação em código fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(j=0;j&amp;lt;k;j++){&lt;br /&gt;
		delX=neighborsX[j]-xx[i];&lt;br /&gt;
		delY=neighborsY[j]-yy[i];&lt;br /&gt;
&lt;br /&gt;
                //Condições de contorno periódicas&lt;br /&gt;
		delX=delX-rint(delX/Lx)*Lx; &lt;br /&gt;
        	delY=delY-rint(delY/Ly)*Ly;&lt;br /&gt;
                // --- //&lt;br /&gt;
&lt;br /&gt;
		angle[j]=atan2(delY,delX);&lt;br /&gt;
		if (angle[j]&amp;lt;0)&lt;br /&gt;
			angle[j]=2*PI+angle[j];&lt;br /&gt;
                psix[i]=0;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora somente precisa-se realizar um algoritmo que ordene o vetor &amp;quot;angle&amp;quot; do menor para o maior ângulo, utilizando algoritmos de ordenamento (bubblesort, quicksort, etc) desta forma é possível calcular os &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Feito o ordenamento do vetor, basta calcular a média do valor do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; de cada vizinho. Para isto, precisamos calcular os valores de &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt; em função dos &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt;, basta realizar a subtração do próximo vizinho no vetor pelo valor do ângulo do vizinho atual, dessa forma: &amp;lt;math&amp;gt; \theta_i = \psi_{i+1} - \psi_i &amp;lt;/math&amp;gt; com exceção do último vizinho, que será o ângulo dele menos o do primeiro, desta forma a implementação fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		firstAngle=angle[0];	&lt;br /&gt;
		for(j=0;j&amp;lt;k-1;j++){ &lt;br /&gt;
			angle[j]=cos(6.*(angle[j+1]-angle[j]));&lt;br /&gt;
		}		&lt;br /&gt;
		angle[k-1]=cos(6.*(firstAngle+2*PI-angle[k-1]));&lt;br /&gt;
		for(j=0;j&amp;lt;k;j++){ &lt;br /&gt;
			psix[i]+=angle[j]/6.;&lt;br /&gt;
		}	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E então está calculado o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, para facilitar a implementação é recomendado que este algoritmo seja uma função dentro de seu código e desta forma retorne o vetor &amp;quot;psix&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Exemplos ===&lt;br /&gt;
Para o caso de um potencial de Lennard-Jones, é possível observar resultados de mapas de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, isto é, um mapa que mostra para cada partícula o seu valor da medida, da seguinte forma para cada valor de rho:&lt;br /&gt;
[[Image:Psix_1.png|thumb|400px|right|Resultados do valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; (em cores) para o caso de um potencial de Lennard Jones para &amp;lt;math&amp;gt; \rho=1.000 &amp;lt;/math&amp;gt;]]&lt;br /&gt;
[[Image:Psix_0360.png|thumb|400px|left|Resultados do valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; (em cores) para o caso de um potencial de Lennard Jones para &amp;lt;math&amp;gt; \rho=0.360 &amp;lt;/math&amp;gt;.]]&lt;br /&gt;
[[Image:Psix_0640.png|thumb|400px|center|Resultados do valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; (em cores) para o caso de um potencial de Lennard Jones para &amp;lt;math&amp;gt; \rho=0.640 &amp;lt;/math&amp;gt;]]&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
== Aplicações em outras áreas ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Celulasdegrade.png|thumb|300px|right|Mapa neural de células de grade em que o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; equivale 0,99.]]&lt;br /&gt;
&lt;br /&gt;
No estudo de como animais processam a sua posição em seu cerébro, são observadas as chamadas &amp;quot;Células de grade&amp;quot;, 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 &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; para determinar a &amp;quot;hexagonalidade&amp;quot; dos disparos, podendo-se realizar estudos da influência desse formato na interpretação geoespacial do animal.&lt;/div&gt;</summary>
		<author><name>Rmoreira</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=679</id>
		<title>Medidas estáticas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=679"/>
		<updated>2016-08-01T18:51:07Z</updated>

		<summary type="html">&lt;p&gt;Rmoreira: /* Psi 6 ( \psi_6 ) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em dinâmica molecular, medidas estáticas são medidas realizadas em um passo específico de tempo da simulação.&lt;br /&gt;
&lt;br /&gt;
=Pair Distribution Function=&lt;br /&gt;
&lt;br /&gt;
[[Image:Gr.png|thumb|300px|right|Representação do cálculo numérico de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
A ''Pair Distribution Function'' , ou &amp;quot;&amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;&amp;quot;, é uma função que estima o quão provável é encontrar duas partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; dentro de um sistema de várias partículas.&lt;br /&gt;
&lt;br /&gt;
Em um sistema de &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas, o &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt; é definido como a média do número de partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
	g(r)=\frac{V}{N^2}\langle\sum_{i=1}^N\sum_{j\neq i}^N\delta(r-|r_i-r_j|)  \rangle&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Numéricamente pode ser interpretado como a média do número de pares de partículas a uma distância entre &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;r+\Delta r&amp;lt;/math&amp;gt; pesado pelo volume/área desta região.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	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]&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde &amp;lt;math&amp;gt;V_t&amp;lt;/math&amp;gt; é o/a volume/área total e &amp;lt;math&amp;gt;rect&amp;lt;/math&amp;gt; é a função retangular.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Em resumo, o &amp;lt;math&amp;gt;g(r,\Delta r)&amp;lt;/math&amp;gt; é a média dos [[Histogramas_e_Densidade_de_Probabilidade|histogramas]] do número de partículas em um ''bin''  de largura &amp;lt;math&amp;gt;\Delta r&amp;lt;/math&amp;gt; a uma &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; feitos para cada partícula no sistema pesado pelo volume/área deste ''bin''.&lt;br /&gt;
&lt;br /&gt;
==== Construção do Código ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Resultados ====&lt;br /&gt;
&lt;br /&gt;
[[Image:GR-D.png|400px|Resultado do cálculo de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
=Referências=&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Psi 6 (&amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;)=&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;caixa&amp;quot; em que as partículas estão localizadas e então localizar possíveis &amp;quot;defeitos&amp;quot; no padrão hexagonal.&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\frac{\pi}{3}&amp;lt;/math&amp;gt;. Buscando uma relação em que esta situação seja a situação de &amp;lt;math&amp;gt;\psi_6 = 1&amp;lt;/math&amp;gt;, é possível definir que o &amp;lt;math&amp;gt;\psi_6 &amp;lt;/math&amp;gt; vale:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\psi_6=\frac{1}{6}\sum_i^ncos(6\theta_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\theta=\frac{\pi}{3}&amp;lt;/math&amp;gt; resulte em um valor de &amp;lt;math&amp;gt;\psi_6=1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Implementação Computacional ==&lt;br /&gt;
[[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;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Encontrando vizinhos ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
O método aqui citado é pouco otimizado, pois utiliza-se um for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;, 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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; baseando-se em outro valor já calculado, a medida do g(r), desta forma o valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; resultará em um valor razoável ( &amp;gt;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.&lt;br /&gt;
&lt;br /&gt;
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: &amp;quot;neighborsX&amp;quot; (que guarda a posição X do vizinho), &amp;quot;neighborsY&amp;quot;(que guarda a posição Y do vizinho) e &amp;quot;dNeighbors&amp;quot;(que guarda a distância do vizinho) e então faz-se o for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; buscando-se as distância menores que o raio de corte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(i=0;i&amp;lt;NP;i++){&lt;br /&gt;
                k=0;&lt;br /&gt;
                xOrg=xx[i];&lt;br /&gt;
		yOrg=yy[i];&lt;br /&gt;
		for(j=0;j&amp;lt;NP;j++){&lt;br /&gt;
			x2=xx[j];&lt;br /&gt;
			y2=yy[j];&lt;br /&gt;
			if(i!=j){&lt;br /&gt;
				if(distance(xOrg,yOrg,x2,y2)&amp;lt;radiusLimit)&lt;br /&gt;
				{	&lt;br /&gt;
					neighborsX[k]=x2;&lt;br /&gt;
					neighborsY[k]=y2;&lt;br /&gt;
					dNeighbors[k]=distance(x2,y2,xOrg,yOrg);&lt;br /&gt;
					k+=1;&lt;br /&gt;
				}&lt;br /&gt;
			}		&lt;br /&gt;
                 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Portanto após esse algoritmo, temos guardadas as posições das partículas mais próximas. É importante ressaltar que o &amp;quot;for&amp;quot; em partícula-teste ainda não foi fechado, e ainda dentro deste mesmo loop serão calculados os valores de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Calculando o Psi 6 ===&lt;br /&gt;
&lt;br /&gt;
Tendo os valores de X e Y dos vizinhos da partícula-teste, podemos proceder para o cálculo do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;. 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 &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt; e será dado pela seguinte relação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\phi_i=arctg\left(\frac{\Delta Y}{\Delta X}\right)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na implementação em código fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(j=0;j&amp;lt;k;j++){&lt;br /&gt;
		delX=neighborsX[j]-xx[i];&lt;br /&gt;
		delY=neighborsY[j]-yy[i];&lt;br /&gt;
&lt;br /&gt;
                //Condições de contorno periódicas&lt;br /&gt;
		delX=delX-rint(delX/Lx)*Lx; &lt;br /&gt;
        	delY=delY-rint(delY/Ly)*Ly;&lt;br /&gt;
                // --- //&lt;br /&gt;
&lt;br /&gt;
		angle[j]=atan2(delY,delX);&lt;br /&gt;
		if (angle[j]&amp;lt;0)&lt;br /&gt;
			angle[j]=2*PI+angle[j];&lt;br /&gt;
                psix[i]=0;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora somente precisa-se realizar um algoritmo que ordene o vetor &amp;quot;angle&amp;quot; do menor para o maior ângulo, utilizando algoritmos de ordenamento (bubblesort, quicksort, etc) desta forma é possível calcular os &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Feito o ordenamento do vetor, basta calcular a média do valor do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; de cada vizinho. Para isto, precisamos calcular os valores de &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt; em função dos &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt;, basta realizar a subtração do próximo vizinho no vetor pelo valor do ângulo do vizinho atual, dessa forma: &amp;lt;math&amp;gt; \theta_i = \psi_{i+1} - \psi_i &amp;lt;/math&amp;gt; com exceção do último vizinho, que será o ângulo dele menos o do primeiro, desta forma a implementação fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		firstAngle=angle[0];	&lt;br /&gt;
		for(j=0;j&amp;lt;k-1;j++){ &lt;br /&gt;
			angle[j]=cos(6.*(angle[j+1]-angle[j]));&lt;br /&gt;
		}		&lt;br /&gt;
		angle[k-1]=cos(6.*(firstAngle+2*PI-angle[k-1]));&lt;br /&gt;
		for(j=0;j&amp;lt;k;j++){ &lt;br /&gt;
			psix[i]+=angle[j]/6.;&lt;br /&gt;
		}	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E então está calculado o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, para facilitar a implementação é recomendado que este algoritmo seja uma função dentro de seu código e desta forma retorne o vetor &amp;quot;psix&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Exemplos ===&lt;br /&gt;
Para o caso de um potencial de Lennard-Jones, é possível observar resultados de mapas de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, isto é, um mapa que mostra para cada partícula o seu valor da medida, da seguinte forma para cada valor de rho:&lt;br /&gt;
[[Image:Psix_1.png|thumb|400px|right|Resultados do valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; (em cores) para o caso de um potencial de Lennard Jones para &amp;lt;math&amp;gt; \rho=1.000 &amp;lt;/math&amp;gt;]]&lt;br /&gt;
[[Image:Psix_0360.png|thumb|400px|left|Resultados do valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; (em cores) para o caso de um potencial de Lennard Jones para &amp;lt;math&amp;gt; \rho=0.360 &amp;lt;/math&amp;gt;.]]&lt;br /&gt;
[[Image:Psix_0640.png|thumb|400px|center|Resultados do valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; (em cores) para o caso de um potencial de Lennard Jones para &amp;lt;math&amp;gt; \rho=0.640 &amp;lt;/math&amp;gt;]]&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
== Aplicações em outras áreas ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Celulasdegrade.png|thumb|300px|right|Mapa neural de células de grade em que o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; equivale 0,99.]]&lt;br /&gt;
&lt;br /&gt;
No estudo do processamento da posição de um animal no cérebro de rato, são observados padrões hexagonais produzidos pelas chamadas &amp;quot;Células de grade&amp;quot;, 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 &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; para determinar a &amp;quot;hexagonalidade&amp;quot; dos disparos, podendo-se realizar estudos da influência desse formato na interpretação geoespacial do animal.&lt;/div&gt;</summary>
		<author><name>Rmoreira</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=678</id>
		<title>Medidas estáticas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=678"/>
		<updated>2016-08-01T18:50:24Z</updated>

		<summary type="html">&lt;p&gt;Rmoreira: /* Exemplos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em dinâmica molecular, medidas estáticas são medidas realizadas em um passo específico de tempo da simulação.&lt;br /&gt;
&lt;br /&gt;
=Pair Distribution Function=&lt;br /&gt;
&lt;br /&gt;
[[Image:Gr.png|thumb|300px|right|Representação do cálculo numérico de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
A ''Pair Distribution Function'' , ou &amp;quot;&amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;&amp;quot;, é uma função que estima o quão provável é encontrar duas partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; dentro de um sistema de várias partículas.&lt;br /&gt;
&lt;br /&gt;
Em um sistema de &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas, o &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt; é definido como a média do número de partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
	g(r)=\frac{V}{N^2}\langle\sum_{i=1}^N\sum_{j\neq i}^N\delta(r-|r_i-r_j|)  \rangle&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Numéricamente pode ser interpretado como a média do número de pares de partículas a uma distância entre &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;r+\Delta r&amp;lt;/math&amp;gt; pesado pelo volume/área desta região.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	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]&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde &amp;lt;math&amp;gt;V_t&amp;lt;/math&amp;gt; é o/a volume/área total e &amp;lt;math&amp;gt;rect&amp;lt;/math&amp;gt; é a função retangular.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Em resumo, o &amp;lt;math&amp;gt;g(r,\Delta r)&amp;lt;/math&amp;gt; é a média dos [[Histogramas_e_Densidade_de_Probabilidade|histogramas]] do número de partículas em um ''bin''  de largura &amp;lt;math&amp;gt;\Delta r&amp;lt;/math&amp;gt; a uma &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; feitos para cada partícula no sistema pesado pelo volume/área deste ''bin''.&lt;br /&gt;
&lt;br /&gt;
==== Construção do Código ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Resultados ====&lt;br /&gt;
&lt;br /&gt;
[[Image:GR-D.png|400px|Resultado do cálculo de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
=Referências=&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Psi 6 (&amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;)=&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;caixa&amp;quot; em que as partículas estão localizadas e então localizar possíveis &amp;quot;defeitos&amp;quot; no padrão hexagonal.&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\frac{\pi}{3}&amp;lt;/math&amp;gt;. Buscando uma relação em que esta situação seja a situação de &amp;lt;math&amp;gt;\psi_6 = 1&amp;lt;/math&amp;gt;, é possível definir que o &amp;lt;math&amp;gt;\psi_6 &amp;lt;/math&amp;gt; vale:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\psi_6=\frac{1}{6}\sum_i^ncos(6\theta_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\theta=\frac{\pi}{3}&amp;lt;/math&amp;gt; resulte em um valor de &amp;lt;math&amp;gt;\psi_6=1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Implementação Computacional ==&lt;br /&gt;
[[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;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Encontrando vizinhos ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
O método aqui citado é pouco otimizado, pois utiliza-se um for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;, 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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; baseando-se em outro valor já calculado, a medida do g(r), desta forma o valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; resultará em um valor razoável ( &amp;gt;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.&lt;br /&gt;
&lt;br /&gt;
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: &amp;quot;neighborsX&amp;quot; (que guarda a posição X do vizinho), &amp;quot;neighborsY&amp;quot;(que guarda a posição Y do vizinho) e &amp;quot;dNeighbors&amp;quot;(que guarda a distância do vizinho) e então faz-se o for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; buscando-se as distância menores que o raio de corte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(i=0;i&amp;lt;NP;i++){&lt;br /&gt;
                k=0;&lt;br /&gt;
                xOrg=xx[i];&lt;br /&gt;
		yOrg=yy[i];&lt;br /&gt;
		for(j=0;j&amp;lt;NP;j++){&lt;br /&gt;
			x2=xx[j];&lt;br /&gt;
			y2=yy[j];&lt;br /&gt;
			if(i!=j){&lt;br /&gt;
				if(distance(xOrg,yOrg,x2,y2)&amp;lt;radiusLimit)&lt;br /&gt;
				{	&lt;br /&gt;
					neighborsX[k]=x2;&lt;br /&gt;
					neighborsY[k]=y2;&lt;br /&gt;
					dNeighbors[k]=distance(x2,y2,xOrg,yOrg);&lt;br /&gt;
					k+=1;&lt;br /&gt;
				}&lt;br /&gt;
			}		&lt;br /&gt;
                 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Portanto após esse algoritmo, temos guardadas as posições das partículas mais próximas. É importante ressaltar que o &amp;quot;for&amp;quot; em partícula-teste ainda não foi fechado, e ainda dentro deste mesmo loop serão calculados os valores de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Calculando o Psi 6 ===&lt;br /&gt;
&lt;br /&gt;
Tendo os valores de X e Y dos vizinhos da partícula-teste, podemos proceder para o cálculo do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;. 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 &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt; e será dado pela seguinte relação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\phi_i=arctg\left(\frac{\Delta Y}{\Delta X}\right)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na implementação em código fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(j=0;j&amp;lt;k;j++){&lt;br /&gt;
		delX=neighborsX[j]-xx[i];&lt;br /&gt;
		delY=neighborsY[j]-yy[i];&lt;br /&gt;
&lt;br /&gt;
                //Condições de contorno periódicas&lt;br /&gt;
		delX=delX-rint(delX/Lx)*Lx; &lt;br /&gt;
        	delY=delY-rint(delY/Ly)*Ly;&lt;br /&gt;
                // --- //&lt;br /&gt;
&lt;br /&gt;
		angle[j]=atan2(delY,delX);&lt;br /&gt;
		if (angle[j]&amp;lt;0)&lt;br /&gt;
			angle[j]=2*PI+angle[j];&lt;br /&gt;
                psix[i]=0;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora somente precisa-se realizar um algoritmo que ordene o vetor &amp;quot;angle&amp;quot; do menor para o maior ângulo, utilizando algoritmos de ordenamento (bubblesort, quicksort, etc) desta forma é possível calcular os &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Feito o ordenamento do vetor, basta calcular a média do valor do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; de cada vizinho. Para isto, precisamos calcular os valores de &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt; em função dos &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt;, basta realizar a subtração do próximo vizinho no vetor pelo valor do ângulo do vizinho atual, dessa forma: &amp;lt;math&amp;gt; \theta_i = \psi_{i+1} - \psi_i &amp;lt;/math&amp;gt; com exceção do último vizinho, que será o ângulo dele menos o do primeiro, desta forma a implementação fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		firstAngle=angle[0];	&lt;br /&gt;
		for(j=0;j&amp;lt;k-1;j++){ &lt;br /&gt;
			angle[j]=cos(6.*(angle[j+1]-angle[j]));&lt;br /&gt;
		}		&lt;br /&gt;
		angle[k-1]=cos(6.*(firstAngle+2*PI-angle[k-1]));&lt;br /&gt;
		for(j=0;j&amp;lt;k;j++){ &lt;br /&gt;
			psix[i]+=angle[j]/6.;&lt;br /&gt;
		}	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E então está calculado o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, para facilitar a implementação é recomendado que este algoritmo seja uma função dentro de seu código e desta forma retorne o vetor &amp;quot;psix&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Exemplos ===&lt;br /&gt;
Para o caso de um potencial de Lennard-Jones, é possível observar resultados de mapas de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, isto é, um mapa que mostra para cada partícula o seu valor da medida, da seguinte forma para cada valor de rho:&lt;br /&gt;
[[Image:Psix_1.png|thumb|400px|right|Resultados do valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; (em cores) para o caso de um potencial de Lennard Jones para &amp;lt;math&amp;gt; \rho=1.000 &amp;lt;/math&amp;gt;]]&lt;br /&gt;
[[Image:Psix_0360.png|thumb|400px|left|Resultados do valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; (em cores) para o caso de um potencial de Lennard Jones para &amp;lt;math&amp;gt; \rho=0.360 &amp;lt;/math&amp;gt;.]]&lt;br /&gt;
[[Image:Psix_0640.png|thumb|400px|center|Resultados do valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; (em cores) para o caso de um potencial de Lennard Jones para &amp;lt;math&amp;gt; \rho=0.640 &amp;lt;/math&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
== Aplicações em outras áreas ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Celulasdegrade.png|thumb|300px|right|Mapa neural de células de grade em que o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; equivale 0,99.]]&lt;br /&gt;
&lt;br /&gt;
No estudo do processamento da posição de um animal no cérebro de rato, são observados padrões hexagonais produzidos pelas chamadas &amp;quot;Células de grade&amp;quot;, 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 &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; para determinar a &amp;quot;hexagonalidade&amp;quot; dos disparos, podendo-se realizar estudos da influência desse formato na interpretação geoespacial do animal.&lt;/div&gt;</summary>
		<author><name>Rmoreira</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=677</id>
		<title>Medidas estáticas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=677"/>
		<updated>2016-08-01T18:50:01Z</updated>

		<summary type="html">&lt;p&gt;Rmoreira: /* Exemplos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em dinâmica molecular, medidas estáticas são medidas realizadas em um passo específico de tempo da simulação.&lt;br /&gt;
&lt;br /&gt;
=Pair Distribution Function=&lt;br /&gt;
&lt;br /&gt;
[[Image:Gr.png|thumb|300px|right|Representação do cálculo numérico de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
A ''Pair Distribution Function'' , ou &amp;quot;&amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;&amp;quot;, é uma função que estima o quão provável é encontrar duas partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; dentro de um sistema de várias partículas.&lt;br /&gt;
&lt;br /&gt;
Em um sistema de &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas, o &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt; é definido como a média do número de partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
	g(r)=\frac{V}{N^2}\langle\sum_{i=1}^N\sum_{j\neq i}^N\delta(r-|r_i-r_j|)  \rangle&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Numéricamente pode ser interpretado como a média do número de pares de partículas a uma distância entre &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;r+\Delta r&amp;lt;/math&amp;gt; pesado pelo volume/área desta região.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	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]&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde &amp;lt;math&amp;gt;V_t&amp;lt;/math&amp;gt; é o/a volume/área total e &amp;lt;math&amp;gt;rect&amp;lt;/math&amp;gt; é a função retangular.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Em resumo, o &amp;lt;math&amp;gt;g(r,\Delta r)&amp;lt;/math&amp;gt; é a média dos [[Histogramas_e_Densidade_de_Probabilidade|histogramas]] do número de partículas em um ''bin''  de largura &amp;lt;math&amp;gt;\Delta r&amp;lt;/math&amp;gt; a uma &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; feitos para cada partícula no sistema pesado pelo volume/área deste ''bin''.&lt;br /&gt;
&lt;br /&gt;
==== Construção do Código ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Resultados ====&lt;br /&gt;
&lt;br /&gt;
[[Image:GR-D.png|400px|Resultado do cálculo de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
=Referências=&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Psi 6 (&amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;)=&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;caixa&amp;quot; em que as partículas estão localizadas e então localizar possíveis &amp;quot;defeitos&amp;quot; no padrão hexagonal.&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\frac{\pi}{3}&amp;lt;/math&amp;gt;. Buscando uma relação em que esta situação seja a situação de &amp;lt;math&amp;gt;\psi_6 = 1&amp;lt;/math&amp;gt;, é possível definir que o &amp;lt;math&amp;gt;\psi_6 &amp;lt;/math&amp;gt; vale:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\psi_6=\frac{1}{6}\sum_i^ncos(6\theta_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\theta=\frac{\pi}{3}&amp;lt;/math&amp;gt; resulte em um valor de &amp;lt;math&amp;gt;\psi_6=1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Implementação Computacional ==&lt;br /&gt;
[[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;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Encontrando vizinhos ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
O método aqui citado é pouco otimizado, pois utiliza-se um for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;, 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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; baseando-se em outro valor já calculado, a medida do g(r), desta forma o valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; resultará em um valor razoável ( &amp;gt;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.&lt;br /&gt;
&lt;br /&gt;
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: &amp;quot;neighborsX&amp;quot; (que guarda a posição X do vizinho), &amp;quot;neighborsY&amp;quot;(que guarda a posição Y do vizinho) e &amp;quot;dNeighbors&amp;quot;(que guarda a distância do vizinho) e então faz-se o for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; buscando-se as distância menores que o raio de corte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(i=0;i&amp;lt;NP;i++){&lt;br /&gt;
                k=0;&lt;br /&gt;
                xOrg=xx[i];&lt;br /&gt;
		yOrg=yy[i];&lt;br /&gt;
		for(j=0;j&amp;lt;NP;j++){&lt;br /&gt;
			x2=xx[j];&lt;br /&gt;
			y2=yy[j];&lt;br /&gt;
			if(i!=j){&lt;br /&gt;
				if(distance(xOrg,yOrg,x2,y2)&amp;lt;radiusLimit)&lt;br /&gt;
				{	&lt;br /&gt;
					neighborsX[k]=x2;&lt;br /&gt;
					neighborsY[k]=y2;&lt;br /&gt;
					dNeighbors[k]=distance(x2,y2,xOrg,yOrg);&lt;br /&gt;
					k+=1;&lt;br /&gt;
				}&lt;br /&gt;
			}		&lt;br /&gt;
                 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Portanto após esse algoritmo, temos guardadas as posições das partículas mais próximas. É importante ressaltar que o &amp;quot;for&amp;quot; em partícula-teste ainda não foi fechado, e ainda dentro deste mesmo loop serão calculados os valores de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Calculando o Psi 6 ===&lt;br /&gt;
&lt;br /&gt;
Tendo os valores de X e Y dos vizinhos da partícula-teste, podemos proceder para o cálculo do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;. 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 &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt; e será dado pela seguinte relação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\phi_i=arctg\left(\frac{\Delta Y}{\Delta X}\right)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na implementação em código fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(j=0;j&amp;lt;k;j++){&lt;br /&gt;
		delX=neighborsX[j]-xx[i];&lt;br /&gt;
		delY=neighborsY[j]-yy[i];&lt;br /&gt;
&lt;br /&gt;
                //Condições de contorno periódicas&lt;br /&gt;
		delX=delX-rint(delX/Lx)*Lx; &lt;br /&gt;
        	delY=delY-rint(delY/Ly)*Ly;&lt;br /&gt;
                // --- //&lt;br /&gt;
&lt;br /&gt;
		angle[j]=atan2(delY,delX);&lt;br /&gt;
		if (angle[j]&amp;lt;0)&lt;br /&gt;
			angle[j]=2*PI+angle[j];&lt;br /&gt;
                psix[i]=0;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora somente precisa-se realizar um algoritmo que ordene o vetor &amp;quot;angle&amp;quot; do menor para o maior ângulo, utilizando algoritmos de ordenamento (bubblesort, quicksort, etc) desta forma é possível calcular os &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Feito o ordenamento do vetor, basta calcular a média do valor do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; de cada vizinho. Para isto, precisamos calcular os valores de &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt; em função dos &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt;, basta realizar a subtração do próximo vizinho no vetor pelo valor do ângulo do vizinho atual, dessa forma: &amp;lt;math&amp;gt; \theta_i = \psi_{i+1} - \psi_i &amp;lt;/math&amp;gt; com exceção do último vizinho, que será o ângulo dele menos o do primeiro, desta forma a implementação fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		firstAngle=angle[0];	&lt;br /&gt;
		for(j=0;j&amp;lt;k-1;j++){ &lt;br /&gt;
			angle[j]=cos(6.*(angle[j+1]-angle[j]));&lt;br /&gt;
		}		&lt;br /&gt;
		angle[k-1]=cos(6.*(firstAngle+2*PI-angle[k-1]));&lt;br /&gt;
		for(j=0;j&amp;lt;k;j++){ &lt;br /&gt;
			psix[i]+=angle[j]/6.;&lt;br /&gt;
		}	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E então está calculado o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, para facilitar a implementação é recomendado que este algoritmo seja uma função dentro de seu código e desta forma retorne o vetor &amp;quot;psix&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Exemplos ===&lt;br /&gt;
Para o caso de um potencial de Lennard-Jones, é possível observar resultados de mapas de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, isto é, um mapa que mostra para cada partícula o seu valor da medida, da seguinte forma para cada valor de rho:&lt;br /&gt;
[[Image:Psix_1.png|thumb|400px|right|Resultados do valor de psi6 (em cores) para o caso de um potencial de Lennard Jones para &amp;lt;math&amp;gt; \rho=1.000 &amp;lt;/math&amp;gt;]]&lt;br /&gt;
[[Image:Psix_0360.png|thumb|400px|left|Resultados do valor de psi6 (em cores) para o caso de um potencial de Lennard Jones para &amp;lt;math&amp;gt; \rho=0.360 &amp;lt;/math&amp;gt;.]]&lt;br /&gt;
[[Image:Psix_0640.png|thumb|400px|center|Resultados do valor de psi6 (em cores) para o caso de um potencial de Lennard Jones para &amp;lt;math&amp;gt; \rho=0.640 &amp;lt;/math&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
== Aplicações em outras áreas ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Celulasdegrade.png|thumb|300px|right|Mapa neural de células de grade em que o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; equivale 0,99.]]&lt;br /&gt;
&lt;br /&gt;
No estudo do processamento da posição de um animal no cérebro de rato, são observados padrões hexagonais produzidos pelas chamadas &amp;quot;Células de grade&amp;quot;, 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 &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; para determinar a &amp;quot;hexagonalidade&amp;quot; dos disparos, podendo-se realizar estudos da influência desse formato na interpretação geoespacial do animal.&lt;/div&gt;</summary>
		<author><name>Rmoreira</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=676</id>
		<title>Medidas estáticas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=676"/>
		<updated>2016-08-01T18:49:19Z</updated>

		<summary type="html">&lt;p&gt;Rmoreira: /* Encontrando vizinhos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em dinâmica molecular, medidas estáticas são medidas realizadas em um passo específico de tempo da simulação.&lt;br /&gt;
&lt;br /&gt;
=Pair Distribution Function=&lt;br /&gt;
&lt;br /&gt;
[[Image:Gr.png|thumb|300px|right|Representação do cálculo numérico de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
A ''Pair Distribution Function'' , ou &amp;quot;&amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;&amp;quot;, é uma função que estima o quão provável é encontrar duas partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; dentro de um sistema de várias partículas.&lt;br /&gt;
&lt;br /&gt;
Em um sistema de &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas, o &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt; é definido como a média do número de partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
	g(r)=\frac{V}{N^2}\langle\sum_{i=1}^N\sum_{j\neq i}^N\delta(r-|r_i-r_j|)  \rangle&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Numéricamente pode ser interpretado como a média do número de pares de partículas a uma distância entre &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;r+\Delta r&amp;lt;/math&amp;gt; pesado pelo volume/área desta região.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	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]&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde &amp;lt;math&amp;gt;V_t&amp;lt;/math&amp;gt; é o/a volume/área total e &amp;lt;math&amp;gt;rect&amp;lt;/math&amp;gt; é a função retangular.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Em resumo, o &amp;lt;math&amp;gt;g(r,\Delta r)&amp;lt;/math&amp;gt; é a média dos [[Histogramas_e_Densidade_de_Probabilidade|histogramas]] do número de partículas em um ''bin''  de largura &amp;lt;math&amp;gt;\Delta r&amp;lt;/math&amp;gt; a uma &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; feitos para cada partícula no sistema pesado pelo volume/área deste ''bin''.&lt;br /&gt;
&lt;br /&gt;
==== Construção do Código ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Resultados ====&lt;br /&gt;
&lt;br /&gt;
[[Image:GR-D.png|400px|Resultado do cálculo de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
=Referências=&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Psi 6 (&amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;)=&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;caixa&amp;quot; em que as partículas estão localizadas e então localizar possíveis &amp;quot;defeitos&amp;quot; no padrão hexagonal.&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\frac{\pi}{3}&amp;lt;/math&amp;gt;. Buscando uma relação em que esta situação seja a situação de &amp;lt;math&amp;gt;\psi_6 = 1&amp;lt;/math&amp;gt;, é possível definir que o &amp;lt;math&amp;gt;\psi_6 &amp;lt;/math&amp;gt; vale:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\psi_6=\frac{1}{6}\sum_i^ncos(6\theta_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\theta=\frac{\pi}{3}&amp;lt;/math&amp;gt; resulte em um valor de &amp;lt;math&amp;gt;\psi_6=1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Implementação Computacional ==&lt;br /&gt;
[[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;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Encontrando vizinhos ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
O método aqui citado é pouco otimizado, pois utiliza-se um for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;, 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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; baseando-se em outro valor já calculado, a medida do g(r), desta forma o valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; resultará em um valor razoável ( &amp;gt;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.&lt;br /&gt;
&lt;br /&gt;
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: &amp;quot;neighborsX&amp;quot; (que guarda a posição X do vizinho), &amp;quot;neighborsY&amp;quot;(que guarda a posição Y do vizinho) e &amp;quot;dNeighbors&amp;quot;(que guarda a distância do vizinho) e então faz-se o for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; buscando-se as distância menores que o raio de corte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(i=0;i&amp;lt;NP;i++){&lt;br /&gt;
                k=0;&lt;br /&gt;
                xOrg=xx[i];&lt;br /&gt;
		yOrg=yy[i];&lt;br /&gt;
		for(j=0;j&amp;lt;NP;j++){&lt;br /&gt;
			x2=xx[j];&lt;br /&gt;
			y2=yy[j];&lt;br /&gt;
			if(i!=j){&lt;br /&gt;
				if(distance(xOrg,yOrg,x2,y2)&amp;lt;radiusLimit)&lt;br /&gt;
				{	&lt;br /&gt;
					neighborsX[k]=x2;&lt;br /&gt;
					neighborsY[k]=y2;&lt;br /&gt;
					dNeighbors[k]=distance(x2,y2,xOrg,yOrg);&lt;br /&gt;
					k+=1;&lt;br /&gt;
				}&lt;br /&gt;
			}		&lt;br /&gt;
                 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Portanto após esse algoritmo, temos guardadas as posições das partículas mais próximas. É importante ressaltar que o &amp;quot;for&amp;quot; em partícula-teste ainda não foi fechado, e ainda dentro deste mesmo loop serão calculados os valores de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Calculando o Psi 6 ===&lt;br /&gt;
&lt;br /&gt;
Tendo os valores de X e Y dos vizinhos da partícula-teste, podemos proceder para o cálculo do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;. 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 &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt; e será dado pela seguinte relação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\phi_i=arctg\left(\frac{\Delta Y}{\Delta X}\right)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na implementação em código fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(j=0;j&amp;lt;k;j++){&lt;br /&gt;
		delX=neighborsX[j]-xx[i];&lt;br /&gt;
		delY=neighborsY[j]-yy[i];&lt;br /&gt;
&lt;br /&gt;
                //Condições de contorno periódicas&lt;br /&gt;
		delX=delX-rint(delX/Lx)*Lx; &lt;br /&gt;
        	delY=delY-rint(delY/Ly)*Ly;&lt;br /&gt;
                // --- //&lt;br /&gt;
&lt;br /&gt;
		angle[j]=atan2(delY,delX);&lt;br /&gt;
		if (angle[j]&amp;lt;0)&lt;br /&gt;
			angle[j]=2*PI+angle[j];&lt;br /&gt;
                psix[i]=0;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora somente precisa-se realizar um algoritmo que ordene o vetor &amp;quot;angle&amp;quot; do menor para o maior ângulo, utilizando algoritmos de ordenamento (bubblesort, quicksort, etc) desta forma é possível calcular os &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Feito o ordenamento do vetor, basta calcular a média do valor do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; de cada vizinho. Para isto, precisamos calcular os valores de &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt; em função dos &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt;, basta realizar a subtração do próximo vizinho no vetor pelo valor do ângulo do vizinho atual, dessa forma: &amp;lt;math&amp;gt; \theta_i = \psi_{i+1} - \psi_i &amp;lt;/math&amp;gt; com exceção do último vizinho, que será o ângulo dele menos o do primeiro, desta forma a implementação fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		firstAngle=angle[0];	&lt;br /&gt;
		for(j=0;j&amp;lt;k-1;j++){ &lt;br /&gt;
			angle[j]=cos(6.*(angle[j+1]-angle[j]));&lt;br /&gt;
		}		&lt;br /&gt;
		angle[k-1]=cos(6.*(firstAngle+2*PI-angle[k-1]));&lt;br /&gt;
		for(j=0;j&amp;lt;k;j++){ &lt;br /&gt;
			psix[i]+=angle[j]/6.;&lt;br /&gt;
		}	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E então está calculado o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, para facilitar a implementação é recomendado que este algoritmo seja uma função dentro de seu código e desta forma retorne o vetor &amp;quot;psix&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Exemplos ===&lt;br /&gt;
Para o caso de um potencial de Lennard-Jones, é possível observar resultados de mapas de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, isto é, um mapa que mostra para cada partícula o seu valor da medida, da seguinte forma para cada valor de rho:&lt;br /&gt;
[[Image:Psix_1.png|thumb|400px|right|Resultados do valor de psix (em cores) para o caso de um potencial de Lennard Jones para &amp;lt;math&amp;gt; \rho=1.000 &amp;lt;/math&amp;gt;]]&lt;br /&gt;
[[Image:Psix_0360.png|thumb|400px|left|Resultados do valor de psix (em cores) para o caso de um potencial de Lennard Jones para &amp;lt;math&amp;gt; \rho=0.360 &amp;lt;/math&amp;gt;.]]&lt;br /&gt;
[[Image:Psix_0640.png|thumb|400px|center|Resultados do valor de psix (em cores) para o caso de um potencial de Lennard Jones para &amp;lt;math&amp;gt; \rho=0.640 &amp;lt;/math&amp;gt;]]&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
== Aplicações em outras áreas ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Celulasdegrade.png|thumb|300px|right|Mapa neural de células de grade em que o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; equivale 0,99.]]&lt;br /&gt;
&lt;br /&gt;
No estudo do processamento da posição de um animal no cérebro de rato, são observados padrões hexagonais produzidos pelas chamadas &amp;quot;Células de grade&amp;quot;, 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 &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; para determinar a &amp;quot;hexagonalidade&amp;quot; dos disparos, podendo-se realizar estudos da influência desse formato na interpretação geoespacial do animal.&lt;/div&gt;</summary>
		<author><name>Rmoreira</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=675</id>
		<title>Medidas estáticas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=675"/>
		<updated>2016-08-01T18:47:53Z</updated>

		<summary type="html">&lt;p&gt;Rmoreira: /* Encontrando vizinhos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em dinâmica molecular, medidas estáticas são medidas realizadas em um passo específico de tempo da simulação.&lt;br /&gt;
&lt;br /&gt;
=Pair Distribution Function=&lt;br /&gt;
&lt;br /&gt;
[[Image:Gr.png|thumb|300px|right|Representação do cálculo numérico de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
A ''Pair Distribution Function'' , ou &amp;quot;&amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;&amp;quot;, é uma função que estima o quão provável é encontrar duas partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; dentro de um sistema de várias partículas.&lt;br /&gt;
&lt;br /&gt;
Em um sistema de &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas, o &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt; é definido como a média do número de partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
	g(r)=\frac{V}{N^2}\langle\sum_{i=1}^N\sum_{j\neq i}^N\delta(r-|r_i-r_j|)  \rangle&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Numéricamente pode ser interpretado como a média do número de pares de partículas a uma distância entre &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;r+\Delta r&amp;lt;/math&amp;gt; pesado pelo volume/área desta região.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	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]&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde &amp;lt;math&amp;gt;V_t&amp;lt;/math&amp;gt; é o/a volume/área total e &amp;lt;math&amp;gt;rect&amp;lt;/math&amp;gt; é a função retangular.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Em resumo, o &amp;lt;math&amp;gt;g(r,\Delta r)&amp;lt;/math&amp;gt; é a média dos [[Histogramas_e_Densidade_de_Probabilidade|histogramas]] do número de partículas em um ''bin''  de largura &amp;lt;math&amp;gt;\Delta r&amp;lt;/math&amp;gt; a uma &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; feitos para cada partícula no sistema pesado pelo volume/área deste ''bin''.&lt;br /&gt;
&lt;br /&gt;
==== Construção do Código ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Resultados ====&lt;br /&gt;
&lt;br /&gt;
[[Image:GR-D.png|400px|Resultado do cálculo de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
=Referências=&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Psi 6 (&amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;)=&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;caixa&amp;quot; em que as partículas estão localizadas e então localizar possíveis &amp;quot;defeitos&amp;quot; no padrão hexagonal.&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\frac{\pi}{3}&amp;lt;/math&amp;gt;. Buscando uma relação em que esta situação seja a situação de &amp;lt;math&amp;gt;\psi_6 = 1&amp;lt;/math&amp;gt;, é possível definir que o &amp;lt;math&amp;gt;\psi_6 &amp;lt;/math&amp;gt; vale:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\psi_6=\frac{1}{6}\sum_i^ncos(6\theta_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\theta=\frac{\pi}{3}&amp;lt;/math&amp;gt; resulte em um valor de &amp;lt;math&amp;gt;\psi_6=1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Implementação Computacional ==&lt;br /&gt;
[[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;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Encontrando vizinhos ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
O método aqui citado é pouco otimizado, pois utiliza-se um for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;, 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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;) baseando-se em outro valor já calculado, a medida do g(r), desta forma o valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; resultará em um valor razoável ( &amp;gt;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.&lt;br /&gt;
&lt;br /&gt;
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: &amp;quot;neighborsX&amp;quot; (que guarda a posição X do vizinho), &amp;quot;neighborsY&amp;quot;(que guarda a posição Y do vizinho) e &amp;quot;dNeighbors&amp;quot;(que guarda a distância do vizinho) e então faz-se o for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; buscando-se as distância menores que o raio de corte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(i=0;i&amp;lt;NP;i++){&lt;br /&gt;
                k=0;&lt;br /&gt;
                xOrg=xx[i];&lt;br /&gt;
		yOrg=yy[i];&lt;br /&gt;
		for(j=0;j&amp;lt;NP;j++){&lt;br /&gt;
			x2=xx[j];&lt;br /&gt;
			y2=yy[j];&lt;br /&gt;
			if(i!=j){&lt;br /&gt;
				if(distance(xOrg,yOrg,x2,y2)&amp;lt;radiusLimit)&lt;br /&gt;
				{	&lt;br /&gt;
					neighborsX[k]=x2;&lt;br /&gt;
					neighborsY[k]=y2;&lt;br /&gt;
					dNeighbors[k]=distance(x2,y2,xOrg,yOrg);&lt;br /&gt;
					k+=1;&lt;br /&gt;
				}&lt;br /&gt;
			}		&lt;br /&gt;
                 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Portanto após esse algoritmo, temos guardadas as posições das partículas mais próximas. É importante ressaltar que o &amp;quot;for&amp;quot; em partícula-teste ainda não foi fechado, e ainda dentro deste mesmo loop serão calculados os valores de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Calculando o Psi 6 ===&lt;br /&gt;
&lt;br /&gt;
Tendo os valores de X e Y dos vizinhos da partícula-teste, podemos proceder para o cálculo do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;. 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 &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt; e será dado pela seguinte relação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\phi_i=arctg\left(\frac{\Delta Y}{\Delta X}\right)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na implementação em código fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(j=0;j&amp;lt;k;j++){&lt;br /&gt;
		delX=neighborsX[j]-xx[i];&lt;br /&gt;
		delY=neighborsY[j]-yy[i];&lt;br /&gt;
&lt;br /&gt;
                //Condições de contorno periódicas&lt;br /&gt;
		delX=delX-rint(delX/Lx)*Lx; &lt;br /&gt;
        	delY=delY-rint(delY/Ly)*Ly;&lt;br /&gt;
                // --- //&lt;br /&gt;
&lt;br /&gt;
		angle[j]=atan2(delY,delX);&lt;br /&gt;
		if (angle[j]&amp;lt;0)&lt;br /&gt;
			angle[j]=2*PI+angle[j];&lt;br /&gt;
                psix[i]=0;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora somente precisa-se realizar um algoritmo que ordene o vetor &amp;quot;angle&amp;quot; do menor para o maior ângulo, utilizando algoritmos de ordenamento (bubblesort, quicksort, etc) desta forma é possível calcular os &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Feito o ordenamento do vetor, basta calcular a média do valor do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; de cada vizinho. Para isto, precisamos calcular os valores de &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt; em função dos &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt;, basta realizar a subtração do próximo vizinho no vetor pelo valor do ângulo do vizinho atual, dessa forma: &amp;lt;math&amp;gt; \theta_i = \psi_{i+1} - \psi_i &amp;lt;/math&amp;gt; com exceção do último vizinho, que será o ângulo dele menos o do primeiro, desta forma a implementação fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		firstAngle=angle[0];	&lt;br /&gt;
		for(j=0;j&amp;lt;k-1;j++){ &lt;br /&gt;
			angle[j]=cos(6.*(angle[j+1]-angle[j]));&lt;br /&gt;
		}		&lt;br /&gt;
		angle[k-1]=cos(6.*(firstAngle+2*PI-angle[k-1]));&lt;br /&gt;
		for(j=0;j&amp;lt;k;j++){ &lt;br /&gt;
			psix[i]+=angle[j]/6.;&lt;br /&gt;
		}	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E então está calculado o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, para facilitar a implementação é recomendado que este algoritmo seja uma função dentro de seu código e desta forma retorne o vetor &amp;quot;psix&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Exemplos ===&lt;br /&gt;
Para o caso de um potencial de Lennard-Jones, é possível observar resultados de mapas de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, isto é, um mapa que mostra para cada partícula o seu valor da medida, da seguinte forma para cada valor de rho:&lt;br /&gt;
[[Image:Psix_1.png|thumb|400px|right|Resultados do valor de psix (em cores) para o caso de um potencial de Lennard Jones para &amp;lt;math&amp;gt; \rho=1.000 &amp;lt;/math&amp;gt;]]&lt;br /&gt;
[[Image:Psix_0360.png|thumb|400px|left|Resultados do valor de psix (em cores) para o caso de um potencial de Lennard Jones para &amp;lt;math&amp;gt; \rho=0.360 &amp;lt;/math&amp;gt;.]]&lt;br /&gt;
[[Image:Psix_0640.png|thumb|400px|center|Resultados do valor de psix (em cores) para o caso de um potencial de Lennard Jones para &amp;lt;math&amp;gt; \rho=0.640 &amp;lt;/math&amp;gt;]]&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
== Aplicações em outras áreas ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Celulasdegrade.png|thumb|300px|right|Mapa neural de células de grade em que o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; equivale 0,99.]]&lt;br /&gt;
&lt;br /&gt;
No estudo do processamento da posição de um animal no cérebro de rato, são observados padrões hexagonais produzidos pelas chamadas &amp;quot;Células de grade&amp;quot;, 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 &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; para determinar a &amp;quot;hexagonalidade&amp;quot; dos disparos, podendo-se realizar estudos da influência desse formato na interpretação geoespacial do animal.&lt;/div&gt;</summary>
		<author><name>Rmoreira</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=674</id>
		<title>Medidas estáticas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=674"/>
		<updated>2016-08-01T18:47:19Z</updated>

		<summary type="html">&lt;p&gt;Rmoreira: /* Encontrando vizinhos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em dinâmica molecular, medidas estáticas são medidas realizadas em um passo específico de tempo da simulação.&lt;br /&gt;
&lt;br /&gt;
=Pair Distribution Function=&lt;br /&gt;
&lt;br /&gt;
[[Image:Gr.png|thumb|300px|right|Representação do cálculo numérico de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
A ''Pair Distribution Function'' , ou &amp;quot;&amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;&amp;quot;, é uma função que estima o quão provável é encontrar duas partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; dentro de um sistema de várias partículas.&lt;br /&gt;
&lt;br /&gt;
Em um sistema de &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas, o &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt; é definido como a média do número de partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
	g(r)=\frac{V}{N^2}\langle\sum_{i=1}^N\sum_{j\neq i}^N\delta(r-|r_i-r_j|)  \rangle&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Numéricamente pode ser interpretado como a média do número de pares de partículas a uma distância entre &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;r+\Delta r&amp;lt;/math&amp;gt; pesado pelo volume/área desta região.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	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]&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde &amp;lt;math&amp;gt;V_t&amp;lt;/math&amp;gt; é o/a volume/área total e &amp;lt;math&amp;gt;rect&amp;lt;/math&amp;gt; é a função retangular.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Em resumo, o &amp;lt;math&amp;gt;g(r,\Delta r)&amp;lt;/math&amp;gt; é a média dos [[Histogramas_e_Densidade_de_Probabilidade|histogramas]] do número de partículas em um ''bin''  de largura &amp;lt;math&amp;gt;\Delta r&amp;lt;/math&amp;gt; a uma &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; feitos para cada partícula no sistema pesado pelo volume/área deste ''bin''.&lt;br /&gt;
&lt;br /&gt;
==== Construção do Código ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Resultados ====&lt;br /&gt;
&lt;br /&gt;
[[Image:GR-D.png|400px|Resultado do cálculo de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
=Referências=&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Psi 6 (&amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;)=&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;caixa&amp;quot; em que as partículas estão localizadas e então localizar possíveis &amp;quot;defeitos&amp;quot; no padrão hexagonal.&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\frac{\pi}{3}&amp;lt;/math&amp;gt;. Buscando uma relação em que esta situação seja a situação de &amp;lt;math&amp;gt;\psi_6 = 1&amp;lt;/math&amp;gt;, é possível definir que o &amp;lt;math&amp;gt;\psi_6 &amp;lt;/math&amp;gt; vale:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\psi_6=\frac{1}{6}\sum_i^ncos(6\theta_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\theta=\frac{\pi}{3}&amp;lt;/math&amp;gt; resulte em um valor de &amp;lt;math&amp;gt;\psi_6=1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Implementação Computacional ==&lt;br /&gt;
[[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;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Encontrando vizinhos ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
O método aqui citado é pouco otimizado, pois utiliza-se um for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;, 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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;) baseando-se em outro valor já calculado, a medida do g(r), desta forma o valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; resultará em um valor razoável ( &amp;gt;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.&lt;br /&gt;
&lt;br /&gt;
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: &amp;quot;neighborsX&amp;quot; (que guarda a posição X do vizinho), &amp;quot;neighborsY&amp;quot;(que guarda a posição Y do vizinho) e &amp;quot;dNeighbors&amp;quot;(que guarda a distância do vizinho) e então faz-se o for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; buscando-se as distância menores que o raio de corte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(i=0;i&amp;lt;NP;i++){&lt;br /&gt;
                k=0;&lt;br /&gt;
                xOrg=xx[i];&lt;br /&gt;
		yOrg=yy[i];&lt;br /&gt;
		for(j=0;j&amp;lt;NP;j++){&lt;br /&gt;
			x2=xx[j];&lt;br /&gt;
			y2=yy[j];&lt;br /&gt;
			if(i!=j){&lt;br /&gt;
				if(distance(xOrg,yOrg,x2,y2)&amp;lt;radiusLimit)&lt;br /&gt;
				{	&lt;br /&gt;
					neighborsX[k]=x2;&lt;br /&gt;
					neighborsY[k]=y2;&lt;br /&gt;
					dNeighbors[k]=distance(x2,y2,xOrg,yOrg);&lt;br /&gt;
					k+=1;&lt;br /&gt;
				}&lt;br /&gt;
			}		&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Portanto após esse algoritmo, temos guardadas as posições das partículas mais próximas. É importante ressaltar que o &amp;quot;for&amp;quot; em partícula-teste ainda não foi fechado, e ainda dentro deste mesmo loop serão calculados os valores de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Calculando o Psi 6 ===&lt;br /&gt;
&lt;br /&gt;
Tendo os valores de X e Y dos vizinhos da partícula-teste, podemos proceder para o cálculo do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;. 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 &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt; e será dado pela seguinte relação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\phi_i=arctg\left(\frac{\Delta Y}{\Delta X}\right)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na implementação em código fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(j=0;j&amp;lt;k;j++){&lt;br /&gt;
		delX=neighborsX[j]-xx[i];&lt;br /&gt;
		delY=neighborsY[j]-yy[i];&lt;br /&gt;
&lt;br /&gt;
                //Condições de contorno periódicas&lt;br /&gt;
		delX=delX-rint(delX/Lx)*Lx; &lt;br /&gt;
        	delY=delY-rint(delY/Ly)*Ly;&lt;br /&gt;
                // --- //&lt;br /&gt;
&lt;br /&gt;
		angle[j]=atan2(delY,delX);&lt;br /&gt;
		if (angle[j]&amp;lt;0)&lt;br /&gt;
			angle[j]=2*PI+angle[j];&lt;br /&gt;
                psix[i]=0;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora somente precisa-se realizar um algoritmo que ordene o vetor &amp;quot;angle&amp;quot; do menor para o maior ângulo, utilizando algoritmos de ordenamento (bubblesort, quicksort, etc) desta forma é possível calcular os &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Feito o ordenamento do vetor, basta calcular a média do valor do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; de cada vizinho. Para isto, precisamos calcular os valores de &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt; em função dos &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt;, basta realizar a subtração do próximo vizinho no vetor pelo valor do ângulo do vizinho atual, dessa forma: &amp;lt;math&amp;gt; \theta_i = \psi_{i+1} - \psi_i &amp;lt;/math&amp;gt; com exceção do último vizinho, que será o ângulo dele menos o do primeiro, desta forma a implementação fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		firstAngle=angle[0];	&lt;br /&gt;
		for(j=0;j&amp;lt;k-1;j++){ &lt;br /&gt;
			angle[j]=cos(6.*(angle[j+1]-angle[j]));&lt;br /&gt;
		}		&lt;br /&gt;
		angle[k-1]=cos(6.*(firstAngle+2*PI-angle[k-1]));&lt;br /&gt;
		for(j=0;j&amp;lt;k;j++){ &lt;br /&gt;
			psix[i]+=angle[j]/6.;&lt;br /&gt;
		}	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E então está calculado o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, para facilitar a implementação é recomendado que este algoritmo seja uma função dentro de seu código e desta forma retorne o vetor &amp;quot;psix&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Exemplos ===&lt;br /&gt;
Para o caso de um potencial de Lennard-Jones, é possível observar resultados de mapas de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, isto é, um mapa que mostra para cada partícula o seu valor da medida, da seguinte forma para cada valor de rho:&lt;br /&gt;
[[Image:Psix_1.png|thumb|400px|right|Resultados do valor de psix (em cores) para o caso de um potencial de Lennard Jones para &amp;lt;math&amp;gt; \rho=1.000 &amp;lt;/math&amp;gt;]]&lt;br /&gt;
[[Image:Psix_0360.png|thumb|400px|left|Resultados do valor de psix (em cores) para o caso de um potencial de Lennard Jones para &amp;lt;math&amp;gt; \rho=0.360 &amp;lt;/math&amp;gt;.]]&lt;br /&gt;
[[Image:Psix_0640.png|thumb|400px|center|Resultados do valor de psix (em cores) para o caso de um potencial de Lennard Jones para &amp;lt;math&amp;gt; \rho=0.640 &amp;lt;/math&amp;gt;]]&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
== Aplicações em outras áreas ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Celulasdegrade.png|thumb|300px|right|Mapa neural de células de grade em que o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; equivale 0,99.]]&lt;br /&gt;
&lt;br /&gt;
No estudo do processamento da posição de um animal no cérebro de rato, são observados padrões hexagonais produzidos pelas chamadas &amp;quot;Células de grade&amp;quot;, 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 &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; para determinar a &amp;quot;hexagonalidade&amp;quot; dos disparos, podendo-se realizar estudos da influência desse formato na interpretação geoespacial do animal.&lt;/div&gt;</summary>
		<author><name>Rmoreira</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=673</id>
		<title>Medidas estáticas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=673"/>
		<updated>2016-08-01T18:39:25Z</updated>

		<summary type="html">&lt;p&gt;Rmoreira: /* Psi 6 ( \psi_6 ) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em dinâmica molecular, medidas estáticas são medidas realizadas em um passo específico de tempo da simulação.&lt;br /&gt;
&lt;br /&gt;
=Pair Distribution Function=&lt;br /&gt;
&lt;br /&gt;
[[Image:Gr.png|thumb|300px|right|Representação do cálculo numérico de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
A ''Pair Distribution Function'' , ou &amp;quot;&amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;&amp;quot;, é uma função que estima o quão provável é encontrar duas partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; dentro de um sistema de várias partículas.&lt;br /&gt;
&lt;br /&gt;
Em um sistema de &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas, o &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt; é definido como a média do número de partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
	g(r)=\frac{V}{N^2}\langle\sum_{i=1}^N\sum_{j\neq i}^N\delta(r-|r_i-r_j|)  \rangle&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Numéricamente pode ser interpretado como a média do número de pares de partículas a uma distância entre &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;r+\Delta r&amp;lt;/math&amp;gt; pesado pelo volume/área desta região.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	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]&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde &amp;lt;math&amp;gt;V_t&amp;lt;/math&amp;gt; é o/a volume/área total e &amp;lt;math&amp;gt;rect&amp;lt;/math&amp;gt; é a função retangular.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Em resumo, o &amp;lt;math&amp;gt;g(r,\Delta r)&amp;lt;/math&amp;gt; é a média dos [[Histogramas_e_Densidade_de_Probabilidade|histogramas]] do número de partículas em um ''bin''  de largura &amp;lt;math&amp;gt;\Delta r&amp;lt;/math&amp;gt; a uma &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; feitos para cada partícula no sistema pesado pelo volume/área deste ''bin''.&lt;br /&gt;
&lt;br /&gt;
==== Construção do Código ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Resultados ====&lt;br /&gt;
&lt;br /&gt;
[[Image:GR-D.png|400px|Resultado do cálculo de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
=Referências=&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Psi 6 (&amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;)=&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;caixa&amp;quot; em que as partículas estão localizadas e então localizar possíveis &amp;quot;defeitos&amp;quot; no padrão hexagonal.&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\frac{\pi}{3}&amp;lt;/math&amp;gt;. Buscando uma relação em que esta situação seja a situação de &amp;lt;math&amp;gt;\psi_6 = 1&amp;lt;/math&amp;gt;, é possível definir que o &amp;lt;math&amp;gt;\psi_6 &amp;lt;/math&amp;gt; vale:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\psi_6=\frac{1}{6}\sum_i^ncos(6\theta_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\theta=\frac{\pi}{3}&amp;lt;/math&amp;gt; resulte em um valor de &amp;lt;math&amp;gt;\psi_6=1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Implementação Computacional ==&lt;br /&gt;
[[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;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Encontrando vizinhos ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
O método aqui citado é pouco otimizado, pois utiliza-se um for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;, 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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;) baseando-se em outro valor já calculado, a medida do g(r), desta forma o valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; resultará em um valor razoável ( &amp;gt;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.&lt;br /&gt;
&lt;br /&gt;
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: &amp;quot;neighborsX&amp;quot; (que guarda a posição X do vizinho), &amp;quot;neighborsY&amp;quot;(que guarda a posição Y do vizinho) e &amp;quot;dNeighbors&amp;quot;(que guarda a distância do vizinho) e então faz-se o for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; buscando-se as distância menores que o raio de corte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(i=0;i&amp;lt;NP;i++){&lt;br /&gt;
		xOrg=xx[i];&lt;br /&gt;
		yOrg=yy[i];&lt;br /&gt;
		for(j=0;j&amp;lt;NP;j++){&lt;br /&gt;
			x2=xx[j];&lt;br /&gt;
			y2=yy[j];&lt;br /&gt;
			if(i!=j){&lt;br /&gt;
				if(distance(xOrg,yOrg,x2,y2)&amp;lt;radiusLimit)&lt;br /&gt;
				{	&lt;br /&gt;
					neighborsX[k]=x2;&lt;br /&gt;
					neighborsY[k]=y2;&lt;br /&gt;
					dNeighbors[k]=distance(x2,y2,xOrg,yOrg);&lt;br /&gt;
					k+=1;&lt;br /&gt;
				}&lt;br /&gt;
			}		&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Portanto após esse algoritmo, temos guardadas as posições das partículas mais próximas. É importante ressaltar que o &amp;quot;for&amp;quot; em partícula-teste ainda não foi fechado, e ainda dentro deste mesmo loop serão calculados os valores de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Calculando o Psi 6 ===&lt;br /&gt;
&lt;br /&gt;
Tendo os valores de X e Y dos vizinhos da partícula-teste, podemos proceder para o cálculo do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;. 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 &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt; e será dado pela seguinte relação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\phi_i=arctg\left(\frac{\Delta Y}{\Delta X}\right)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na implementação em código fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(j=0;j&amp;lt;k;j++){&lt;br /&gt;
		delX=neighborsX[j]-xx[i];&lt;br /&gt;
		delY=neighborsY[j]-yy[i];&lt;br /&gt;
&lt;br /&gt;
                //Condições de contorno periódicas&lt;br /&gt;
		delX=delX-rint(delX/Lx)*Lx; &lt;br /&gt;
        	delY=delY-rint(delY/Ly)*Ly;&lt;br /&gt;
                // --- //&lt;br /&gt;
&lt;br /&gt;
		angle[j]=atan2(delY,delX);&lt;br /&gt;
		if (angle[j]&amp;lt;0)&lt;br /&gt;
			angle[j]=2*PI+angle[j];&lt;br /&gt;
                psix[i]=0;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora somente precisa-se realizar um algoritmo que ordene o vetor &amp;quot;angle&amp;quot; do menor para o maior ângulo, utilizando algoritmos de ordenamento (bubblesort, quicksort, etc) desta forma é possível calcular os &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Feito o ordenamento do vetor, basta calcular a média do valor do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; de cada vizinho. Para isto, precisamos calcular os valores de &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt; em função dos &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt;, basta realizar a subtração do próximo vizinho no vetor pelo valor do ângulo do vizinho atual, dessa forma: &amp;lt;math&amp;gt; \theta_i = \psi_{i+1} - \psi_i &amp;lt;/math&amp;gt; com exceção do último vizinho, que será o ângulo dele menos o do primeiro, desta forma a implementação fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		firstAngle=angle[0];	&lt;br /&gt;
		for(j=0;j&amp;lt;k-1;j++){ &lt;br /&gt;
			angle[j]=cos(6.*(angle[j+1]-angle[j]));&lt;br /&gt;
		}		&lt;br /&gt;
		angle[k-1]=cos(6.*(firstAngle+2*PI-angle[k-1]));&lt;br /&gt;
		for(j=0;j&amp;lt;k;j++){ &lt;br /&gt;
			psix[i]+=angle[j]/6.;&lt;br /&gt;
		}	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E então está calculado o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, para facilitar a implementação é recomendado que este algoritmo seja uma função dentro de seu código e desta forma retorne o vetor &amp;quot;psix&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Exemplos ===&lt;br /&gt;
Para o caso de um potencial de Lennard-Jones, é possível observar resultados de mapas de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, isto é, um mapa que mostra para cada partícula o seu valor da medida, da seguinte forma para cada valor de rho:&lt;br /&gt;
[[Image:Psix_1.png|thumb|400px|right|Resultados do valor de psix (em cores) para o caso de um potencial de Lennard Jones para &amp;lt;math&amp;gt; \rho=1.000 &amp;lt;/math&amp;gt;]]&lt;br /&gt;
[[Image:Psix_0360.png|thumb|400px|left|Resultados do valor de psix (em cores) para o caso de um potencial de Lennard Jones para &amp;lt;math&amp;gt; \rho=0.360 &amp;lt;/math&amp;gt;.]]&lt;br /&gt;
[[Image:Psix_0640.png|thumb|400px|center|Resultados do valor de psix (em cores) para o caso de um potencial de Lennard Jones para &amp;lt;math&amp;gt; \rho=0.640 &amp;lt;/math&amp;gt;]]&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
== Aplicações em outras áreas ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Celulasdegrade.png|thumb|300px|right|Mapa neural de células de grade em que o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; equivale 0,99.]]&lt;br /&gt;
&lt;br /&gt;
No estudo do processamento da posição de um animal no cérebro de rato, são observados padrões hexagonais produzidos pelas chamadas &amp;quot;Células de grade&amp;quot;, 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 &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; para determinar a &amp;quot;hexagonalidade&amp;quot; dos disparos, podendo-se realizar estudos da influência desse formato na interpretação geoespacial do animal.&lt;/div&gt;</summary>
		<author><name>Rmoreira</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=672</id>
		<title>Medidas estáticas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=672"/>
		<updated>2016-08-01T18:33:13Z</updated>

		<summary type="html">&lt;p&gt;Rmoreira: /* Psi 6 ( \psi_6 ) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em dinâmica molecular, medidas estáticas são medidas realizadas em um passo específico de tempo da simulação.&lt;br /&gt;
&lt;br /&gt;
=Pair Distribution Function=&lt;br /&gt;
&lt;br /&gt;
[[Image:Gr.png|thumb|300px|right|Representação do cálculo numérico de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
A ''Pair Distribution Function'' , ou &amp;quot;&amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;&amp;quot;, é uma função que estima o quão provável é encontrar duas partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; dentro de um sistema de várias partículas.&lt;br /&gt;
&lt;br /&gt;
Em um sistema de &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas, o &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt; é definido como a média do número de partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
	g(r)=\frac{V}{N^2}\langle\sum_{i=1}^N\sum_{j\neq i}^N\delta(r-|r_i-r_j|)  \rangle&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Numéricamente pode ser interpretado como a média do número de pares de partículas a uma distância entre &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;r+\Delta r&amp;lt;/math&amp;gt; pesado pelo volume/área desta região.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	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]&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde &amp;lt;math&amp;gt;V_t&amp;lt;/math&amp;gt; é o/a volume/área total e &amp;lt;math&amp;gt;rect&amp;lt;/math&amp;gt; é a função retangular.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Em resumo, o &amp;lt;math&amp;gt;g(r,\Delta r)&amp;lt;/math&amp;gt; é a média dos [[Histogramas_e_Densidade_de_Probabilidade|histogramas]] do número de partículas em um ''bin''  de largura &amp;lt;math&amp;gt;\Delta r&amp;lt;/math&amp;gt; a uma &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; feitos para cada partícula no sistema pesado pelo volume/área deste ''bin''.&lt;br /&gt;
&lt;br /&gt;
==== Construção do Código ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Resultados ====&lt;br /&gt;
&lt;br /&gt;
[[Image:GR-D.png|400px|Resultado do cálculo de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
=Referências=&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Psi 6 (&amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;)=&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;caixa&amp;quot; em que as partículas estão localizadas e então localizar possíveis &amp;quot;defeitos&amp;quot; no padrão hexagonal.&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\frac{\pi}{3}&amp;lt;/math&amp;gt;. Buscando uma relação em que esta situação seja a situação de &amp;lt;math&amp;gt;\psi_6 = 1&amp;lt;/math&amp;gt;, é possível definir que o &amp;lt;math&amp;gt;\psi_6 &amp;lt;/math&amp;gt; vale:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\psi_6=\frac{1}{6}\sum_i^ncos(6\theta_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\theta=\frac{\pi}{3}&amp;lt;/math&amp;gt; resulte em um valor de &amp;lt;math&amp;gt;\psi_6=1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Implementação Computacional ==&lt;br /&gt;
[[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;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Encontrando vizinhos ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
O método aqui citado é pouco otimizado, pois utiliza-se um for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;, 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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;) baseando-se em outro valor já calculado, a medida do g(r), desta forma o valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; resultará em um valor razoável ( &amp;gt;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.&lt;br /&gt;
&lt;br /&gt;
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: &amp;quot;neighborsX&amp;quot; (que guarda a posição X do vizinho), &amp;quot;neighborsY&amp;quot;(que guarda a posição Y do vizinho) e &amp;quot;dNeighbors&amp;quot;(que guarda a distância do vizinho) e então faz-se o for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; buscando-se as distância menores que o raio de corte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(i=0;i&amp;lt;NP;i++){&lt;br /&gt;
		xOrg=xx[i];&lt;br /&gt;
		yOrg=yy[i];&lt;br /&gt;
		for(j=0;j&amp;lt;NP;j++){&lt;br /&gt;
			x2=xx[j];&lt;br /&gt;
			y2=yy[j];&lt;br /&gt;
			if(i!=j){&lt;br /&gt;
				if(distance(xOrg,yOrg,x2,y2)&amp;lt;radiusLimit)&lt;br /&gt;
				{	&lt;br /&gt;
					neighborsX[k]=x2;&lt;br /&gt;
					neighborsY[k]=y2;&lt;br /&gt;
					dNeighbors[k]=distance(x2,y2,xOrg,yOrg);&lt;br /&gt;
					k+=1;&lt;br /&gt;
				}&lt;br /&gt;
			}		&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Portanto após esse algoritmo, temos guardadas as posições das partículas mais próximas. É importante ressaltar que o &amp;quot;for&amp;quot; em partícula-teste ainda não foi fechado, e ainda dentro deste mesmo loop serão calculados os valores de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Calculando o Psi 6 ===&lt;br /&gt;
&lt;br /&gt;
Tendo os valores de X e Y dos vizinhos da partícula-teste, podemos proceder para o cálculo do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;. 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 &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt; e será dado pela seguinte relação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\phi_i=arctg\left(\frac{\Delta Y}{\Delta X}\right)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na implementação em código fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(j=0;j&amp;lt;k;j++){&lt;br /&gt;
		delX=neighborsX[j]-xx[i];&lt;br /&gt;
		delY=neighborsY[j]-yy[i];&lt;br /&gt;
&lt;br /&gt;
                //Condições de contorno periódicas&lt;br /&gt;
		delX=delX-rint(delX/Lx)*Lx; &lt;br /&gt;
        	delY=delY-rint(delY/Ly)*Ly;&lt;br /&gt;
                // --- //&lt;br /&gt;
&lt;br /&gt;
		angle[j]=atan2(delY,delX);&lt;br /&gt;
		if (angle[j]&amp;lt;0)&lt;br /&gt;
			angle[j]=2*PI+angle[j];&lt;br /&gt;
                psix[i]=0;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora somente precisa-se realizar um algoritmo que ordene o vetor &amp;quot;angle&amp;quot; do menor para o maior ângulo, utilizando algoritmos de ordenamento (bubblesort, quicksort, etc) desta forma é possível calcular os &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Feito o ordenamento do vetor, basta calcular a média do valor do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; de cada vizinho. Para isto, precisamos calcular os valores de &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt; em função dos &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt;, basta realizar a subtração do próximo vizinho no vetor pelo valor do ângulo do vizinho atual, dessa forma: &amp;lt;math&amp;gt; \theta_i = \psi_{i+1} - \psi_i &amp;lt;/math&amp;gt; com exceção do último vizinho, que será o ângulo dele menos o do primeiro, desta forma a implementação fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		firstAngle=angle[0];	&lt;br /&gt;
		for(j=0;j&amp;lt;k-1;j++){ &lt;br /&gt;
			angle[j]=cos(6.*(angle[j+1]-angle[j]));&lt;br /&gt;
		}		&lt;br /&gt;
		angle[k-1]=cos(6.*(firstAngle+2*PI-angle[k-1]));&lt;br /&gt;
		for(j=0;j&amp;lt;k;j++){ &lt;br /&gt;
			psix[i]+=angle[j]/6.;&lt;br /&gt;
		}	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E então está calculado o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, para facilitar a implementação é recomendado que este algoritmo seja uma função dentro de seu código e desta forma retorne o vetor &amp;quot;psix&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Exemplos ===&lt;br /&gt;
Para o caso de um potencial de Lennard-Jones, é possível observar resultados de mapas de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, isto é, um mapa que mostra para cada partícula o seu valor da medida, da seguinte forma para cada valor de rho:&lt;br /&gt;
[[Image:Psix_1.png|thumb|400px|right|Resultados do valor de psix (em cores) para o caso de um potencial de Lennard Jones para &amp;lt;math&amp;gt; \rho=1.000 &amp;lt;/math&amp;gt;]]&lt;br /&gt;
[[Image:Psix_0360.png|thumb|400px|left|Resultados do valor de psix (em cores) para o caso de um potencial de Lennard Jones para &amp;lt;math&amp;gt; \rho=0.360 &amp;lt;/math&amp;gt;.]]&lt;br /&gt;
[[Image:Psix_0640.png|thumb|400px|center|Resultados do valor de psix (em cores) para o caso de um potencial de Lennard Jones para &amp;lt;math&amp;gt; \rho=0.640 &amp;lt;/math&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
== Aplicações em outras áreas ==&lt;br /&gt;
[[Image:Celulasdegrade.png|thumb|300px|right|Mapa neural de células de grade em que o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; equivale 0,99.]]&lt;br /&gt;
&lt;br /&gt;
No estudo do processamento da posição de um animal no cérebro de rato, são observados padrões hexagonais produzidos pelas chamadas &amp;quot;Células de grade&amp;quot;, 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 &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; para determinar a &amp;quot;hexagonalidade&amp;quot; dos disparos, podendo-se realizar estudos da influência desse formato na interpretação geoespacial do animal.&lt;/div&gt;</summary>
		<author><name>Rmoreira</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=671</id>
		<title>Medidas estáticas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=671"/>
		<updated>2016-08-01T18:32:31Z</updated>

		<summary type="html">&lt;p&gt;Rmoreira: /* Psi 6 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em dinâmica molecular, medidas estáticas são medidas realizadas em um passo específico de tempo da simulação.&lt;br /&gt;
&lt;br /&gt;
=Pair Distribution Function=&lt;br /&gt;
&lt;br /&gt;
[[Image:Gr.png|thumb|300px|right|Representação do cálculo numérico de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
A ''Pair Distribution Function'' , ou &amp;quot;&amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;&amp;quot;, é uma função que estima o quão provável é encontrar duas partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; dentro de um sistema de várias partículas.&lt;br /&gt;
&lt;br /&gt;
Em um sistema de &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas, o &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt; é definido como a média do número de partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
	g(r)=\frac{V}{N^2}\langle\sum_{i=1}^N\sum_{j\neq i}^N\delta(r-|r_i-r_j|)  \rangle&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Numéricamente pode ser interpretado como a média do número de pares de partículas a uma distância entre &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;r+\Delta r&amp;lt;/math&amp;gt; pesado pelo volume/área desta região.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	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]&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde &amp;lt;math&amp;gt;V_t&amp;lt;/math&amp;gt; é o/a volume/área total e &amp;lt;math&amp;gt;rect&amp;lt;/math&amp;gt; é a função retangular.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Em resumo, o &amp;lt;math&amp;gt;g(r,\Delta r)&amp;lt;/math&amp;gt; é a média dos [[Histogramas_e_Densidade_de_Probabilidade|histogramas]] do número de partículas em um ''bin''  de largura &amp;lt;math&amp;gt;\Delta r&amp;lt;/math&amp;gt; a uma &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; feitos para cada partícula no sistema pesado pelo volume/área deste ''bin''.&lt;br /&gt;
&lt;br /&gt;
==== Construção do Código ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Resultados ====&lt;br /&gt;
&lt;br /&gt;
[[Image:GR-D.png|400px|Resultado do cálculo de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
=Referências=&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Psi 6 (&amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;)=&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;caixa&amp;quot; em que as partículas estão localizadas e então localizar possíveis &amp;quot;defeitos&amp;quot; no padrão hexagonal.&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\frac{\pi}{3}&amp;lt;/math&amp;gt;. Buscando uma relação em que esta situação seja a situação de &amp;lt;math&amp;gt;\psi_6 = 1&amp;lt;/math&amp;gt;, é possível definir que o &amp;lt;math&amp;gt;\psi_6 &amp;lt;/math&amp;gt; vale:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\psi_6=\frac{1}{6}\sum_i^ncos(6\theta_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\theta=\frac{\pi}{3}&amp;lt;/math&amp;gt; resulte em um valor de &amp;lt;math&amp;gt;\psi_6=1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Implementação Computacional ==&lt;br /&gt;
[[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;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Encontrando vizinhos ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
O método aqui citado é pouco otimizado, pois utiliza-se um for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;, 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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;) baseando-se em outro valor já calculado, a medida do g(r), desta forma o valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; resultará em um valor razoável ( &amp;gt;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.&lt;br /&gt;
&lt;br /&gt;
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: &amp;quot;neighborsX&amp;quot; (que guarda a posição X do vizinho), &amp;quot;neighborsY&amp;quot;(que guarda a posição Y do vizinho) e &amp;quot;dNeighbors&amp;quot;(que guarda a distância do vizinho) e então faz-se o for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; buscando-se as distância menores que o raio de corte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(i=0;i&amp;lt;NP;i++){&lt;br /&gt;
		xOrg=xx[i];&lt;br /&gt;
		yOrg=yy[i];&lt;br /&gt;
		for(j=0;j&amp;lt;NP;j++){&lt;br /&gt;
			x2=xx[j];&lt;br /&gt;
			y2=yy[j];&lt;br /&gt;
			if(i!=j){&lt;br /&gt;
				if(distance(xOrg,yOrg,x2,y2)&amp;lt;radiusLimit)&lt;br /&gt;
				{	&lt;br /&gt;
					neighborsX[k]=x2;&lt;br /&gt;
					neighborsY[k]=y2;&lt;br /&gt;
					dNeighbors[k]=distance(x2,y2,xOrg,yOrg);&lt;br /&gt;
					k+=1;&lt;br /&gt;
				}&lt;br /&gt;
			}		&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Portanto após esse algoritmo, temos guardadas as posições das partículas mais próximas. É importante ressaltar que o &amp;quot;for&amp;quot; em partícula-teste ainda não foi fechado, e ainda dentro deste mesmo loop serão calculados os valores de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Calculando o Psi 6 ===&lt;br /&gt;
&lt;br /&gt;
Tendo os valores de X e Y dos vizinhos da partícula-teste, podemos proceder para o cálculo do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;. 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 &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt; e será dado pela seguinte relação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\phi_i=arctg\left(\frac{\Delta Y}{\Delta X}\right)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na implementação em código fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(j=0;j&amp;lt;k;j++){&lt;br /&gt;
		delX=neighborsX[j]-xx[i];&lt;br /&gt;
		delY=neighborsY[j]-yy[i];&lt;br /&gt;
&lt;br /&gt;
                //Condições de contorno periódicas&lt;br /&gt;
		delX=delX-rint(delX/Lx)*Lx; &lt;br /&gt;
        	delY=delY-rint(delY/Ly)*Ly;&lt;br /&gt;
                // --- //&lt;br /&gt;
&lt;br /&gt;
		angle[j]=atan2(delY,delX);&lt;br /&gt;
		if (angle[j]&amp;lt;0)&lt;br /&gt;
			angle[j]=2*PI+angle[j];&lt;br /&gt;
                psix[i]=0;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora somente precisa-se realizar um algoritmo que ordene o vetor &amp;quot;angle&amp;quot; do menor para o maior ângulo, utilizando algoritmos de ordenamento (bubblesort, quicksort, etc) desta forma é possível calcular os &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Feito o ordenamento do vetor, basta calcular a média do valor do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; de cada vizinho. Para isto, precisamos calcular os valores de &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt; em função dos &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt;, basta realizar a subtração do próximo vizinho no vetor pelo valor do ângulo do vizinho atual, dessa forma: &amp;lt;math&amp;gt; \theta_i = \psi_{i+1} - \psi_i &amp;lt;/math&amp;gt; com exceção do último vizinho, que será o ângulo dele menos o do primeiro, desta forma a implementação fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		firstAngle=angle[0];	&lt;br /&gt;
		for(j=0;j&amp;lt;k-1;j++){ &lt;br /&gt;
			angle[j]=cos(6.*(angle[j+1]-angle[j]));&lt;br /&gt;
		}		&lt;br /&gt;
		angle[k-1]=cos(6.*(firstAngle+2*PI-angle[k-1]));&lt;br /&gt;
		for(j=0;j&amp;lt;k;j++){ &lt;br /&gt;
			psix[i]+=angle[j]/6.;&lt;br /&gt;
		}	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E então está calculado o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, para facilitar a implementação é recomendado que este algoritmo seja uma função dentro de seu código e desta forma retorne o vetor &amp;quot;psix&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Exemplos ===&lt;br /&gt;
Para o caso de um potencial de Lennard-Jones, é possível observar resultados de mapas de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, isto é, um mapa que mostra para cada partícula o seu valor da medida, da seguinte forma para cada valor de rho:&lt;br /&gt;
[[Image:Psix_1.png|thumb|400px|right|Resultados do valor de psix (em cores) para o caso de um potencial de Lennard Jones para &amp;lt;math&amp;gt; \rho=1.000 &amp;lt;/math&amp;gt;]]&lt;br /&gt;
[[Image:Psix_0360.png|thumb|400px|left|Resultados do valor de psix (em cores) para o caso de um potencial de Lennard Jones para &amp;lt;math&amp;gt; \rho=0.360 &amp;lt;/math&amp;gt;.]]&lt;br /&gt;
[[Image:Psix_0640.png|thumb|400px|center|Resultados do valor de psix (em cores) para o caso de um potencial de Lennard Jones para &amp;lt;math&amp;gt; \rho=0.640 &amp;lt;/math&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
== Aplicações em outras áreas ==&lt;br /&gt;
[[Image:Celulasdegrade.png|thumb|300px|right|Mapa neural de células de grade em que o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; equivale 0,99.]]&lt;br /&gt;
&lt;br /&gt;
No estudo do processamento da posição de um animal no cérebro de rato, são observados padrões hexagonais produzidos pelas chamadas &amp;quot;Células de grade&amp;quot;, 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 &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; para determinar a &amp;quot;hexagonalidade&amp;quot; dos disparos, podendo-se realizar estudos da influência desse formato na interpretação geoespacial do animal.&lt;/div&gt;</summary>
		<author><name>Rmoreira</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=670</id>
		<title>Medidas estáticas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=670"/>
		<updated>2016-08-01T18:30:51Z</updated>

		<summary type="html">&lt;p&gt;Rmoreira: /* Exemplos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em dinâmica molecular, medidas estáticas são medidas realizadas em um passo específico de tempo da simulação.&lt;br /&gt;
&lt;br /&gt;
=Pair Distribution Function=&lt;br /&gt;
&lt;br /&gt;
[[Image:Gr.png|thumb|300px|right|Representação do cálculo numérico de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
A ''Pair Distribution Function'' , ou &amp;quot;&amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;&amp;quot;, é uma função que estima o quão provável é encontrar duas partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; dentro de um sistema de várias partículas.&lt;br /&gt;
&lt;br /&gt;
Em um sistema de &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas, o &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt; é definido como a média do número de partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
	g(r)=\frac{V}{N^2}\langle\sum_{i=1}^N\sum_{j\neq i}^N\delta(r-|r_i-r_j|)  \rangle&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Numéricamente pode ser interpretado como a média do número de pares de partículas a uma distância entre &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;r+\Delta r&amp;lt;/math&amp;gt; pesado pelo volume/área desta região.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	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]&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde &amp;lt;math&amp;gt;V_t&amp;lt;/math&amp;gt; é o/a volume/área total e &amp;lt;math&amp;gt;rect&amp;lt;/math&amp;gt; é a função retangular.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Em resumo, o &amp;lt;math&amp;gt;g(r,\Delta r)&amp;lt;/math&amp;gt; é a média dos [[Histogramas_e_Densidade_de_Probabilidade|histogramas]] do número de partículas em um ''bin''  de largura &amp;lt;math&amp;gt;\Delta r&amp;lt;/math&amp;gt; a uma &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; feitos para cada partícula no sistema pesado pelo volume/área deste ''bin''.&lt;br /&gt;
&lt;br /&gt;
==== Construção do Código ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Resultados ====&lt;br /&gt;
&lt;br /&gt;
[[Image:GR-D.png|400px|Resultado do cálculo de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
=Referências=&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Psi 6=&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;caixa&amp;quot; em que as partículas estão localizadas e então localizar possíveis &amp;quot;defeitos&amp;quot; no padrão hexagonal.&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\frac{\pi}{3}&amp;lt;/math&amp;gt;. Buscando uma relação em que esta situação seja a situação de &amp;lt;math&amp;gt;\psi_6 = 1&amp;lt;/math&amp;gt;, é possível definir que o &amp;lt;math&amp;gt;\psi_6 &amp;lt;/math&amp;gt; vale:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\psi_6=\frac{1}{6}\sum_i^ncos(6\theta_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\theta=\frac{\pi}{3}&amp;lt;/math&amp;gt; resulte em um valor de &amp;lt;math&amp;gt;\psi_6=1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Implementação Computacional ==&lt;br /&gt;
[[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;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Encontrando vizinhos ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
O método aqui citado é pouco otimizado, pois utiliza-se um for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;, 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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;) baseando-se em outro valor já calculado, a medida do g(r), desta forma o valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; resultará em um valor razoável ( &amp;gt;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.&lt;br /&gt;
&lt;br /&gt;
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: &amp;quot;neighborsX&amp;quot; (que guarda a posição X do vizinho), &amp;quot;neighborsY&amp;quot;(que guarda a posição Y do vizinho) e &amp;quot;dNeighbors&amp;quot;(que guarda a distância do vizinho) e então faz-se o for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; buscando-se as distância menores que o raio de corte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(i=0;i&amp;lt;NP;i++){&lt;br /&gt;
		xOrg=xx[i];&lt;br /&gt;
		yOrg=yy[i];&lt;br /&gt;
		for(j=0;j&amp;lt;NP;j++){&lt;br /&gt;
			x2=xx[j];&lt;br /&gt;
			y2=yy[j];&lt;br /&gt;
			if(i!=j){&lt;br /&gt;
				if(distance(xOrg,yOrg,x2,y2)&amp;lt;radiusLimit)&lt;br /&gt;
				{	&lt;br /&gt;
					neighborsX[k]=x2;&lt;br /&gt;
					neighborsY[k]=y2;&lt;br /&gt;
					dNeighbors[k]=distance(x2,y2,xOrg,yOrg);&lt;br /&gt;
					k+=1;&lt;br /&gt;
				}&lt;br /&gt;
			}		&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Portanto após esse algoritmo, temos guardadas as posições das partículas mais próximas. É importante ressaltar que o &amp;quot;for&amp;quot; em partícula-teste ainda não foi fechado, e ainda dentro deste mesmo loop serão calculados os valores de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Calculando o Psi 6 ===&lt;br /&gt;
&lt;br /&gt;
Tendo os valores de X e Y dos vizinhos da partícula-teste, podemos proceder para o cálculo do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;. 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 &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt; e será dado pela seguinte relação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\phi_i=arctg\left(\frac{\Delta Y}{\Delta X}\right)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na implementação em código fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(j=0;j&amp;lt;k;j++){&lt;br /&gt;
		delX=neighborsX[j]-xx[i];&lt;br /&gt;
		delY=neighborsY[j]-yy[i];&lt;br /&gt;
&lt;br /&gt;
                //Condições de contorno periódicas&lt;br /&gt;
		delX=delX-rint(delX/Lx)*Lx; &lt;br /&gt;
        	delY=delY-rint(delY/Ly)*Ly;&lt;br /&gt;
                // --- //&lt;br /&gt;
&lt;br /&gt;
		angle[j]=atan2(delY,delX);&lt;br /&gt;
		if (angle[j]&amp;lt;0)&lt;br /&gt;
			angle[j]=2*PI+angle[j];&lt;br /&gt;
                psix[i]=0;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora somente precisa-se realizar um algoritmo que ordene o vetor &amp;quot;angle&amp;quot; do menor para o maior ângulo, utilizando algoritmos de ordenamento (bubblesort, quicksort, etc) desta forma é possível calcular os &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Feito o ordenamento do vetor, basta calcular a média do valor do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; de cada vizinho. Para isto, precisamos calcular os valores de &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt; em função dos &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt;, basta realizar a subtração do próximo vizinho no vetor pelo valor do ângulo do vizinho atual, dessa forma: &amp;lt;math&amp;gt; \theta_i = \psi_{i+1} - \psi_i &amp;lt;/math&amp;gt; com exceção do último vizinho, que será o ângulo dele menos o do primeiro, desta forma a implementação fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		firstAngle=angle[0];	&lt;br /&gt;
		for(j=0;j&amp;lt;k-1;j++){ &lt;br /&gt;
			angle[j]=cos(6.*(angle[j+1]-angle[j]));&lt;br /&gt;
		}		&lt;br /&gt;
		angle[k-1]=cos(6.*(firstAngle+2*PI-angle[k-1]));&lt;br /&gt;
		for(j=0;j&amp;lt;k;j++){ &lt;br /&gt;
			psix[i]+=angle[j]/6.;&lt;br /&gt;
		}	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E então está calculado o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, para facilitar a implementação é recomendado que este algoritmo seja uma função dentro de seu código e desta forma retorne o vetor &amp;quot;psix&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Exemplos ===&lt;br /&gt;
Para o caso de um potencial de Lennard-Jones, é possível observar resultados de mapas de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, isto é, um mapa que mostra para cada partícula o seu valor da medida, da seguinte forma para cada valor de rho:&lt;br /&gt;
[[Image:Psix_1.png|thumb|400px|right|Resultados do valor de psix (em cores) para o caso de um potencial de Lennard Jones para &amp;lt;math&amp;gt; \rho=1.000 &amp;lt;/math&amp;gt;]]&lt;br /&gt;
[[Image:Psix_0360.png|thumb|400px|left|Resultados do valor de psix (em cores) para o caso de um potencial de Lennard Jones para &amp;lt;math&amp;gt; \rho=0.360 &amp;lt;/math&amp;gt;.]]&lt;br /&gt;
[[Image:Psix_0640.png|thumb|400px|center|Resultados do valor de psix (em cores) para o caso de um potencial de Lennard Jones para &amp;lt;math&amp;gt; \rho=0.640 &amp;lt;/math&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
== Aplicações em outras áreas ==&lt;br /&gt;
[[Image:Celulasdegrade.png|thumb|300px|right|Mapa neural de células de grade em que o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; equivale 0,99.]]&lt;br /&gt;
&lt;br /&gt;
No estudo do processamento da posição de um animal no cérebro de rato, são observados padrões hexagonais produzidos pelas chamadas &amp;quot;Células de grade&amp;quot;, 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 &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; para determinar a &amp;quot;hexagonalidade&amp;quot; dos disparos, podendo-se realizar estudos da influência desse formato na interpretação geoespacial do animal.&lt;/div&gt;</summary>
		<author><name>Rmoreira</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=669</id>
		<title>Medidas estáticas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=669"/>
		<updated>2016-08-01T18:27:02Z</updated>

		<summary type="html">&lt;p&gt;Rmoreira: /* Exemplos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em dinâmica molecular, medidas estáticas são medidas realizadas em um passo específico de tempo da simulação.&lt;br /&gt;
&lt;br /&gt;
=Pair Distribution Function=&lt;br /&gt;
&lt;br /&gt;
[[Image:Gr.png|thumb|300px|right|Representação do cálculo numérico de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
A ''Pair Distribution Function'' , ou &amp;quot;&amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;&amp;quot;, é uma função que estima o quão provável é encontrar duas partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; dentro de um sistema de várias partículas.&lt;br /&gt;
&lt;br /&gt;
Em um sistema de &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas, o &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt; é definido como a média do número de partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
	g(r)=\frac{V}{N^2}\langle\sum_{i=1}^N\sum_{j\neq i}^N\delta(r-|r_i-r_j|)  \rangle&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Numéricamente pode ser interpretado como a média do número de pares de partículas a uma distância entre &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;r+\Delta r&amp;lt;/math&amp;gt; pesado pelo volume/área desta região.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	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]&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde &amp;lt;math&amp;gt;V_t&amp;lt;/math&amp;gt; é o/a volume/área total e &amp;lt;math&amp;gt;rect&amp;lt;/math&amp;gt; é a função retangular.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Em resumo, o &amp;lt;math&amp;gt;g(r,\Delta r)&amp;lt;/math&amp;gt; é a média dos [[Histogramas_e_Densidade_de_Probabilidade|histogramas]] do número de partículas em um ''bin''  de largura &amp;lt;math&amp;gt;\Delta r&amp;lt;/math&amp;gt; a uma &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; feitos para cada partícula no sistema pesado pelo volume/área deste ''bin''.&lt;br /&gt;
&lt;br /&gt;
==== Construção do Código ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Resultados ====&lt;br /&gt;
&lt;br /&gt;
[[Image:GR-D.png|400px|Resultado do cálculo de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
=Referências=&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Psi 6=&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;caixa&amp;quot; em que as partículas estão localizadas e então localizar possíveis &amp;quot;defeitos&amp;quot; no padrão hexagonal.&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\frac{\pi}{3}&amp;lt;/math&amp;gt;. Buscando uma relação em que esta situação seja a situação de &amp;lt;math&amp;gt;\psi_6 = 1&amp;lt;/math&amp;gt;, é possível definir que o &amp;lt;math&amp;gt;\psi_6 &amp;lt;/math&amp;gt; vale:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\psi_6=\frac{1}{6}\sum_i^ncos(6\theta_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\theta=\frac{\pi}{3}&amp;lt;/math&amp;gt; resulte em um valor de &amp;lt;math&amp;gt;\psi_6=1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Implementação Computacional ==&lt;br /&gt;
[[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;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Encontrando vizinhos ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
O método aqui citado é pouco otimizado, pois utiliza-se um for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;, 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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;) baseando-se em outro valor já calculado, a medida do g(r), desta forma o valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; resultará em um valor razoável ( &amp;gt;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.&lt;br /&gt;
&lt;br /&gt;
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: &amp;quot;neighborsX&amp;quot; (que guarda a posição X do vizinho), &amp;quot;neighborsY&amp;quot;(que guarda a posição Y do vizinho) e &amp;quot;dNeighbors&amp;quot;(que guarda a distância do vizinho) e então faz-se o for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; buscando-se as distância menores que o raio de corte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(i=0;i&amp;lt;NP;i++){&lt;br /&gt;
		xOrg=xx[i];&lt;br /&gt;
		yOrg=yy[i];&lt;br /&gt;
		for(j=0;j&amp;lt;NP;j++){&lt;br /&gt;
			x2=xx[j];&lt;br /&gt;
			y2=yy[j];&lt;br /&gt;
			if(i!=j){&lt;br /&gt;
				if(distance(xOrg,yOrg,x2,y2)&amp;lt;radiusLimit)&lt;br /&gt;
				{	&lt;br /&gt;
					neighborsX[k]=x2;&lt;br /&gt;
					neighborsY[k]=y2;&lt;br /&gt;
					dNeighbors[k]=distance(x2,y2,xOrg,yOrg);&lt;br /&gt;
					k+=1;&lt;br /&gt;
				}&lt;br /&gt;
			}		&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Portanto após esse algoritmo, temos guardadas as posições das partículas mais próximas. É importante ressaltar que o &amp;quot;for&amp;quot; em partícula-teste ainda não foi fechado, e ainda dentro deste mesmo loop serão calculados os valores de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Calculando o Psi 6 ===&lt;br /&gt;
&lt;br /&gt;
Tendo os valores de X e Y dos vizinhos da partícula-teste, podemos proceder para o cálculo do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;. 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 &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt; e será dado pela seguinte relação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\phi_i=arctg\left(\frac{\Delta Y}{\Delta X}\right)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na implementação em código fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(j=0;j&amp;lt;k;j++){&lt;br /&gt;
		delX=neighborsX[j]-xx[i];&lt;br /&gt;
		delY=neighborsY[j]-yy[i];&lt;br /&gt;
&lt;br /&gt;
                //Condições de contorno periódicas&lt;br /&gt;
		delX=delX-rint(delX/Lx)*Lx; &lt;br /&gt;
        	delY=delY-rint(delY/Ly)*Ly;&lt;br /&gt;
                // --- //&lt;br /&gt;
&lt;br /&gt;
		angle[j]=atan2(delY,delX);&lt;br /&gt;
		if (angle[j]&amp;lt;0)&lt;br /&gt;
			angle[j]=2*PI+angle[j];&lt;br /&gt;
                psix[i]=0;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora somente precisa-se realizar um algoritmo que ordene o vetor &amp;quot;angle&amp;quot; do menor para o maior ângulo, utilizando algoritmos de ordenamento (bubblesort, quicksort, etc) desta forma é possível calcular os &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Feito o ordenamento do vetor, basta calcular a média do valor do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; de cada vizinho. Para isto, precisamos calcular os valores de &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt; em função dos &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt;, basta realizar a subtração do próximo vizinho no vetor pelo valor do ângulo do vizinho atual, dessa forma: &amp;lt;math&amp;gt; \theta_i = \psi_{i+1} - \psi_i &amp;lt;/math&amp;gt; com exceção do último vizinho, que será o ângulo dele menos o do primeiro, desta forma a implementação fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		firstAngle=angle[0];	&lt;br /&gt;
		for(j=0;j&amp;lt;k-1;j++){ &lt;br /&gt;
			angle[j]=cos(6.*(angle[j+1]-angle[j]));&lt;br /&gt;
		}		&lt;br /&gt;
		angle[k-1]=cos(6.*(firstAngle+2*PI-angle[k-1]));&lt;br /&gt;
		for(j=0;j&amp;lt;k;j++){ &lt;br /&gt;
			psix[i]+=angle[j]/6.;&lt;br /&gt;
		}	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E então está calculado o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, para facilitar a implementação é recomendado que este algoritmo seja uma função dentro de seu código e desta forma retorne o vetor &amp;quot;psix&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Exemplos ===&lt;br /&gt;
&lt;br /&gt;
Para o caso de um potencial de Lennard-Jones, é possível observar resultados de mapas de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, isto é, um mapa que mostra para cada partícula o seu valor da medida, da seguinte forma para cada valor de rho:&lt;br /&gt;
&lt;br /&gt;
[[Image:Psix_0360.png|thumb|400px|left|Resultados para o caso de Lennard Jones para &amp;lt;math&amp;gt; \rho=0.360 &amp;lt;/math&amp;gt;.]]&lt;br /&gt;
[[Image:Psix_0640.png|thumb|400px|Resultados para o caso de Lennard Jones para &amp;lt;math&amp;gt; \rho=0.640 &amp;lt;/math&amp;gt;]]&lt;br /&gt;
[[Image:Psix_1.png|thumb|400px|Resultados para o caso de Lennard Jones para &amp;lt;math&amp;gt; \rho=1.000 &amp;lt;/math&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
== Aplicações em outras áreas ==&lt;br /&gt;
[[Image:Celulasdegrade.png|thumb|300px|right|Mapa neural de células de grade em que o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; equivale 0,99.]]&lt;br /&gt;
&lt;br /&gt;
No estudo do processamento da posição de um animal no cérebro de rato, são observados padrões hexagonais produzidos pelas chamadas &amp;quot;Células de grade&amp;quot;, 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 &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; para determinar a &amp;quot;hexagonalidade&amp;quot; dos disparos, podendo-se realizar estudos da influência desse formato na interpretação geoespacial do animal.&lt;/div&gt;</summary>
		<author><name>Rmoreira</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=668</id>
		<title>Medidas estáticas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=668"/>
		<updated>2016-08-01T18:26:47Z</updated>

		<summary type="html">&lt;p&gt;Rmoreira: /* Exemplos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em dinâmica molecular, medidas estáticas são medidas realizadas em um passo específico de tempo da simulação.&lt;br /&gt;
&lt;br /&gt;
=Pair Distribution Function=&lt;br /&gt;
&lt;br /&gt;
[[Image:Gr.png|thumb|300px|right|Representação do cálculo numérico de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
A ''Pair Distribution Function'' , ou &amp;quot;&amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;&amp;quot;, é uma função que estima o quão provável é encontrar duas partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; dentro de um sistema de várias partículas.&lt;br /&gt;
&lt;br /&gt;
Em um sistema de &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas, o &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt; é definido como a média do número de partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
	g(r)=\frac{V}{N^2}\langle\sum_{i=1}^N\sum_{j\neq i}^N\delta(r-|r_i-r_j|)  \rangle&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Numéricamente pode ser interpretado como a média do número de pares de partículas a uma distância entre &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;r+\Delta r&amp;lt;/math&amp;gt; pesado pelo volume/área desta região.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	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]&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde &amp;lt;math&amp;gt;V_t&amp;lt;/math&amp;gt; é o/a volume/área total e &amp;lt;math&amp;gt;rect&amp;lt;/math&amp;gt; é a função retangular.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Em resumo, o &amp;lt;math&amp;gt;g(r,\Delta r)&amp;lt;/math&amp;gt; é a média dos [[Histogramas_e_Densidade_de_Probabilidade|histogramas]] do número de partículas em um ''bin''  de largura &amp;lt;math&amp;gt;\Delta r&amp;lt;/math&amp;gt; a uma &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; feitos para cada partícula no sistema pesado pelo volume/área deste ''bin''.&lt;br /&gt;
&lt;br /&gt;
==== Construção do Código ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Resultados ====&lt;br /&gt;
&lt;br /&gt;
[[Image:GR-D.png|400px|Resultado do cálculo de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
=Referências=&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Psi 6=&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;caixa&amp;quot; em que as partículas estão localizadas e então localizar possíveis &amp;quot;defeitos&amp;quot; no padrão hexagonal.&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\frac{\pi}{3}&amp;lt;/math&amp;gt;. Buscando uma relação em que esta situação seja a situação de &amp;lt;math&amp;gt;\psi_6 = 1&amp;lt;/math&amp;gt;, é possível definir que o &amp;lt;math&amp;gt;\psi_6 &amp;lt;/math&amp;gt; vale:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\psi_6=\frac{1}{6}\sum_i^ncos(6\theta_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\theta=\frac{\pi}{3}&amp;lt;/math&amp;gt; resulte em um valor de &amp;lt;math&amp;gt;\psi_6=1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Implementação Computacional ==&lt;br /&gt;
[[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;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Encontrando vizinhos ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
O método aqui citado é pouco otimizado, pois utiliza-se um for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;, 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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;) baseando-se em outro valor já calculado, a medida do g(r), desta forma o valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; resultará em um valor razoável ( &amp;gt;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.&lt;br /&gt;
&lt;br /&gt;
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: &amp;quot;neighborsX&amp;quot; (que guarda a posição X do vizinho), &amp;quot;neighborsY&amp;quot;(que guarda a posição Y do vizinho) e &amp;quot;dNeighbors&amp;quot;(que guarda a distância do vizinho) e então faz-se o for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; buscando-se as distância menores que o raio de corte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(i=0;i&amp;lt;NP;i++){&lt;br /&gt;
		xOrg=xx[i];&lt;br /&gt;
		yOrg=yy[i];&lt;br /&gt;
		for(j=0;j&amp;lt;NP;j++){&lt;br /&gt;
			x2=xx[j];&lt;br /&gt;
			y2=yy[j];&lt;br /&gt;
			if(i!=j){&lt;br /&gt;
				if(distance(xOrg,yOrg,x2,y2)&amp;lt;radiusLimit)&lt;br /&gt;
				{	&lt;br /&gt;
					neighborsX[k]=x2;&lt;br /&gt;
					neighborsY[k]=y2;&lt;br /&gt;
					dNeighbors[k]=distance(x2,y2,xOrg,yOrg);&lt;br /&gt;
					k+=1;&lt;br /&gt;
				}&lt;br /&gt;
			}		&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Portanto após esse algoritmo, temos guardadas as posições das partículas mais próximas. É importante ressaltar que o &amp;quot;for&amp;quot; em partícula-teste ainda não foi fechado, e ainda dentro deste mesmo loop serão calculados os valores de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Calculando o Psi 6 ===&lt;br /&gt;
&lt;br /&gt;
Tendo os valores de X e Y dos vizinhos da partícula-teste, podemos proceder para o cálculo do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;. 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 &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt; e será dado pela seguinte relação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\phi_i=arctg\left(\frac{\Delta Y}{\Delta X}\right)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na implementação em código fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(j=0;j&amp;lt;k;j++){&lt;br /&gt;
		delX=neighborsX[j]-xx[i];&lt;br /&gt;
		delY=neighborsY[j]-yy[i];&lt;br /&gt;
&lt;br /&gt;
                //Condições de contorno periódicas&lt;br /&gt;
		delX=delX-rint(delX/Lx)*Lx; &lt;br /&gt;
        	delY=delY-rint(delY/Ly)*Ly;&lt;br /&gt;
                // --- //&lt;br /&gt;
&lt;br /&gt;
		angle[j]=atan2(delY,delX);&lt;br /&gt;
		if (angle[j]&amp;lt;0)&lt;br /&gt;
			angle[j]=2*PI+angle[j];&lt;br /&gt;
                psix[i]=0;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora somente precisa-se realizar um algoritmo que ordene o vetor &amp;quot;angle&amp;quot; do menor para o maior ângulo, utilizando algoritmos de ordenamento (bubblesort, quicksort, etc) desta forma é possível calcular os &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Feito o ordenamento do vetor, basta calcular a média do valor do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; de cada vizinho. Para isto, precisamos calcular os valores de &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt; em função dos &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt;, basta realizar a subtração do próximo vizinho no vetor pelo valor do ângulo do vizinho atual, dessa forma: &amp;lt;math&amp;gt; \theta_i = \psi_{i+1} - \psi_i &amp;lt;/math&amp;gt; com exceção do último vizinho, que será o ângulo dele menos o do primeiro, desta forma a implementação fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		firstAngle=angle[0];	&lt;br /&gt;
		for(j=0;j&amp;lt;k-1;j++){ &lt;br /&gt;
			angle[j]=cos(6.*(angle[j+1]-angle[j]));&lt;br /&gt;
		}		&lt;br /&gt;
		angle[k-1]=cos(6.*(firstAngle+2*PI-angle[k-1]));&lt;br /&gt;
		for(j=0;j&amp;lt;k;j++){ &lt;br /&gt;
			psix[i]+=angle[j]/6.;&lt;br /&gt;
		}	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E então está calculado o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, para facilitar a implementação é recomendado que este algoritmo seja uma função dentro de seu código e desta forma retorne o vetor &amp;quot;psix&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Exemplos ===&lt;br /&gt;
&lt;br /&gt;
Para o caso de um potencial de Lennard-Jones, é possível observar resultados de mapas de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, isto é, um mapa que mostra para cada partícula o seu valor da medida, da seguinte forma para cada valor de rho:&lt;br /&gt;
&lt;br /&gt;
[[Image:Psix_0360.png|thumb|400px|left|Resultados para o caso de Lennard Jones para &amp;lt;math&amp;gt; \rho=0.360 &amp;lt;/math&amp;gt;.]]&lt;br /&gt;
[[Image:Psix_0640.png|thumb|400px|center|Resultados para o caso de Lennard Jones para &amp;lt;math&amp;gt; \rho=0.640 &amp;lt;/math&amp;gt;]]&lt;br /&gt;
[[Image:Psix_1.png|thumb|400px|right|Resultados para o caso de Lennard Jones para &amp;lt;math&amp;gt; \rho=1.000 &amp;lt;/math&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
== Aplicações em outras áreas ==&lt;br /&gt;
[[Image:Celulasdegrade.png|thumb|300px|right|Mapa neural de células de grade em que o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; equivale 0,99.]]&lt;br /&gt;
&lt;br /&gt;
No estudo do processamento da posição de um animal no cérebro de rato, são observados padrões hexagonais produzidos pelas chamadas &amp;quot;Células de grade&amp;quot;, 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 &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; para determinar a &amp;quot;hexagonalidade&amp;quot; dos disparos, podendo-se realizar estudos da influência desse formato na interpretação geoespacial do animal.&lt;/div&gt;</summary>
		<author><name>Rmoreira</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Psix_0640.png&amp;diff=667</id>
		<title>Arquivo:Psix 0640.png</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Psix_0640.png&amp;diff=667"/>
		<updated>2016-08-01T18:26:27Z</updated>

		<summary type="html">&lt;p&gt;Rmoreira: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rmoreira</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Psix_0360.png&amp;diff=666</id>
		<title>Arquivo:Psix 0360.png</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Psix_0360.png&amp;diff=666"/>
		<updated>2016-08-01T18:26:18Z</updated>

		<summary type="html">&lt;p&gt;Rmoreira: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rmoreira</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Psix_1.png&amp;diff=665</id>
		<title>Arquivo:Psix 1.png</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Psix_1.png&amp;diff=665"/>
		<updated>2016-08-01T18:26:01Z</updated>

		<summary type="html">&lt;p&gt;Rmoreira: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rmoreira</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=664</id>
		<title>Medidas estáticas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=664"/>
		<updated>2016-08-01T18:24:04Z</updated>

		<summary type="html">&lt;p&gt;Rmoreira: /* Exemplos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em dinâmica molecular, medidas estáticas são medidas realizadas em um passo específico de tempo da simulação.&lt;br /&gt;
&lt;br /&gt;
=Pair Distribution Function=&lt;br /&gt;
&lt;br /&gt;
[[Image:Gr.png|thumb|300px|right|Representação do cálculo numérico de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
A ''Pair Distribution Function'' , ou &amp;quot;&amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;&amp;quot;, é uma função que estima o quão provável é encontrar duas partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; dentro de um sistema de várias partículas.&lt;br /&gt;
&lt;br /&gt;
Em um sistema de &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas, o &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt; é definido como a média do número de partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
	g(r)=\frac{V}{N^2}\langle\sum_{i=1}^N\sum_{j\neq i}^N\delta(r-|r_i-r_j|)  \rangle&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Numéricamente pode ser interpretado como a média do número de pares de partículas a uma distância entre &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;r+\Delta r&amp;lt;/math&amp;gt; pesado pelo volume/área desta região.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	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]&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde &amp;lt;math&amp;gt;V_t&amp;lt;/math&amp;gt; é o/a volume/área total e &amp;lt;math&amp;gt;rect&amp;lt;/math&amp;gt; é a função retangular.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Em resumo, o &amp;lt;math&amp;gt;g(r,\Delta r)&amp;lt;/math&amp;gt; é a média dos [[Histogramas_e_Densidade_de_Probabilidade|histogramas]] do número de partículas em um ''bin''  de largura &amp;lt;math&amp;gt;\Delta r&amp;lt;/math&amp;gt; a uma &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; feitos para cada partícula no sistema pesado pelo volume/área deste ''bin''.&lt;br /&gt;
&lt;br /&gt;
==== Construção do Código ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Resultados ====&lt;br /&gt;
&lt;br /&gt;
[[Image:GR-D.png|400px|Resultado do cálculo de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
=Referências=&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Psi 6=&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;caixa&amp;quot; em que as partículas estão localizadas e então localizar possíveis &amp;quot;defeitos&amp;quot; no padrão hexagonal.&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\frac{\pi}{3}&amp;lt;/math&amp;gt;. Buscando uma relação em que esta situação seja a situação de &amp;lt;math&amp;gt;\psi_6 = 1&amp;lt;/math&amp;gt;, é possível definir que o &amp;lt;math&amp;gt;\psi_6 &amp;lt;/math&amp;gt; vale:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\psi_6=\frac{1}{6}\sum_i^ncos(6\theta_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\theta=\frac{\pi}{3}&amp;lt;/math&amp;gt; resulte em um valor de &amp;lt;math&amp;gt;\psi_6=1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Implementação Computacional ==&lt;br /&gt;
[[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;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Encontrando vizinhos ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
O método aqui citado é pouco otimizado, pois utiliza-se um for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;, 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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;) baseando-se em outro valor já calculado, a medida do g(r), desta forma o valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; resultará em um valor razoável ( &amp;gt;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.&lt;br /&gt;
&lt;br /&gt;
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: &amp;quot;neighborsX&amp;quot; (que guarda a posição X do vizinho), &amp;quot;neighborsY&amp;quot;(que guarda a posição Y do vizinho) e &amp;quot;dNeighbors&amp;quot;(que guarda a distância do vizinho) e então faz-se o for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; buscando-se as distância menores que o raio de corte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(i=0;i&amp;lt;NP;i++){&lt;br /&gt;
		xOrg=xx[i];&lt;br /&gt;
		yOrg=yy[i];&lt;br /&gt;
		for(j=0;j&amp;lt;NP;j++){&lt;br /&gt;
			x2=xx[j];&lt;br /&gt;
			y2=yy[j];&lt;br /&gt;
			if(i!=j){&lt;br /&gt;
				if(distance(xOrg,yOrg,x2,y2)&amp;lt;radiusLimit)&lt;br /&gt;
				{	&lt;br /&gt;
					neighborsX[k]=x2;&lt;br /&gt;
					neighborsY[k]=y2;&lt;br /&gt;
					dNeighbors[k]=distance(x2,y2,xOrg,yOrg);&lt;br /&gt;
					k+=1;&lt;br /&gt;
				}&lt;br /&gt;
			}		&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Portanto após esse algoritmo, temos guardadas as posições das partículas mais próximas. É importante ressaltar que o &amp;quot;for&amp;quot; em partícula-teste ainda não foi fechado, e ainda dentro deste mesmo loop serão calculados os valores de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Calculando o Psi 6 ===&lt;br /&gt;
&lt;br /&gt;
Tendo os valores de X e Y dos vizinhos da partícula-teste, podemos proceder para o cálculo do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;. 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 &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt; e será dado pela seguinte relação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\phi_i=arctg\left(\frac{\Delta Y}{\Delta X}\right)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na implementação em código fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(j=0;j&amp;lt;k;j++){&lt;br /&gt;
		delX=neighborsX[j]-xx[i];&lt;br /&gt;
		delY=neighborsY[j]-yy[i];&lt;br /&gt;
&lt;br /&gt;
                //Condições de contorno periódicas&lt;br /&gt;
		delX=delX-rint(delX/Lx)*Lx; &lt;br /&gt;
        	delY=delY-rint(delY/Ly)*Ly;&lt;br /&gt;
                // --- //&lt;br /&gt;
&lt;br /&gt;
		angle[j]=atan2(delY,delX);&lt;br /&gt;
		if (angle[j]&amp;lt;0)&lt;br /&gt;
			angle[j]=2*PI+angle[j];&lt;br /&gt;
                psix[i]=0;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora somente precisa-se realizar um algoritmo que ordene o vetor &amp;quot;angle&amp;quot; do menor para o maior ângulo, utilizando algoritmos de ordenamento (bubblesort, quicksort, etc) desta forma é possível calcular os &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Feito o ordenamento do vetor, basta calcular a média do valor do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; de cada vizinho. Para isto, precisamos calcular os valores de &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt; em função dos &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt;, basta realizar a subtração do próximo vizinho no vetor pelo valor do ângulo do vizinho atual, dessa forma: &amp;lt;math&amp;gt; \theta_i = \psi_{i+1} - \psi_i &amp;lt;/math&amp;gt; com exceção do último vizinho, que será o ângulo dele menos o do primeiro, desta forma a implementação fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		firstAngle=angle[0];	&lt;br /&gt;
		for(j=0;j&amp;lt;k-1;j++){ &lt;br /&gt;
			angle[j]=cos(6.*(angle[j+1]-angle[j]));&lt;br /&gt;
		}		&lt;br /&gt;
		angle[k-1]=cos(6.*(firstAngle+2*PI-angle[k-1]));&lt;br /&gt;
		for(j=0;j&amp;lt;k;j++){ &lt;br /&gt;
			psix[i]+=angle[j]/6.;&lt;br /&gt;
		}	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E então está calculado o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, para facilitar a implementação é recomendado que este algoritmo seja uma função dentro de seu código e desta forma retorne o vetor &amp;quot;psix&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Exemplos ===&lt;br /&gt;
&lt;br /&gt;
Para o caso de um potencial de Lennard-Jones, é possível observar resultados de mapas de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, isto é, um mapa que mostra para cada partícula o seu valor da medida, da seguinte forma para cada valor de rho:&lt;br /&gt;
&lt;br /&gt;
[[Image:Psix_0360.eps|thumb|400px|left|Resultados para o caso de Lennard Jones para &amp;lt;math&amp;gt; \rho=0.360 &amp;lt;/math&amp;gt;.]]&lt;br /&gt;
[[Image:Psix_0640.eps|thumb|400px|center|Resultados para o caso de Lennard Jones para &amp;lt;math&amp;gt; \rho=0.640 &amp;lt;/math&amp;gt;]]&lt;br /&gt;
[[Image:Psix_1.eps|thumb|400px|right|Resultados para o caso de Lennard Jones para &amp;lt;math&amp;gt; \rho=1.000 &amp;lt;/math&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
== Aplicações em outras áreas ==&lt;br /&gt;
[[Image:Celulasdegrade.png|thumb|300px|right|Mapa neural de células de grade em que o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; equivale 0,99.]]&lt;br /&gt;
&lt;br /&gt;
No estudo do processamento da posição de um animal no cérebro de rato, são observados padrões hexagonais produzidos pelas chamadas &amp;quot;Células de grade&amp;quot;, 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 &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; para determinar a &amp;quot;hexagonalidade&amp;quot; dos disparos, podendo-se realizar estudos da influência desse formato na interpretação geoespacial do animal.&lt;/div&gt;</summary>
		<author><name>Rmoreira</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=663</id>
		<title>Medidas estáticas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=663"/>
		<updated>2016-08-01T18:23:44Z</updated>

		<summary type="html">&lt;p&gt;Rmoreira: /* Exemplos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em dinâmica molecular, medidas estáticas são medidas realizadas em um passo específico de tempo da simulação.&lt;br /&gt;
&lt;br /&gt;
=Pair Distribution Function=&lt;br /&gt;
&lt;br /&gt;
[[Image:Gr.png|thumb|300px|right|Representação do cálculo numérico de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
A ''Pair Distribution Function'' , ou &amp;quot;&amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;&amp;quot;, é uma função que estima o quão provável é encontrar duas partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; dentro de um sistema de várias partículas.&lt;br /&gt;
&lt;br /&gt;
Em um sistema de &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas, o &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt; é definido como a média do número de partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
	g(r)=\frac{V}{N^2}\langle\sum_{i=1}^N\sum_{j\neq i}^N\delta(r-|r_i-r_j|)  \rangle&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Numéricamente pode ser interpretado como a média do número de pares de partículas a uma distância entre &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;r+\Delta r&amp;lt;/math&amp;gt; pesado pelo volume/área desta região.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	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]&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde &amp;lt;math&amp;gt;V_t&amp;lt;/math&amp;gt; é o/a volume/área total e &amp;lt;math&amp;gt;rect&amp;lt;/math&amp;gt; é a função retangular.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Em resumo, o &amp;lt;math&amp;gt;g(r,\Delta r)&amp;lt;/math&amp;gt; é a média dos [[Histogramas_e_Densidade_de_Probabilidade|histogramas]] do número de partículas em um ''bin''  de largura &amp;lt;math&amp;gt;\Delta r&amp;lt;/math&amp;gt; a uma &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; feitos para cada partícula no sistema pesado pelo volume/área deste ''bin''.&lt;br /&gt;
&lt;br /&gt;
==== Construção do Código ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Resultados ====&lt;br /&gt;
&lt;br /&gt;
[[Image:GR-D.png|400px|Resultado do cálculo de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
=Referências=&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Psi 6=&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;caixa&amp;quot; em que as partículas estão localizadas e então localizar possíveis &amp;quot;defeitos&amp;quot; no padrão hexagonal.&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\frac{\pi}{3}&amp;lt;/math&amp;gt;. Buscando uma relação em que esta situação seja a situação de &amp;lt;math&amp;gt;\psi_6 = 1&amp;lt;/math&amp;gt;, é possível definir que o &amp;lt;math&amp;gt;\psi_6 &amp;lt;/math&amp;gt; vale:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\psi_6=\frac{1}{6}\sum_i^ncos(6\theta_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\theta=\frac{\pi}{3}&amp;lt;/math&amp;gt; resulte em um valor de &amp;lt;math&amp;gt;\psi_6=1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Implementação Computacional ==&lt;br /&gt;
[[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;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Encontrando vizinhos ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
O método aqui citado é pouco otimizado, pois utiliza-se um for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;, 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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;) baseando-se em outro valor já calculado, a medida do g(r), desta forma o valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; resultará em um valor razoável ( &amp;gt;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.&lt;br /&gt;
&lt;br /&gt;
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: &amp;quot;neighborsX&amp;quot; (que guarda a posição X do vizinho), &amp;quot;neighborsY&amp;quot;(que guarda a posição Y do vizinho) e &amp;quot;dNeighbors&amp;quot;(que guarda a distância do vizinho) e então faz-se o for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; buscando-se as distância menores que o raio de corte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(i=0;i&amp;lt;NP;i++){&lt;br /&gt;
		xOrg=xx[i];&lt;br /&gt;
		yOrg=yy[i];&lt;br /&gt;
		for(j=0;j&amp;lt;NP;j++){&lt;br /&gt;
			x2=xx[j];&lt;br /&gt;
			y2=yy[j];&lt;br /&gt;
			if(i!=j){&lt;br /&gt;
				if(distance(xOrg,yOrg,x2,y2)&amp;lt;radiusLimit)&lt;br /&gt;
				{	&lt;br /&gt;
					neighborsX[k]=x2;&lt;br /&gt;
					neighborsY[k]=y2;&lt;br /&gt;
					dNeighbors[k]=distance(x2,y2,xOrg,yOrg);&lt;br /&gt;
					k+=1;&lt;br /&gt;
				}&lt;br /&gt;
			}		&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Portanto após esse algoritmo, temos guardadas as posições das partículas mais próximas. É importante ressaltar que o &amp;quot;for&amp;quot; em partícula-teste ainda não foi fechado, e ainda dentro deste mesmo loop serão calculados os valores de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Calculando o Psi 6 ===&lt;br /&gt;
&lt;br /&gt;
Tendo os valores de X e Y dos vizinhos da partícula-teste, podemos proceder para o cálculo do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;. 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 &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt; e será dado pela seguinte relação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\phi_i=arctg\left(\frac{\Delta Y}{\Delta X}\right)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na implementação em código fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(j=0;j&amp;lt;k;j++){&lt;br /&gt;
		delX=neighborsX[j]-xx[i];&lt;br /&gt;
		delY=neighborsY[j]-yy[i];&lt;br /&gt;
&lt;br /&gt;
                //Condições de contorno periódicas&lt;br /&gt;
		delX=delX-rint(delX/Lx)*Lx; &lt;br /&gt;
        	delY=delY-rint(delY/Ly)*Ly;&lt;br /&gt;
                // --- //&lt;br /&gt;
&lt;br /&gt;
		angle[j]=atan2(delY,delX);&lt;br /&gt;
		if (angle[j]&amp;lt;0)&lt;br /&gt;
			angle[j]=2*PI+angle[j];&lt;br /&gt;
                psix[i]=0;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora somente precisa-se realizar um algoritmo que ordene o vetor &amp;quot;angle&amp;quot; do menor para o maior ângulo, utilizando algoritmos de ordenamento (bubblesort, quicksort, etc) desta forma é possível calcular os &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Feito o ordenamento do vetor, basta calcular a média do valor do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; de cada vizinho. Para isto, precisamos calcular os valores de &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt; em função dos &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt;, basta realizar a subtração do próximo vizinho no vetor pelo valor do ângulo do vizinho atual, dessa forma: &amp;lt;math&amp;gt; \theta_i = \psi_{i+1} - \psi_i &amp;lt;/math&amp;gt; com exceção do último vizinho, que será o ângulo dele menos o do primeiro, desta forma a implementação fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		firstAngle=angle[0];	&lt;br /&gt;
		for(j=0;j&amp;lt;k-1;j++){ &lt;br /&gt;
			angle[j]=cos(6.*(angle[j+1]-angle[j]));&lt;br /&gt;
		}		&lt;br /&gt;
		angle[k-1]=cos(6.*(firstAngle+2*PI-angle[k-1]));&lt;br /&gt;
		for(j=0;j&amp;lt;k;j++){ &lt;br /&gt;
			psix[i]+=angle[j]/6.;&lt;br /&gt;
		}	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E então está calculado o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, para facilitar a implementação é recomendado que este algoritmo seja uma função dentro de seu código e desta forma retorne o vetor &amp;quot;psix&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Exemplos ===&lt;br /&gt;
[[Image:Psix_0360.eps|thumb|400px|left|Resultados para o caso de Lennard Jones para &amp;lt;math&amp;gt; \rho=0.360 &amp;lt;/math&amp;gt;.]]&lt;br /&gt;
[[Image:Psix_0640.eps|thumb|400px|center|Resultados para o caso de Lennard Jones para &amp;lt;math&amp;gt; \rho=0.640 &amp;lt;/math&amp;gt;]]&lt;br /&gt;
[[Image:Psix_1.eps|thumb|400px|right|Resultados para o caso de Lennard Jones para &amp;lt;math&amp;gt; \rho=1.000 &amp;lt;/math&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Para o caso de um potencial de Lennard-Jones, é possível observar resultados de mapas de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, isto é, um mapa que mostra para cada partícula o seu valor da medida, da seguinte forma para cada valor de rho:&lt;br /&gt;
&lt;br /&gt;
== Aplicações em outras áreas ==&lt;br /&gt;
[[Image:Celulasdegrade.png|thumb|300px|right|Mapa neural de células de grade em que o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; equivale 0,99.]]&lt;br /&gt;
&lt;br /&gt;
No estudo do processamento da posição de um animal no cérebro de rato, são observados padrões hexagonais produzidos pelas chamadas &amp;quot;Células de grade&amp;quot;, 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 &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; para determinar a &amp;quot;hexagonalidade&amp;quot; dos disparos, podendo-se realizar estudos da influência desse formato na interpretação geoespacial do animal.&lt;/div&gt;</summary>
		<author><name>Rmoreira</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=662</id>
		<title>Medidas estáticas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=662"/>
		<updated>2016-08-01T18:20:47Z</updated>

		<summary type="html">&lt;p&gt;Rmoreira: /* Aplicações em outras áreas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em dinâmica molecular, medidas estáticas são medidas realizadas em um passo específico de tempo da simulação.&lt;br /&gt;
&lt;br /&gt;
=Pair Distribution Function=&lt;br /&gt;
&lt;br /&gt;
[[Image:Gr.png|thumb|300px|right|Representação do cálculo numérico de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
A ''Pair Distribution Function'' , ou &amp;quot;&amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;&amp;quot;, é uma função que estima o quão provável é encontrar duas partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; dentro de um sistema de várias partículas.&lt;br /&gt;
&lt;br /&gt;
Em um sistema de &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas, o &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt; é definido como a média do número de partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
	g(r)=\frac{V}{N^2}\langle\sum_{i=1}^N\sum_{j\neq i}^N\delta(r-|r_i-r_j|)  \rangle&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Numéricamente pode ser interpretado como a média do número de pares de partículas a uma distância entre &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;r+\Delta r&amp;lt;/math&amp;gt; pesado pelo volume/área desta região.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	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]&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde &amp;lt;math&amp;gt;V_t&amp;lt;/math&amp;gt; é o/a volume/área total e &amp;lt;math&amp;gt;rect&amp;lt;/math&amp;gt; é a função retangular.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Em resumo, o &amp;lt;math&amp;gt;g(r,\Delta r)&amp;lt;/math&amp;gt; é a média dos [[Histogramas_e_Densidade_de_Probabilidade|histogramas]] do número de partículas em um ''bin''  de largura &amp;lt;math&amp;gt;\Delta r&amp;lt;/math&amp;gt; a uma &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; feitos para cada partícula no sistema pesado pelo volume/área deste ''bin''.&lt;br /&gt;
&lt;br /&gt;
==== Construção do Código ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Resultados ====&lt;br /&gt;
&lt;br /&gt;
[[Image:GR-D.png|400px|Resultado do cálculo de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
=Referências=&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Psi 6=&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;caixa&amp;quot; em que as partículas estão localizadas e então localizar possíveis &amp;quot;defeitos&amp;quot; no padrão hexagonal.&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\frac{\pi}{3}&amp;lt;/math&amp;gt;. Buscando uma relação em que esta situação seja a situação de &amp;lt;math&amp;gt;\psi_6 = 1&amp;lt;/math&amp;gt;, é possível definir que o &amp;lt;math&amp;gt;\psi_6 &amp;lt;/math&amp;gt; vale:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\psi_6=\frac{1}{6}\sum_i^ncos(6\theta_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\theta=\frac{\pi}{3}&amp;lt;/math&amp;gt; resulte em um valor de &amp;lt;math&amp;gt;\psi_6=1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Implementação Computacional ==&lt;br /&gt;
[[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;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Encontrando vizinhos ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
O método aqui citado é pouco otimizado, pois utiliza-se um for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;, 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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;) baseando-se em outro valor já calculado, a medida do g(r), desta forma o valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; resultará em um valor razoável ( &amp;gt;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.&lt;br /&gt;
&lt;br /&gt;
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: &amp;quot;neighborsX&amp;quot; (que guarda a posição X do vizinho), &amp;quot;neighborsY&amp;quot;(que guarda a posição Y do vizinho) e &amp;quot;dNeighbors&amp;quot;(que guarda a distância do vizinho) e então faz-se o for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; buscando-se as distância menores que o raio de corte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(i=0;i&amp;lt;NP;i++){&lt;br /&gt;
		xOrg=xx[i];&lt;br /&gt;
		yOrg=yy[i];&lt;br /&gt;
		for(j=0;j&amp;lt;NP;j++){&lt;br /&gt;
			x2=xx[j];&lt;br /&gt;
			y2=yy[j];&lt;br /&gt;
			if(i!=j){&lt;br /&gt;
				if(distance(xOrg,yOrg,x2,y2)&amp;lt;radiusLimit)&lt;br /&gt;
				{	&lt;br /&gt;
					neighborsX[k]=x2;&lt;br /&gt;
					neighborsY[k]=y2;&lt;br /&gt;
					dNeighbors[k]=distance(x2,y2,xOrg,yOrg);&lt;br /&gt;
					k+=1;&lt;br /&gt;
				}&lt;br /&gt;
			}		&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Portanto após esse algoritmo, temos guardadas as posições das partículas mais próximas. É importante ressaltar que o &amp;quot;for&amp;quot; em partícula-teste ainda não foi fechado, e ainda dentro deste mesmo loop serão calculados os valores de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Calculando o Psi 6 ===&lt;br /&gt;
&lt;br /&gt;
Tendo os valores de X e Y dos vizinhos da partícula-teste, podemos proceder para o cálculo do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;. 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 &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt; e será dado pela seguinte relação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\phi_i=arctg\left(\frac{\Delta Y}{\Delta X}\right)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na implementação em código fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(j=0;j&amp;lt;k;j++){&lt;br /&gt;
		delX=neighborsX[j]-xx[i];&lt;br /&gt;
		delY=neighborsY[j]-yy[i];&lt;br /&gt;
&lt;br /&gt;
                //Condições de contorno periódicas&lt;br /&gt;
		delX=delX-rint(delX/Lx)*Lx; &lt;br /&gt;
        	delY=delY-rint(delY/Ly)*Ly;&lt;br /&gt;
                // --- //&lt;br /&gt;
&lt;br /&gt;
		angle[j]=atan2(delY,delX);&lt;br /&gt;
		if (angle[j]&amp;lt;0)&lt;br /&gt;
			angle[j]=2*PI+angle[j];&lt;br /&gt;
                psix[i]=0;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora somente precisa-se realizar um algoritmo que ordene o vetor &amp;quot;angle&amp;quot; do menor para o maior ângulo, utilizando algoritmos de ordenamento (bubblesort, quicksort, etc) desta forma é possível calcular os &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Feito o ordenamento do vetor, basta calcular a média do valor do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; de cada vizinho. Para isto, precisamos calcular os valores de &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt; em função dos &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt;, basta realizar a subtração do próximo vizinho no vetor pelo valor do ângulo do vizinho atual, dessa forma: &amp;lt;math&amp;gt; \theta_i = \psi_{i+1} - \psi_i &amp;lt;/math&amp;gt; com exceção do último vizinho, que será o ângulo dele menos o do primeiro, desta forma a implementação fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		firstAngle=angle[0];	&lt;br /&gt;
		for(j=0;j&amp;lt;k-1;j++){ &lt;br /&gt;
			angle[j]=cos(6.*(angle[j+1]-angle[j]));&lt;br /&gt;
		}		&lt;br /&gt;
		angle[k-1]=cos(6.*(firstAngle+2*PI-angle[k-1]));&lt;br /&gt;
		for(j=0;j&amp;lt;k;j++){ &lt;br /&gt;
			psix[i]+=angle[j]/6.;&lt;br /&gt;
		}	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E então está calculado o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, para facilitar a implementação é recomendado que este algoritmo seja uma função dentro de seu código e desta forma retorne o vetor &amp;quot;psix&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Exemplos ===&lt;br /&gt;
&lt;br /&gt;
Para o caso de um potencial de Lennard-Jones, é possível observar resultados de mapas de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, isto é, um mapa que mostra para cada partícula o seu valor da medida, da seguinte forma para cada valor de rho:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Aplicações em outras áreas ==&lt;br /&gt;
[[Image:Celulasdegrade.png|thumb|300px|right|Mapa neural de células de grade em que o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; equivale 0,99.]]&lt;br /&gt;
&lt;br /&gt;
No estudo do processamento da posição de um animal no cérebro de rato, são observados padrões hexagonais produzidos pelas chamadas &amp;quot;Células de grade&amp;quot;, 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 &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; para determinar a &amp;quot;hexagonalidade&amp;quot; dos disparos, podendo-se realizar estudos da influência desse formato na interpretação geoespacial do animal.&lt;/div&gt;</summary>
		<author><name>Rmoreira</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=661</id>
		<title>Medidas estáticas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=661"/>
		<updated>2016-08-01T18:20:06Z</updated>

		<summary type="html">&lt;p&gt;Rmoreira: /* Aplicações em outras áreas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em dinâmica molecular, medidas estáticas são medidas realizadas em um passo específico de tempo da simulação.&lt;br /&gt;
&lt;br /&gt;
=Pair Distribution Function=&lt;br /&gt;
&lt;br /&gt;
[[Image:Gr.png|thumb|300px|right|Representação do cálculo numérico de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
A ''Pair Distribution Function'' , ou &amp;quot;&amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;&amp;quot;, é uma função que estima o quão provável é encontrar duas partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; dentro de um sistema de várias partículas.&lt;br /&gt;
&lt;br /&gt;
Em um sistema de &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas, o &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt; é definido como a média do número de partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
	g(r)=\frac{V}{N^2}\langle\sum_{i=1}^N\sum_{j\neq i}^N\delta(r-|r_i-r_j|)  \rangle&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Numéricamente pode ser interpretado como a média do número de pares de partículas a uma distância entre &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;r+\Delta r&amp;lt;/math&amp;gt; pesado pelo volume/área desta região.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	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]&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde &amp;lt;math&amp;gt;V_t&amp;lt;/math&amp;gt; é o/a volume/área total e &amp;lt;math&amp;gt;rect&amp;lt;/math&amp;gt; é a função retangular.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Em resumo, o &amp;lt;math&amp;gt;g(r,\Delta r)&amp;lt;/math&amp;gt; é a média dos [[Histogramas_e_Densidade_de_Probabilidade|histogramas]] do número de partículas em um ''bin''  de largura &amp;lt;math&amp;gt;\Delta r&amp;lt;/math&amp;gt; a uma &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; feitos para cada partícula no sistema pesado pelo volume/área deste ''bin''.&lt;br /&gt;
&lt;br /&gt;
==== Construção do Código ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Resultados ====&lt;br /&gt;
&lt;br /&gt;
[[Image:GR-D.png|400px|Resultado do cálculo de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
=Referências=&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Psi 6=&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;caixa&amp;quot; em que as partículas estão localizadas e então localizar possíveis &amp;quot;defeitos&amp;quot; no padrão hexagonal.&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\frac{\pi}{3}&amp;lt;/math&amp;gt;. Buscando uma relação em que esta situação seja a situação de &amp;lt;math&amp;gt;\psi_6 = 1&amp;lt;/math&amp;gt;, é possível definir que o &amp;lt;math&amp;gt;\psi_6 &amp;lt;/math&amp;gt; vale:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\psi_6=\frac{1}{6}\sum_i^ncos(6\theta_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\theta=\frac{\pi}{3}&amp;lt;/math&amp;gt; resulte em um valor de &amp;lt;math&amp;gt;\psi_6=1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Implementação Computacional ==&lt;br /&gt;
[[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;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Encontrando vizinhos ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
O método aqui citado é pouco otimizado, pois utiliza-se um for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;, 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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;) baseando-se em outro valor já calculado, a medida do g(r), desta forma o valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; resultará em um valor razoável ( &amp;gt;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.&lt;br /&gt;
&lt;br /&gt;
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: &amp;quot;neighborsX&amp;quot; (que guarda a posição X do vizinho), &amp;quot;neighborsY&amp;quot;(que guarda a posição Y do vizinho) e &amp;quot;dNeighbors&amp;quot;(que guarda a distância do vizinho) e então faz-se o for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; buscando-se as distância menores que o raio de corte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(i=0;i&amp;lt;NP;i++){&lt;br /&gt;
		xOrg=xx[i];&lt;br /&gt;
		yOrg=yy[i];&lt;br /&gt;
		for(j=0;j&amp;lt;NP;j++){&lt;br /&gt;
			x2=xx[j];&lt;br /&gt;
			y2=yy[j];&lt;br /&gt;
			if(i!=j){&lt;br /&gt;
				if(distance(xOrg,yOrg,x2,y2)&amp;lt;radiusLimit)&lt;br /&gt;
				{	&lt;br /&gt;
					neighborsX[k]=x2;&lt;br /&gt;
					neighborsY[k]=y2;&lt;br /&gt;
					dNeighbors[k]=distance(x2,y2,xOrg,yOrg);&lt;br /&gt;
					k+=1;&lt;br /&gt;
				}&lt;br /&gt;
			}		&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Portanto após esse algoritmo, temos guardadas as posições das partículas mais próximas. É importante ressaltar que o &amp;quot;for&amp;quot; em partícula-teste ainda não foi fechado, e ainda dentro deste mesmo loop serão calculados os valores de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Calculando o Psi 6 ===&lt;br /&gt;
&lt;br /&gt;
Tendo os valores de X e Y dos vizinhos da partícula-teste, podemos proceder para o cálculo do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;. 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 &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt; e será dado pela seguinte relação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\phi_i=arctg\left(\frac{\Delta Y}{\Delta X}\right)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na implementação em código fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(j=0;j&amp;lt;k;j++){&lt;br /&gt;
		delX=neighborsX[j]-xx[i];&lt;br /&gt;
		delY=neighborsY[j]-yy[i];&lt;br /&gt;
&lt;br /&gt;
                //Condições de contorno periódicas&lt;br /&gt;
		delX=delX-rint(delX/Lx)*Lx; &lt;br /&gt;
        	delY=delY-rint(delY/Ly)*Ly;&lt;br /&gt;
                // --- //&lt;br /&gt;
&lt;br /&gt;
		angle[j]=atan2(delY,delX);&lt;br /&gt;
		if (angle[j]&amp;lt;0)&lt;br /&gt;
			angle[j]=2*PI+angle[j];&lt;br /&gt;
                psix[i]=0;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora somente precisa-se realizar um algoritmo que ordene o vetor &amp;quot;angle&amp;quot; do menor para o maior ângulo, utilizando algoritmos de ordenamento (bubblesort, quicksort, etc) desta forma é possível calcular os &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Feito o ordenamento do vetor, basta calcular a média do valor do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; de cada vizinho. Para isto, precisamos calcular os valores de &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt; em função dos &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt;, basta realizar a subtração do próximo vizinho no vetor pelo valor do ângulo do vizinho atual, dessa forma: &amp;lt;math&amp;gt; \theta_i = \psi_{i+1} - \psi_i &amp;lt;/math&amp;gt; com exceção do último vizinho, que será o ângulo dele menos o do primeiro, desta forma a implementação fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		firstAngle=angle[0];	&lt;br /&gt;
		for(j=0;j&amp;lt;k-1;j++){ &lt;br /&gt;
			angle[j]=cos(6.*(angle[j+1]-angle[j]));&lt;br /&gt;
		}		&lt;br /&gt;
		angle[k-1]=cos(6.*(firstAngle+2*PI-angle[k-1]));&lt;br /&gt;
		for(j=0;j&amp;lt;k;j++){ &lt;br /&gt;
			psix[i]+=angle[j]/6.;&lt;br /&gt;
		}	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E então está calculado o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, para facilitar a implementação é recomendado que este algoritmo seja uma função dentro de seu código e desta forma retorne o vetor &amp;quot;psix&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Exemplos ===&lt;br /&gt;
&lt;br /&gt;
Para o caso de um potencial de Lennard-Jones, é possível observar resultados de mapas de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, isto é, um mapa que mostra para cada partícula o seu valor da medida, da seguinte forma para cada valor de rho:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Aplicações em outras áreas ==&lt;br /&gt;
[[Image:Celulasdegrade.png|thumb|300px|right|Mapa neural de células de grade em que o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; equivale 0,99.]]&lt;br /&gt;
&lt;br /&gt;
No estudo do processamento da posição de um animal no cérebro de rato, são observados padrões hexagonais produzidos pelas chamadas &amp;quot;Células de grade&amp;quot;, 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 &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; para determinar a &amp;quot;hexagonalidade&amp;quot; dos disparos desses neurônios, podendo-se realizar estudos da influência desse formato na interpretação geoespacial do animal.&lt;/div&gt;</summary>
		<author><name>Rmoreira</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=660</id>
		<title>Medidas estáticas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=660"/>
		<updated>2016-08-01T18:19:30Z</updated>

		<summary type="html">&lt;p&gt;Rmoreira: /* Aplicações em outras áreas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em dinâmica molecular, medidas estáticas são medidas realizadas em um passo específico de tempo da simulação.&lt;br /&gt;
&lt;br /&gt;
=Pair Distribution Function=&lt;br /&gt;
&lt;br /&gt;
[[Image:Gr.png|thumb|300px|right|Representação do cálculo numérico de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
A ''Pair Distribution Function'' , ou &amp;quot;&amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;&amp;quot;, é uma função que estima o quão provável é encontrar duas partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; dentro de um sistema de várias partículas.&lt;br /&gt;
&lt;br /&gt;
Em um sistema de &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas, o &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt; é definido como a média do número de partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
	g(r)=\frac{V}{N^2}\langle\sum_{i=1}^N\sum_{j\neq i}^N\delta(r-|r_i-r_j|)  \rangle&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Numéricamente pode ser interpretado como a média do número de pares de partículas a uma distância entre &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;r+\Delta r&amp;lt;/math&amp;gt; pesado pelo volume/área desta região.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	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]&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde &amp;lt;math&amp;gt;V_t&amp;lt;/math&amp;gt; é o/a volume/área total e &amp;lt;math&amp;gt;rect&amp;lt;/math&amp;gt; é a função retangular.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Em resumo, o &amp;lt;math&amp;gt;g(r,\Delta r)&amp;lt;/math&amp;gt; é a média dos [[Histogramas_e_Densidade_de_Probabilidade|histogramas]] do número de partículas em um ''bin''  de largura &amp;lt;math&amp;gt;\Delta r&amp;lt;/math&amp;gt; a uma &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; feitos para cada partícula no sistema pesado pelo volume/área deste ''bin''.&lt;br /&gt;
&lt;br /&gt;
==== Construção do Código ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Resultados ====&lt;br /&gt;
&lt;br /&gt;
[[Image:GR-D.png|400px|Resultado do cálculo de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
=Referências=&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Psi 6=&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;caixa&amp;quot; em que as partículas estão localizadas e então localizar possíveis &amp;quot;defeitos&amp;quot; no padrão hexagonal.&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\frac{\pi}{3}&amp;lt;/math&amp;gt;. Buscando uma relação em que esta situação seja a situação de &amp;lt;math&amp;gt;\psi_6 = 1&amp;lt;/math&amp;gt;, é possível definir que o &amp;lt;math&amp;gt;\psi_6 &amp;lt;/math&amp;gt; vale:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\psi_6=\frac{1}{6}\sum_i^ncos(6\theta_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\theta=\frac{\pi}{3}&amp;lt;/math&amp;gt; resulte em um valor de &amp;lt;math&amp;gt;\psi_6=1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Implementação Computacional ==&lt;br /&gt;
[[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;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Encontrando vizinhos ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
O método aqui citado é pouco otimizado, pois utiliza-se um for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;, 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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;) baseando-se em outro valor já calculado, a medida do g(r), desta forma o valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; resultará em um valor razoável ( &amp;gt;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.&lt;br /&gt;
&lt;br /&gt;
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: &amp;quot;neighborsX&amp;quot; (que guarda a posição X do vizinho), &amp;quot;neighborsY&amp;quot;(que guarda a posição Y do vizinho) e &amp;quot;dNeighbors&amp;quot;(que guarda a distância do vizinho) e então faz-se o for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; buscando-se as distância menores que o raio de corte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(i=0;i&amp;lt;NP;i++){&lt;br /&gt;
		xOrg=xx[i];&lt;br /&gt;
		yOrg=yy[i];&lt;br /&gt;
		for(j=0;j&amp;lt;NP;j++){&lt;br /&gt;
			x2=xx[j];&lt;br /&gt;
			y2=yy[j];&lt;br /&gt;
			if(i!=j){&lt;br /&gt;
				if(distance(xOrg,yOrg,x2,y2)&amp;lt;radiusLimit)&lt;br /&gt;
				{	&lt;br /&gt;
					neighborsX[k]=x2;&lt;br /&gt;
					neighborsY[k]=y2;&lt;br /&gt;
					dNeighbors[k]=distance(x2,y2,xOrg,yOrg);&lt;br /&gt;
					k+=1;&lt;br /&gt;
				}&lt;br /&gt;
			}		&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Portanto após esse algoritmo, temos guardadas as posições das partículas mais próximas. É importante ressaltar que o &amp;quot;for&amp;quot; em partícula-teste ainda não foi fechado, e ainda dentro deste mesmo loop serão calculados os valores de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Calculando o Psi 6 ===&lt;br /&gt;
&lt;br /&gt;
Tendo os valores de X e Y dos vizinhos da partícula-teste, podemos proceder para o cálculo do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;. 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 &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt; e será dado pela seguinte relação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\phi_i=arctg\left(\frac{\Delta Y}{\Delta X}\right)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na implementação em código fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(j=0;j&amp;lt;k;j++){&lt;br /&gt;
		delX=neighborsX[j]-xx[i];&lt;br /&gt;
		delY=neighborsY[j]-yy[i];&lt;br /&gt;
&lt;br /&gt;
                //Condições de contorno periódicas&lt;br /&gt;
		delX=delX-rint(delX/Lx)*Lx; &lt;br /&gt;
        	delY=delY-rint(delY/Ly)*Ly;&lt;br /&gt;
                // --- //&lt;br /&gt;
&lt;br /&gt;
		angle[j]=atan2(delY,delX);&lt;br /&gt;
		if (angle[j]&amp;lt;0)&lt;br /&gt;
			angle[j]=2*PI+angle[j];&lt;br /&gt;
                psix[i]=0;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora somente precisa-se realizar um algoritmo que ordene o vetor &amp;quot;angle&amp;quot; do menor para o maior ângulo, utilizando algoritmos de ordenamento (bubblesort, quicksort, etc) desta forma é possível calcular os &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Feito o ordenamento do vetor, basta calcular a média do valor do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; de cada vizinho. Para isto, precisamos calcular os valores de &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt; em função dos &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt;, basta realizar a subtração do próximo vizinho no vetor pelo valor do ângulo do vizinho atual, dessa forma: &amp;lt;math&amp;gt; \theta_i = \psi_{i+1} - \psi_i &amp;lt;/math&amp;gt; com exceção do último vizinho, que será o ângulo dele menos o do primeiro, desta forma a implementação fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		firstAngle=angle[0];	&lt;br /&gt;
		for(j=0;j&amp;lt;k-1;j++){ &lt;br /&gt;
			angle[j]=cos(6.*(angle[j+1]-angle[j]));&lt;br /&gt;
		}		&lt;br /&gt;
		angle[k-1]=cos(6.*(firstAngle+2*PI-angle[k-1]));&lt;br /&gt;
		for(j=0;j&amp;lt;k;j++){ &lt;br /&gt;
			psix[i]+=angle[j]/6.;&lt;br /&gt;
		}	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E então está calculado o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, para facilitar a implementação é recomendado que este algoritmo seja uma função dentro de seu código e desta forma retorne o vetor &amp;quot;psix&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Exemplos ===&lt;br /&gt;
&lt;br /&gt;
Para o caso de um potencial de Lennard-Jones, é possível observar resultados de mapas de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, isto é, um mapa que mostra para cada partícula o seu valor da medida, da seguinte forma para cada valor de rho:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Aplicações em outras áreas ==&lt;br /&gt;
&lt;br /&gt;
No estudo do processamento da posição de um animal no cérebro de rato, são observados padrões hexagonais produzidos pelas chamadas &amp;quot;Células de grade&amp;quot;, 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 &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; para determinar a &amp;quot;hexagonalidade&amp;quot; dos disparos desses neurônios, podendo-se realizar estudos da influência desse formato na interpretação geoespacial do animal.&lt;br /&gt;
[[Image:Celulasdegrade.png|thumb|400px|center|Mapa neural de células de grade em que o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; equivale 0,99.]]&lt;/div&gt;</summary>
		<author><name>Rmoreira</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Celulasdegrade.png&amp;diff=659</id>
		<title>Arquivo:Celulasdegrade.png</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Celulasdegrade.png&amp;diff=659"/>
		<updated>2016-08-01T18:17:09Z</updated>

		<summary type="html">&lt;p&gt;Rmoreira: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rmoreira</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Screenshot_from_2016-08-01_15-06-50.png&amp;diff=658</id>
		<title>Arquivo:Screenshot from 2016-08-01 15-06-50.png</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Screenshot_from_2016-08-01_15-06-50.png&amp;diff=658"/>
		<updated>2016-08-01T18:15:23Z</updated>

		<summary type="html">&lt;p&gt;Rmoreira: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rmoreira</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=657</id>
		<title>Medidas estáticas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=657"/>
		<updated>2016-08-01T18:13:59Z</updated>

		<summary type="html">&lt;p&gt;Rmoreira: /* Calculando o Psi 6 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em dinâmica molecular, medidas estáticas são medidas realizadas em um passo específico de tempo da simulação.&lt;br /&gt;
&lt;br /&gt;
=Pair Distribution Function=&lt;br /&gt;
&lt;br /&gt;
[[Image:Gr.png|thumb|300px|right|Representação do cálculo numérico de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
A ''Pair Distribution Function'' , ou &amp;quot;&amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;&amp;quot;, é uma função que estima o quão provável é encontrar duas partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; dentro de um sistema de várias partículas.&lt;br /&gt;
&lt;br /&gt;
Em um sistema de &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas, o &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt; é definido como a média do número de partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
	g(r)=\frac{V}{N^2}\langle\sum_{i=1}^N\sum_{j\neq i}^N\delta(r-|r_i-r_j|)  \rangle&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Numéricamente pode ser interpretado como a média do número de pares de partículas a uma distância entre &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;r+\Delta r&amp;lt;/math&amp;gt; pesado pelo volume/área desta região.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	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]&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde &amp;lt;math&amp;gt;V_t&amp;lt;/math&amp;gt; é o/a volume/área total e &amp;lt;math&amp;gt;rect&amp;lt;/math&amp;gt; é a função retangular.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Em resumo, o &amp;lt;math&amp;gt;g(r,\Delta r)&amp;lt;/math&amp;gt; é a média dos [[Histogramas_e_Densidade_de_Probabilidade|histogramas]] do número de partículas em um ''bin''  de largura &amp;lt;math&amp;gt;\Delta r&amp;lt;/math&amp;gt; a uma &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; feitos para cada partícula no sistema pesado pelo volume/área deste ''bin''.&lt;br /&gt;
&lt;br /&gt;
==== Construção do Código ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Resultados ====&lt;br /&gt;
&lt;br /&gt;
[[Image:GR-D.png|400px|Resultado do cálculo de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
=Referências=&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Psi 6=&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;caixa&amp;quot; em que as partículas estão localizadas e então localizar possíveis &amp;quot;defeitos&amp;quot; no padrão hexagonal.&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\frac{\pi}{3}&amp;lt;/math&amp;gt;. Buscando uma relação em que esta situação seja a situação de &amp;lt;math&amp;gt;\psi_6 = 1&amp;lt;/math&amp;gt;, é possível definir que o &amp;lt;math&amp;gt;\psi_6 &amp;lt;/math&amp;gt; vale:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\psi_6=\frac{1}{6}\sum_i^ncos(6\theta_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\theta=\frac{\pi}{3}&amp;lt;/math&amp;gt; resulte em um valor de &amp;lt;math&amp;gt;\psi_6=1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Implementação Computacional ==&lt;br /&gt;
[[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;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Encontrando vizinhos ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
O método aqui citado é pouco otimizado, pois utiliza-se um for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;, 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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;) baseando-se em outro valor já calculado, a medida do g(r), desta forma o valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; resultará em um valor razoável ( &amp;gt;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.&lt;br /&gt;
&lt;br /&gt;
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: &amp;quot;neighborsX&amp;quot; (que guarda a posição X do vizinho), &amp;quot;neighborsY&amp;quot;(que guarda a posição Y do vizinho) e &amp;quot;dNeighbors&amp;quot;(que guarda a distância do vizinho) e então faz-se o for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; buscando-se as distância menores que o raio de corte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(i=0;i&amp;lt;NP;i++){&lt;br /&gt;
		xOrg=xx[i];&lt;br /&gt;
		yOrg=yy[i];&lt;br /&gt;
		for(j=0;j&amp;lt;NP;j++){&lt;br /&gt;
			x2=xx[j];&lt;br /&gt;
			y2=yy[j];&lt;br /&gt;
			if(i!=j){&lt;br /&gt;
				if(distance(xOrg,yOrg,x2,y2)&amp;lt;radiusLimit)&lt;br /&gt;
				{	&lt;br /&gt;
					neighborsX[k]=x2;&lt;br /&gt;
					neighborsY[k]=y2;&lt;br /&gt;
					dNeighbors[k]=distance(x2,y2,xOrg,yOrg);&lt;br /&gt;
					k+=1;&lt;br /&gt;
				}&lt;br /&gt;
			}		&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Portanto após esse algoritmo, temos guardadas as posições das partículas mais próximas. É importante ressaltar que o &amp;quot;for&amp;quot; em partícula-teste ainda não foi fechado, e ainda dentro deste mesmo loop serão calculados os valores de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Calculando o Psi 6 ===&lt;br /&gt;
&lt;br /&gt;
Tendo os valores de X e Y dos vizinhos da partícula-teste, podemos proceder para o cálculo do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;. 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 &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt; e será dado pela seguinte relação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\phi_i=arctg\left(\frac{\Delta Y}{\Delta X}\right)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na implementação em código fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(j=0;j&amp;lt;k;j++){&lt;br /&gt;
		delX=neighborsX[j]-xx[i];&lt;br /&gt;
		delY=neighborsY[j]-yy[i];&lt;br /&gt;
&lt;br /&gt;
                //Condições de contorno periódicas&lt;br /&gt;
		delX=delX-rint(delX/Lx)*Lx; &lt;br /&gt;
        	delY=delY-rint(delY/Ly)*Ly;&lt;br /&gt;
                // --- //&lt;br /&gt;
&lt;br /&gt;
		angle[j]=atan2(delY,delX);&lt;br /&gt;
		if (angle[j]&amp;lt;0)&lt;br /&gt;
			angle[j]=2*PI+angle[j];&lt;br /&gt;
                psix[i]=0;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora somente precisa-se realizar um algoritmo que ordene o vetor &amp;quot;angle&amp;quot; do menor para o maior ângulo, utilizando algoritmos de ordenamento (bubblesort, quicksort, etc) desta forma é possível calcular os &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Feito o ordenamento do vetor, basta calcular a média do valor do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; de cada vizinho. Para isto, precisamos calcular os valores de &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt; em função dos &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt;, basta realizar a subtração do próximo vizinho no vetor pelo valor do ângulo do vizinho atual, dessa forma: &amp;lt;math&amp;gt; \theta_i = \psi_{i+1} - \psi_i &amp;lt;/math&amp;gt; com exceção do último vizinho, que será o ângulo dele menos o do primeiro, desta forma a implementação fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		firstAngle=angle[0];	&lt;br /&gt;
		for(j=0;j&amp;lt;k-1;j++){ &lt;br /&gt;
			angle[j]=cos(6.*(angle[j+1]-angle[j]));&lt;br /&gt;
		}		&lt;br /&gt;
		angle[k-1]=cos(6.*(firstAngle+2*PI-angle[k-1]));&lt;br /&gt;
		for(j=0;j&amp;lt;k;j++){ &lt;br /&gt;
			psix[i]+=angle[j]/6.;&lt;br /&gt;
		}	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E então está calculado o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, para facilitar a implementação é recomendado que este algoritmo seja uma função dentro de seu código e desta forma retorne o vetor &amp;quot;psix&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Exemplos ===&lt;br /&gt;
&lt;br /&gt;
Para o caso de um potencial de Lennard-Jones, é possível observar resultados de mapas de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, isto é, um mapa que mostra para cada partícula o seu valor da medida, da seguinte forma para cada valor de rho:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Aplicações em outras áreas ==&lt;br /&gt;
&lt;br /&gt;
No estudo do processamento da posição de um animal no cérebro de rato, são observados padrões hexagonais produzidos pelas chamadas &amp;quot;Células de grade&amp;quot;, 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 &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; para determinar a &amp;quot;hexagonalidade&amp;quot; dos disparos desses neurônios, podendo-se realizar estudos da influência desse formato na interpretação geoespacial do animal.&lt;/div&gt;</summary>
		<author><name>Rmoreira</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=656</id>
		<title>Medidas estáticas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=656"/>
		<updated>2016-07-31T23:41:32Z</updated>

		<summary type="html">&lt;p&gt;Rmoreira: /* Exemplos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em dinâmica molecular, medidas estáticas são medidas realizadas em um passo específico de tempo da simulação.&lt;br /&gt;
&lt;br /&gt;
=Pair Distribution Function=&lt;br /&gt;
&lt;br /&gt;
[[Image:Gr.png|thumb|300px|right|Representação do cálculo numérico de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
A ''Pair Distribution Function'' , ou &amp;quot;&amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;&amp;quot;, é uma função que estima o quão provável é encontrar duas partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; dentro de um sistema de várias partículas.&lt;br /&gt;
&lt;br /&gt;
Em um sistema de &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas, o &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt; é definido como a média do número de partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
	g(r)=\frac{V}{N^2}\langle\sum_{i=1}^N\sum_{j\neq i}^N\delta(r-|r_i-r_j|)  \rangle&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Numéricamente pode ser interpretado como a média do número de pares de partículas a uma distância entre &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;r+\Delta r&amp;lt;/math&amp;gt; pesado pelo volume/área desta região.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	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]&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde &amp;lt;math&amp;gt;V_t&amp;lt;/math&amp;gt; é o/a volume/área total e &amp;lt;math&amp;gt;rect&amp;lt;/math&amp;gt; é a função retangular.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Em resumo, o &amp;lt;math&amp;gt;g(r,\Delta r)&amp;lt;/math&amp;gt; é a média dos [[Histogramas_e_Densidade_de_Probabilidade|histogramas]] do número de partículas em um ''bin''  de largura &amp;lt;math&amp;gt;\Delta r&amp;lt;/math&amp;gt; a uma &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; feitos para cada partícula no sistema pesado pelo volume/área deste ''bin''.&lt;br /&gt;
&lt;br /&gt;
==== Construção do Código ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Resultados ====&lt;br /&gt;
&lt;br /&gt;
[[Image:GR-D.png|400px|Resultado do cálculo de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
=Referências=&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Psi 6=&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;caixa&amp;quot; em que as partículas estão localizadas e então localizar possíveis &amp;quot;defeitos&amp;quot; no padrão hexagonal.&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\frac{\pi}{3}&amp;lt;/math&amp;gt;. Buscando uma relação em que esta situação seja a situação de &amp;lt;math&amp;gt;\psi_6 = 1&amp;lt;/math&amp;gt;, é possível definir que o &amp;lt;math&amp;gt;\psi_6 &amp;lt;/math&amp;gt; vale:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\psi_6=\frac{1}{6}\sum_i^ncos(6\theta_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\theta=\frac{\pi}{3}&amp;lt;/math&amp;gt; resulte em um valor de &amp;lt;math&amp;gt;\psi_6=1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Implementação Computacional ==&lt;br /&gt;
[[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;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Encontrando vizinhos ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
O método aqui citado é pouco otimizado, pois utiliza-se um for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;, 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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;) baseando-se em outro valor já calculado, a medida do g(r), desta forma o valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; resultará em um valor razoável ( &amp;gt;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.&lt;br /&gt;
&lt;br /&gt;
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: &amp;quot;neighborsX&amp;quot; (que guarda a posição X do vizinho), &amp;quot;neighborsY&amp;quot;(que guarda a posição Y do vizinho) e &amp;quot;dNeighbors&amp;quot;(que guarda a distância do vizinho) e então faz-se o for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; buscando-se as distância menores que o raio de corte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(i=0;i&amp;lt;NP;i++){&lt;br /&gt;
		xOrg=xx[i];&lt;br /&gt;
		yOrg=yy[i];&lt;br /&gt;
		for(j=0;j&amp;lt;NP;j++){&lt;br /&gt;
			x2=xx[j];&lt;br /&gt;
			y2=yy[j];&lt;br /&gt;
			if(i!=j){&lt;br /&gt;
				if(distance(xOrg,yOrg,x2,y2)&amp;lt;radiusLimit)&lt;br /&gt;
				{	&lt;br /&gt;
					neighborsX[k]=x2;&lt;br /&gt;
					neighborsY[k]=y2;&lt;br /&gt;
					dNeighbors[k]=distance(x2,y2,xOrg,yOrg);&lt;br /&gt;
					k+=1;&lt;br /&gt;
				}&lt;br /&gt;
			}		&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Portanto após esse algoritmo, temos guardadas as posições das partículas mais próximas. É importante ressaltar que o &amp;quot;for&amp;quot; em partícula-teste ainda não foi fechado, e ainda dentro deste mesmo loop serão calculados os valores de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Calculando o Psi 6 ===&lt;br /&gt;
&lt;br /&gt;
Tendo os valores de X e Y dos vizinhos da partícula-teste, podemos proceder para o cálculo do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;. 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 &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt; e será dado pela seguinte relação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\phi_i=arctg\left(\frac{\Delta Y}{\Delta X}\right)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na implementação em código fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(j=0;j&amp;lt;k;j++){&lt;br /&gt;
		delX=neighborsX[j]-xx[i];&lt;br /&gt;
		delY=neighborsY[j]-yy[i];&lt;br /&gt;
&lt;br /&gt;
                //Condições de contorno periódicas&lt;br /&gt;
		delX=delX-rint(delX/Lx)*Lx; &lt;br /&gt;
        	delY=delY-rint(delY/Ly)*Ly;&lt;br /&gt;
                // --- //&lt;br /&gt;
&lt;br /&gt;
		angle[j]=atan2(delY,delX);&lt;br /&gt;
		if (angle[j]&amp;lt;0)&lt;br /&gt;
			angle[j]=2*PI+angle[j];&lt;br /&gt;
                psix[i]=0;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora somente precisa-se realizar um algoritmo que ordene o vetor &amp;quot;angle&amp;quot; do menor para o maior ângulo, utilizando algoritmos de ordenamento (bubblesort, quicksort, etc) desta forma é possível calcular os &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Feito o ordenamento do vetor, basta calcular a média do valor do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; de cada vizinho. Para isto, precisamos calcular os valores de &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt; em função dos &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt;, basta realizar a subtração do próximo vizinho no vetor pelo valor do ângulo do vizinho atual, dessa forma: &amp;lt;math&amp;gt; \theta_i = \psi_{i+1} - \psi_i &amp;lt;/math&amp;gt; com exceção do último vizinho, que será o ângulo dele menos o do primeiro, desta forma a implementação fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		firstAngle=angle[0];	&lt;br /&gt;
		for(j=0;j&amp;lt;k-1;j++){ &lt;br /&gt;
			angle[j]=cos(6.*(angle[j+1]-angle[j]));&lt;br /&gt;
		}		&lt;br /&gt;
		angle[k-1]=cos(6.*(firstAngle+2*PI-angle[k-1]));&lt;br /&gt;
		for(j=0;j&amp;lt;k;j++){ &lt;br /&gt;
			psix[i]+=angle[j]/k.;&lt;br /&gt;
		}	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E então está calculado o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, para facilitar a implementação é recomendado que este algoritmo seja uma função dentro de seu código e desta forma retorne o vetor &amp;quot;psix&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Exemplos ===&lt;br /&gt;
&lt;br /&gt;
Para o caso de um potencial de Lennard-Jones, é possível observar resultados de mapas de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, isto é, um mapa que mostra para cada partícula o seu valor da medida, da seguinte forma para cada valor de rho:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Aplicações em outras áreas ==&lt;br /&gt;
&lt;br /&gt;
No estudo do processamento da posição de um animal no cérebro de rato, são observados padrões hexagonais produzidos pelas chamadas &amp;quot;Células de grade&amp;quot;, 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 &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; para determinar a &amp;quot;hexagonalidade&amp;quot; dos disparos desses neurônios, podendo-se realizar estudos da influência desse formato na interpretação geoespacial do animal.&lt;/div&gt;</summary>
		<author><name>Rmoreira</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=655</id>
		<title>Medidas estáticas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=655"/>
		<updated>2016-07-31T23:32:54Z</updated>

		<summary type="html">&lt;p&gt;Rmoreira: /* Implementação Computacional */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em dinâmica molecular, medidas estáticas são medidas realizadas em um passo específico de tempo da simulação.&lt;br /&gt;
&lt;br /&gt;
=Pair Distribution Function=&lt;br /&gt;
&lt;br /&gt;
[[Image:Gr.png|thumb|300px|right|Representação do cálculo numérico de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
A ''Pair Distribution Function'' , ou &amp;quot;&amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;&amp;quot;, é uma função que estima o quão provável é encontrar duas partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; dentro de um sistema de várias partículas.&lt;br /&gt;
&lt;br /&gt;
Em um sistema de &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas, o &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt; é definido como a média do número de partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
	g(r)=\frac{V}{N^2}\langle\sum_{i=1}^N\sum_{j\neq i}^N\delta(r-|r_i-r_j|)  \rangle&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Numéricamente pode ser interpretado como a média do número de pares de partículas a uma distância entre &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;r+\Delta r&amp;lt;/math&amp;gt; pesado pelo volume/área desta região.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	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]&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde &amp;lt;math&amp;gt;V_t&amp;lt;/math&amp;gt; é o/a volume/área total e &amp;lt;math&amp;gt;rect&amp;lt;/math&amp;gt; é a função retangular.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Em resumo, o &amp;lt;math&amp;gt;g(r,\Delta r)&amp;lt;/math&amp;gt; é a média dos [[Histogramas_e_Densidade_de_Probabilidade|histogramas]] do número de partículas em um ''bin''  de largura &amp;lt;math&amp;gt;\Delta r&amp;lt;/math&amp;gt; a uma &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; feitos para cada partícula no sistema pesado pelo volume/área deste ''bin''.&lt;br /&gt;
&lt;br /&gt;
==== Construção do Código ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Resultados ====&lt;br /&gt;
&lt;br /&gt;
[[Image:GR-D.png|400px|Resultado do cálculo de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
=Referências=&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Psi 6=&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;caixa&amp;quot; em que as partículas estão localizadas e então localizar possíveis &amp;quot;defeitos&amp;quot; no padrão hexagonal.&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\frac{\pi}{3}&amp;lt;/math&amp;gt;. Buscando uma relação em que esta situação seja a situação de &amp;lt;math&amp;gt;\psi_6 = 1&amp;lt;/math&amp;gt;, é possível definir que o &amp;lt;math&amp;gt;\psi_6 &amp;lt;/math&amp;gt; vale:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\psi_6=\frac{1}{6}\sum_i^ncos(6\theta_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\theta=\frac{\pi}{3}&amp;lt;/math&amp;gt; resulte em um valor de &amp;lt;math&amp;gt;\psi_6=1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Implementação Computacional ==&lt;br /&gt;
[[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;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Encontrando vizinhos ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
O método aqui citado é pouco otimizado, pois utiliza-se um for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;, 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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;) baseando-se em outro valor já calculado, a medida do g(r), desta forma o valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; resultará em um valor razoável ( &amp;gt;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.&lt;br /&gt;
&lt;br /&gt;
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: &amp;quot;neighborsX&amp;quot; (que guarda a posição X do vizinho), &amp;quot;neighborsY&amp;quot;(que guarda a posição Y do vizinho) e &amp;quot;dNeighbors&amp;quot;(que guarda a distância do vizinho) e então faz-se o for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; buscando-se as distância menores que o raio de corte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(i=0;i&amp;lt;NP;i++){&lt;br /&gt;
		xOrg=xx[i];&lt;br /&gt;
		yOrg=yy[i];&lt;br /&gt;
		for(j=0;j&amp;lt;NP;j++){&lt;br /&gt;
			x2=xx[j];&lt;br /&gt;
			y2=yy[j];&lt;br /&gt;
			if(i!=j){&lt;br /&gt;
				if(distance(xOrg,yOrg,x2,y2)&amp;lt;radiusLimit)&lt;br /&gt;
				{	&lt;br /&gt;
					neighborsX[k]=x2;&lt;br /&gt;
					neighborsY[k]=y2;&lt;br /&gt;
					dNeighbors[k]=distance(x2,y2,xOrg,yOrg);&lt;br /&gt;
					k+=1;&lt;br /&gt;
				}&lt;br /&gt;
			}		&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Portanto após esse algoritmo, temos guardadas as posições das partículas mais próximas. É importante ressaltar que o &amp;quot;for&amp;quot; em partícula-teste ainda não foi fechado, e ainda dentro deste mesmo loop serão calculados os valores de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Calculando o Psi 6 ===&lt;br /&gt;
&lt;br /&gt;
Tendo os valores de X e Y dos vizinhos da partícula-teste, podemos proceder para o cálculo do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;. 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 &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt; e será dado pela seguinte relação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\phi_i=arctg\left(\frac{\Delta Y}{\Delta X}\right)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na implementação em código fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(j=0;j&amp;lt;k;j++){&lt;br /&gt;
		delX=neighborsX[j]-xx[i];&lt;br /&gt;
		delY=neighborsY[j]-yy[i];&lt;br /&gt;
&lt;br /&gt;
                //Condições de contorno periódicas&lt;br /&gt;
		delX=delX-rint(delX/Lx)*Lx; &lt;br /&gt;
        	delY=delY-rint(delY/Ly)*Ly;&lt;br /&gt;
                // --- //&lt;br /&gt;
&lt;br /&gt;
		angle[j]=atan2(delY,delX);&lt;br /&gt;
		if (angle[j]&amp;lt;0)&lt;br /&gt;
			angle[j]=2*PI+angle[j];&lt;br /&gt;
                psix[i]=0;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora somente precisa-se realizar um algoritmo que ordene o vetor &amp;quot;angle&amp;quot; do menor para o maior ângulo, utilizando algoritmos de ordenamento (bubblesort, quicksort, etc) desta forma é possível calcular os &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Feito o ordenamento do vetor, basta calcular a média do valor do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; de cada vizinho. Para isto, precisamos calcular os valores de &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt; em função dos &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt;, basta realizar a subtração do próximo vizinho no vetor pelo valor do ângulo do vizinho atual, dessa forma: &amp;lt;math&amp;gt; \theta_i = \psi_{i+1} - \psi_i &amp;lt;/math&amp;gt; com exceção do último vizinho, que será o ângulo dele menos o do primeiro, desta forma a implementação fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		firstAngle=angle[0];	&lt;br /&gt;
		for(j=0;j&amp;lt;k-1;j++){ &lt;br /&gt;
			angle[j]=cos(6.*(angle[j+1]-angle[j]));&lt;br /&gt;
		}		&lt;br /&gt;
		angle[k-1]=cos(6.*(firstAngle+2*PI-angle[k-1]));&lt;br /&gt;
		for(j=0;j&amp;lt;k;j++){ &lt;br /&gt;
			psix[i]+=angle[j]/k.;&lt;br /&gt;
		}	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E então está calculado o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, para facilitar a implementação é recomendado que este algoritmo seja uma função dentro de seu código e desta forma retorne o vetor &amp;quot;psix&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Exemplos ===&lt;br /&gt;
&lt;br /&gt;
Para o caso de um potencial de Lennard-Jones, é possível fazer observar resultados de mapas de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, isto é, um mapa que mostra para cada partícula o seu valor da medida, da seguinte forma:&lt;/div&gt;</summary>
		<author><name>Rmoreira</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=654</id>
		<title>Medidas estáticas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=654"/>
		<updated>2016-07-31T23:32:37Z</updated>

		<summary type="html">&lt;p&gt;Rmoreira: /* Implementação Computacional */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em dinâmica molecular, medidas estáticas são medidas realizadas em um passo específico de tempo da simulação.&lt;br /&gt;
&lt;br /&gt;
=Pair Distribution Function=&lt;br /&gt;
&lt;br /&gt;
[[Image:Gr.png|thumb|300px|right|Representação do cálculo numérico de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
A ''Pair Distribution Function'' , ou &amp;quot;&amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;&amp;quot;, é uma função que estima o quão provável é encontrar duas partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; dentro de um sistema de várias partículas.&lt;br /&gt;
&lt;br /&gt;
Em um sistema de &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas, o &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt; é definido como a média do número de partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
	g(r)=\frac{V}{N^2}\langle\sum_{i=1}^N\sum_{j\neq i}^N\delta(r-|r_i-r_j|)  \rangle&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Numéricamente pode ser interpretado como a média do número de pares de partículas a uma distância entre &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;r+\Delta r&amp;lt;/math&amp;gt; pesado pelo volume/área desta região.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	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]&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde &amp;lt;math&amp;gt;V_t&amp;lt;/math&amp;gt; é o/a volume/área total e &amp;lt;math&amp;gt;rect&amp;lt;/math&amp;gt; é a função retangular.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Em resumo, o &amp;lt;math&amp;gt;g(r,\Delta r)&amp;lt;/math&amp;gt; é a média dos [[Histogramas_e_Densidade_de_Probabilidade|histogramas]] do número de partículas em um ''bin''  de largura &amp;lt;math&amp;gt;\Delta r&amp;lt;/math&amp;gt; a uma &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; feitos para cada partícula no sistema pesado pelo volume/área deste ''bin''.&lt;br /&gt;
&lt;br /&gt;
==== Construção do Código ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Resultados ====&lt;br /&gt;
&lt;br /&gt;
[[Image:GR-D.png|400px|Resultado do cálculo de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
=Referências=&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Psi 6=&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;caixa&amp;quot; em que as partículas estão localizadas e então localizar possíveis &amp;quot;defeitos&amp;quot; no padrão hexagonal.&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\frac{\pi}{3}&amp;lt;/math&amp;gt;. Buscando uma relação em que esta situação seja a situação de &amp;lt;math&amp;gt;\psi_6 = 1&amp;lt;/math&amp;gt;, é possível definir que o &amp;lt;math&amp;gt;\psi_6 &amp;lt;/math&amp;gt; vale:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\psi_6=\frac{1}{6}\sum_i^ncos(6\theta_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\theta=\frac{\pi}{3}&amp;lt;/math&amp;gt; resulte em um valor de &amp;lt;math&amp;gt;\psi_6=1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Implementação Computacional ==&lt;br /&gt;
[[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;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Encontrando vizinhos ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
O método aqui citado é pouco otimizado, pois utiliza-se um for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;, 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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;) baseando-se em outro valor já calculado, a medida do g(r), desta forma o valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; resultará em um valor razoável ( &amp;gt;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.&lt;br /&gt;
&lt;br /&gt;
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: &amp;quot;neighborsX&amp;quot; (que guarda a posição X do vizinho), &amp;quot;neighborsY&amp;quot;(que guarda a posição Y do vizinho) e &amp;quot;dNeighbors&amp;quot;(que guarda a distância do vizinho) e então faz-se o for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; buscando-se as distância menores que o raio de corte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(i=0;i&amp;lt;NP;i++){&lt;br /&gt;
		xOrg=xx[i];&lt;br /&gt;
		yOrg=yy[i];&lt;br /&gt;
		for(j=0;j&amp;lt;NP;j++){&lt;br /&gt;
			x2=xx[j];&lt;br /&gt;
			y2=yy[j];&lt;br /&gt;
			if(i!=j){&lt;br /&gt;
				if(distance(xOrg,yOrg,x2,y2)&amp;lt;radiusLimit)&lt;br /&gt;
				{	&lt;br /&gt;
					neighborsX[k]=x2;&lt;br /&gt;
					neighborsY[k]=y2;&lt;br /&gt;
					dNeighbors[k]=distance(x2,y2,xOrg,yOrg);&lt;br /&gt;
					k+=1;&lt;br /&gt;
				}&lt;br /&gt;
			}		&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Portanto após esse algoritmo, temos guardadas as posições das partículas mais próximas. É importante ressaltar que o &amp;quot;for&amp;quot; em partícula-teste ainda não foi fechado, e ainda dentro deste mesmo loop serão calculados os valores de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Calculando o Psi 6 ===&lt;br /&gt;
&lt;br /&gt;
Tendo os valores de X e Y dos vizinhos da partícula-teste, podemos proceder para o cálculo do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;. 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 &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt; e será dado pela seguinte relação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\phi_i=arctg\left(\frac{\Delta Y}{\Delta X}\right)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na implementação em código fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(j=0;j&amp;lt;k;j++){&lt;br /&gt;
		delX=neighborsX[j]-xx[i];&lt;br /&gt;
		delY=neighborsY[j]-yy[i];&lt;br /&gt;
&lt;br /&gt;
                //Condições de contorno periódicas&lt;br /&gt;
		delX=delX-rint(delX/Lx)*Lx; &lt;br /&gt;
        	delY=delY-rint(delY/Ly)*Ly;&lt;br /&gt;
                // --- //&lt;br /&gt;
&lt;br /&gt;
		angle[j]=atan2(delY,delX);&lt;br /&gt;
		if (angle[j]&amp;lt;0)&lt;br /&gt;
			angle[j]=2*PI+angle[j];&lt;br /&gt;
                psix[i]=0;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora somente precisa-se realizar um algoritmo que ordene o vetor &amp;quot;angle&amp;quot; do menor para o maior ângulo, utilizando algoritmos de ordenamento (bubblesort, quicksort, etc) desta forma é possível calcular os &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Feito o ordenamento do vetor, basta calcular a média do valor do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; de cada vizinho. Para isto, precisamos calcular os valores de &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt; em função dos &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt;, basta realizar a subtração do próximo vizinho no vetor pelo valor do ângulo do vizinho atual, dessa forma: &amp;lt;math&amp;gt; \theta_i = \psi_{i+1} - \psi_i &amp;lt;/math&amp;gt; com exceção do último vizinho, que será o ângulo dele menos o do primeiro, desta forma a implementação fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		firstAngle=angle[0];	&lt;br /&gt;
		for(j=0;j&amp;lt;k-1;j++){ &lt;br /&gt;
			angle[j]=cos(6.*(angle[j+1]-angle[j]));&lt;br /&gt;
		}		&lt;br /&gt;
		angle[k-1]=cos(6.*(firstAngle+2*PI-angle[k-1]));&lt;br /&gt;
		for(j=0;j&amp;lt;k;j++){ &lt;br /&gt;
			psix[i]+=angle[j]/k.;&lt;br /&gt;
		}	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E então está calculado o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, para facilitar a implementação é recomendado que este algoritmo seja uma função dentro de seu código e desta forma retorne o vetor &amp;quot;psix&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Exemplos ===&lt;br /&gt;
&lt;br /&gt;
Para o caso de um potencial de Lennard-Jones, é possível fazer observar resultados de mapas de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, isto é, um mapa que mostra para cada partícula o seu valor da medida, da seguinte forma:&lt;/div&gt;</summary>
		<author><name>Rmoreira</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=653</id>
		<title>Medidas estáticas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=653"/>
		<updated>2016-07-31T23:32:29Z</updated>

		<summary type="html">&lt;p&gt;Rmoreira: /* Encontrando vizinhos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em dinâmica molecular, medidas estáticas são medidas realizadas em um passo específico de tempo da simulação.&lt;br /&gt;
&lt;br /&gt;
=Pair Distribution Function=&lt;br /&gt;
&lt;br /&gt;
[[Image:Gr.png|thumb|300px|right|Representação do cálculo numérico de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
A ''Pair Distribution Function'' , ou &amp;quot;&amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;&amp;quot;, é uma função que estima o quão provável é encontrar duas partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; dentro de um sistema de várias partículas.&lt;br /&gt;
&lt;br /&gt;
Em um sistema de &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas, o &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt; é definido como a média do número de partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
	g(r)=\frac{V}{N^2}\langle\sum_{i=1}^N\sum_{j\neq i}^N\delta(r-|r_i-r_j|)  \rangle&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Numéricamente pode ser interpretado como a média do número de pares de partículas a uma distância entre &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;r+\Delta r&amp;lt;/math&amp;gt; pesado pelo volume/área desta região.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	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]&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde &amp;lt;math&amp;gt;V_t&amp;lt;/math&amp;gt; é o/a volume/área total e &amp;lt;math&amp;gt;rect&amp;lt;/math&amp;gt; é a função retangular.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Em resumo, o &amp;lt;math&amp;gt;g(r,\Delta r)&amp;lt;/math&amp;gt; é a média dos [[Histogramas_e_Densidade_de_Probabilidade|histogramas]] do número de partículas em um ''bin''  de largura &amp;lt;math&amp;gt;\Delta r&amp;lt;/math&amp;gt; a uma &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; feitos para cada partícula no sistema pesado pelo volume/área deste ''bin''.&lt;br /&gt;
&lt;br /&gt;
==== Construção do Código ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Resultados ====&lt;br /&gt;
&lt;br /&gt;
[[Image:GR-D.png|400px|Resultado do cálculo de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
=Referências=&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Psi 6=&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;caixa&amp;quot; em que as partículas estão localizadas e então localizar possíveis &amp;quot;defeitos&amp;quot; no padrão hexagonal.&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\frac{\pi}{3}&amp;lt;/math&amp;gt;. Buscando uma relação em que esta situação seja a situação de &amp;lt;math&amp;gt;\psi_6 = 1&amp;lt;/math&amp;gt;, é possível definir que o &amp;lt;math&amp;gt;\psi_6 &amp;lt;/math&amp;gt; vale:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\psi_6=\frac{1}{6}\sum_i^ncos(6\theta_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\theta=\frac{\pi}{3}&amp;lt;/math&amp;gt; resulte em um valor de &amp;lt;math&amp;gt;\psi_6=1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Implementação Computacional ==&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Encontrando vizinhos ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
O método aqui citado é pouco otimizado, pois utiliza-se um for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;, 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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;) baseando-se em outro valor já calculado, a medida do g(r), desta forma o valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; resultará em um valor razoável ( &amp;gt;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.&lt;br /&gt;
&lt;br /&gt;
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: &amp;quot;neighborsX&amp;quot; (que guarda a posição X do vizinho), &amp;quot;neighborsY&amp;quot;(que guarda a posição Y do vizinho) e &amp;quot;dNeighbors&amp;quot;(que guarda a distância do vizinho) e então faz-se o for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; buscando-se as distância menores que o raio de corte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(i=0;i&amp;lt;NP;i++){&lt;br /&gt;
		xOrg=xx[i];&lt;br /&gt;
		yOrg=yy[i];&lt;br /&gt;
		for(j=0;j&amp;lt;NP;j++){&lt;br /&gt;
			x2=xx[j];&lt;br /&gt;
			y2=yy[j];&lt;br /&gt;
			if(i!=j){&lt;br /&gt;
				if(distance(xOrg,yOrg,x2,y2)&amp;lt;radiusLimit)&lt;br /&gt;
				{	&lt;br /&gt;
					neighborsX[k]=x2;&lt;br /&gt;
					neighborsY[k]=y2;&lt;br /&gt;
					dNeighbors[k]=distance(x2,y2,xOrg,yOrg);&lt;br /&gt;
					k+=1;&lt;br /&gt;
				}&lt;br /&gt;
			}		&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Portanto após esse algoritmo, temos guardadas as posições das partículas mais próximas. É importante ressaltar que o &amp;quot;for&amp;quot; em partícula-teste ainda não foi fechado, e ainda dentro deste mesmo loop serão calculados os valores de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Calculando o Psi 6 ===&lt;br /&gt;
&lt;br /&gt;
Tendo os valores de X e Y dos vizinhos da partícula-teste, podemos proceder para o cálculo do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;. 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 &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt; e será dado pela seguinte relação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\phi_i=arctg\left(\frac{\Delta Y}{\Delta X}\right)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na implementação em código fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(j=0;j&amp;lt;k;j++){&lt;br /&gt;
		delX=neighborsX[j]-xx[i];&lt;br /&gt;
		delY=neighborsY[j]-yy[i];&lt;br /&gt;
&lt;br /&gt;
                //Condições de contorno periódicas&lt;br /&gt;
		delX=delX-rint(delX/Lx)*Lx; &lt;br /&gt;
        	delY=delY-rint(delY/Ly)*Ly;&lt;br /&gt;
                // --- //&lt;br /&gt;
&lt;br /&gt;
		angle[j]=atan2(delY,delX);&lt;br /&gt;
		if (angle[j]&amp;lt;0)&lt;br /&gt;
			angle[j]=2*PI+angle[j];&lt;br /&gt;
                psix[i]=0;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora somente precisa-se realizar um algoritmo que ordene o vetor &amp;quot;angle&amp;quot; do menor para o maior ângulo, utilizando algoritmos de ordenamento (bubblesort, quicksort, etc) desta forma é possível calcular os &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Feito o ordenamento do vetor, basta calcular a média do valor do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; de cada vizinho. Para isto, precisamos calcular os valores de &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt; em função dos &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt;, basta realizar a subtração do próximo vizinho no vetor pelo valor do ângulo do vizinho atual, dessa forma: &amp;lt;math&amp;gt; \theta_i = \psi_{i+1} - \psi_i &amp;lt;/math&amp;gt; com exceção do último vizinho, que será o ângulo dele menos o do primeiro, desta forma a implementação fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		firstAngle=angle[0];	&lt;br /&gt;
		for(j=0;j&amp;lt;k-1;j++){ &lt;br /&gt;
			angle[j]=cos(6.*(angle[j+1]-angle[j]));&lt;br /&gt;
		}		&lt;br /&gt;
		angle[k-1]=cos(6.*(firstAngle+2*PI-angle[k-1]));&lt;br /&gt;
		for(j=0;j&amp;lt;k;j++){ &lt;br /&gt;
			psix[i]+=angle[j]/k.;&lt;br /&gt;
		}	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E então está calculado o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, para facilitar a implementação é recomendado que este algoritmo seja uma função dentro de seu código e desta forma retorne o vetor &amp;quot;psix&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Exemplos ===&lt;br /&gt;
&lt;br /&gt;
Para o caso de um potencial de Lennard-Jones, é possível fazer observar resultados de mapas de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, isto é, um mapa que mostra para cada partícula o seu valor da medida, da seguinte forma:&lt;/div&gt;</summary>
		<author><name>Rmoreira</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=652</id>
		<title>Medidas estáticas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=652"/>
		<updated>2016-07-31T23:32:14Z</updated>

		<summary type="html">&lt;p&gt;Rmoreira: /* Encontrando vizinhos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em dinâmica molecular, medidas estáticas são medidas realizadas em um passo específico de tempo da simulação.&lt;br /&gt;
&lt;br /&gt;
=Pair Distribution Function=&lt;br /&gt;
&lt;br /&gt;
[[Image:Gr.png|thumb|300px|right|Representação do cálculo numérico de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
A ''Pair Distribution Function'' , ou &amp;quot;&amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;&amp;quot;, é uma função que estima o quão provável é encontrar duas partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; dentro de um sistema de várias partículas.&lt;br /&gt;
&lt;br /&gt;
Em um sistema de &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas, o &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt; é definido como a média do número de partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
	g(r)=\frac{V}{N^2}\langle\sum_{i=1}^N\sum_{j\neq i}^N\delta(r-|r_i-r_j|)  \rangle&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Numéricamente pode ser interpretado como a média do número de pares de partículas a uma distância entre &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;r+\Delta r&amp;lt;/math&amp;gt; pesado pelo volume/área desta região.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	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]&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde &amp;lt;math&amp;gt;V_t&amp;lt;/math&amp;gt; é o/a volume/área total e &amp;lt;math&amp;gt;rect&amp;lt;/math&amp;gt; é a função retangular.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Em resumo, o &amp;lt;math&amp;gt;g(r,\Delta r)&amp;lt;/math&amp;gt; é a média dos [[Histogramas_e_Densidade_de_Probabilidade|histogramas]] do número de partículas em um ''bin''  de largura &amp;lt;math&amp;gt;\Delta r&amp;lt;/math&amp;gt; a uma &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; feitos para cada partícula no sistema pesado pelo volume/área deste ''bin''.&lt;br /&gt;
&lt;br /&gt;
==== Construção do Código ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Resultados ====&lt;br /&gt;
&lt;br /&gt;
[[Image:GR-D.png|400px|Resultado do cálculo de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
=Referências=&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Psi 6=&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;caixa&amp;quot; em que as partículas estão localizadas e então localizar possíveis &amp;quot;defeitos&amp;quot; no padrão hexagonal.&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\frac{\pi}{3}&amp;lt;/math&amp;gt;. Buscando uma relação em que esta situação seja a situação de &amp;lt;math&amp;gt;\psi_6 = 1&amp;lt;/math&amp;gt;, é possível definir que o &amp;lt;math&amp;gt;\psi_6 &amp;lt;/math&amp;gt; vale:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\psi_6=\frac{1}{6}\sum_i^ncos(6\theta_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\theta=\frac{\pi}{3}&amp;lt;/math&amp;gt; resulte em um valor de &amp;lt;math&amp;gt;\psi_6=1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Implementação Computacional ==&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Encontrando vizinhos ===&lt;br /&gt;
[[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;]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
O método aqui citado é pouco otimizado, pois utiliza-se um for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;, 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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;) baseando-se em outro valor já calculado, a medida do g(r), desta forma o valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; resultará em um valor razoável ( &amp;gt;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.&lt;br /&gt;
&lt;br /&gt;
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: &amp;quot;neighborsX&amp;quot; (que guarda a posição X do vizinho), &amp;quot;neighborsY&amp;quot;(que guarda a posição Y do vizinho) e &amp;quot;dNeighbors&amp;quot;(que guarda a distância do vizinho) e então faz-se o for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; buscando-se as distância menores que o raio de corte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(i=0;i&amp;lt;NP;i++){&lt;br /&gt;
		xOrg=xx[i];&lt;br /&gt;
		yOrg=yy[i];&lt;br /&gt;
		for(j=0;j&amp;lt;NP;j++){&lt;br /&gt;
			x2=xx[j];&lt;br /&gt;
			y2=yy[j];&lt;br /&gt;
			if(i!=j){&lt;br /&gt;
				if(distance(xOrg,yOrg,x2,y2)&amp;lt;radiusLimit)&lt;br /&gt;
				{	&lt;br /&gt;
					neighborsX[k]=x2;&lt;br /&gt;
					neighborsY[k]=y2;&lt;br /&gt;
					dNeighbors[k]=distance(x2,y2,xOrg,yOrg);&lt;br /&gt;
					k+=1;&lt;br /&gt;
				}&lt;br /&gt;
			}		&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Portanto após esse algoritmo, temos guardadas as posições das partículas mais próximas. É importante ressaltar que o &amp;quot;for&amp;quot; em partícula-teste ainda não foi fechado, e ainda dentro deste mesmo loop serão calculados os valores de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Calculando o Psi 6 ===&lt;br /&gt;
&lt;br /&gt;
Tendo os valores de X e Y dos vizinhos da partícula-teste, podemos proceder para o cálculo do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;. 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 &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt; e será dado pela seguinte relação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\phi_i=arctg\left(\frac{\Delta Y}{\Delta X}\right)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na implementação em código fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(j=0;j&amp;lt;k;j++){&lt;br /&gt;
		delX=neighborsX[j]-xx[i];&lt;br /&gt;
		delY=neighborsY[j]-yy[i];&lt;br /&gt;
&lt;br /&gt;
                //Condições de contorno periódicas&lt;br /&gt;
		delX=delX-rint(delX/Lx)*Lx; &lt;br /&gt;
        	delY=delY-rint(delY/Ly)*Ly;&lt;br /&gt;
                // --- //&lt;br /&gt;
&lt;br /&gt;
		angle[j]=atan2(delY,delX);&lt;br /&gt;
		if (angle[j]&amp;lt;0)&lt;br /&gt;
			angle[j]=2*PI+angle[j];&lt;br /&gt;
                psix[i]=0;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora somente precisa-se realizar um algoritmo que ordene o vetor &amp;quot;angle&amp;quot; do menor para o maior ângulo, utilizando algoritmos de ordenamento (bubblesort, quicksort, etc) desta forma é possível calcular os &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Feito o ordenamento do vetor, basta calcular a média do valor do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; de cada vizinho. Para isto, precisamos calcular os valores de &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt; em função dos &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt;, basta realizar a subtração do próximo vizinho no vetor pelo valor do ângulo do vizinho atual, dessa forma: &amp;lt;math&amp;gt; \theta_i = \psi_{i+1} - \psi_i &amp;lt;/math&amp;gt; com exceção do último vizinho, que será o ângulo dele menos o do primeiro, desta forma a implementação fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		firstAngle=angle[0];	&lt;br /&gt;
		for(j=0;j&amp;lt;k-1;j++){ &lt;br /&gt;
			angle[j]=cos(6.*(angle[j+1]-angle[j]));&lt;br /&gt;
		}		&lt;br /&gt;
		angle[k-1]=cos(6.*(firstAngle+2*PI-angle[k-1]));&lt;br /&gt;
		for(j=0;j&amp;lt;k;j++){ &lt;br /&gt;
			psix[i]+=angle[j]/k.;&lt;br /&gt;
		}	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E então está calculado o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, para facilitar a implementação é recomendado que este algoritmo seja uma função dentro de seu código e desta forma retorne o vetor &amp;quot;psix&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Exemplos ===&lt;br /&gt;
&lt;br /&gt;
Para o caso de um potencial de Lennard-Jones, é possível fazer observar resultados de mapas de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, isto é, um mapa que mostra para cada partícula o seu valor da medida, da seguinte forma:&lt;/div&gt;</summary>
		<author><name>Rmoreira</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=651</id>
		<title>Medidas estáticas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=651"/>
		<updated>2016-07-31T23:31:57Z</updated>

		<summary type="html">&lt;p&gt;Rmoreira: /* Encontrando vizinhos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em dinâmica molecular, medidas estáticas são medidas realizadas em um passo específico de tempo da simulação.&lt;br /&gt;
&lt;br /&gt;
=Pair Distribution Function=&lt;br /&gt;
&lt;br /&gt;
[[Image:Gr.png|thumb|300px|right|Representação do cálculo numérico de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
A ''Pair Distribution Function'' , ou &amp;quot;&amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;&amp;quot;, é uma função que estima o quão provável é encontrar duas partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; dentro de um sistema de várias partículas.&lt;br /&gt;
&lt;br /&gt;
Em um sistema de &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas, o &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt; é definido como a média do número de partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
	g(r)=\frac{V}{N^2}\langle\sum_{i=1}^N\sum_{j\neq i}^N\delta(r-|r_i-r_j|)  \rangle&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Numéricamente pode ser interpretado como a média do número de pares de partículas a uma distância entre &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;r+\Delta r&amp;lt;/math&amp;gt; pesado pelo volume/área desta região.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	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]&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde &amp;lt;math&amp;gt;V_t&amp;lt;/math&amp;gt; é o/a volume/área total e &amp;lt;math&amp;gt;rect&amp;lt;/math&amp;gt; é a função retangular.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Em resumo, o &amp;lt;math&amp;gt;g(r,\Delta r)&amp;lt;/math&amp;gt; é a média dos [[Histogramas_e_Densidade_de_Probabilidade|histogramas]] do número de partículas em um ''bin''  de largura &amp;lt;math&amp;gt;\Delta r&amp;lt;/math&amp;gt; a uma &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; feitos para cada partícula no sistema pesado pelo volume/área deste ''bin''.&lt;br /&gt;
&lt;br /&gt;
==== Construção do Código ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Resultados ====&lt;br /&gt;
&lt;br /&gt;
[[Image:GR-D.png|400px|Resultado do cálculo de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
=Referências=&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Psi 6=&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;caixa&amp;quot; em que as partículas estão localizadas e então localizar possíveis &amp;quot;defeitos&amp;quot; no padrão hexagonal.&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\frac{\pi}{3}&amp;lt;/math&amp;gt;. Buscando uma relação em que esta situação seja a situação de &amp;lt;math&amp;gt;\psi_6 = 1&amp;lt;/math&amp;gt;, é possível definir que o &amp;lt;math&amp;gt;\psi_6 &amp;lt;/math&amp;gt; vale:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\psi_6=\frac{1}{6}\sum_i^ncos(6\theta_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\theta=\frac{\pi}{3}&amp;lt;/math&amp;gt; resulte em um valor de &amp;lt;math&amp;gt;\psi_6=1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Implementação Computacional ==&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Encontrando vizinhos ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[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;]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
O método aqui citado é pouco otimizado, pois utiliza-se um for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;, 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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;) baseando-se em outro valor já calculado, a medida do g(r), desta forma o valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; resultará em um valor razoável ( &amp;gt;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.&lt;br /&gt;
&lt;br /&gt;
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: &amp;quot;neighborsX&amp;quot; (que guarda a posição X do vizinho), &amp;quot;neighborsY&amp;quot;(que guarda a posição Y do vizinho) e &amp;quot;dNeighbors&amp;quot;(que guarda a distância do vizinho) e então faz-se o for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; buscando-se as distância menores que o raio de corte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(i=0;i&amp;lt;NP;i++){&lt;br /&gt;
		xOrg=xx[i];&lt;br /&gt;
		yOrg=yy[i];&lt;br /&gt;
		for(j=0;j&amp;lt;NP;j++){&lt;br /&gt;
			x2=xx[j];&lt;br /&gt;
			y2=yy[j];&lt;br /&gt;
			if(i!=j){&lt;br /&gt;
				if(distance(xOrg,yOrg,x2,y2)&amp;lt;radiusLimit)&lt;br /&gt;
				{	&lt;br /&gt;
					neighborsX[k]=x2;&lt;br /&gt;
					neighborsY[k]=y2;&lt;br /&gt;
					dNeighbors[k]=distance(x2,y2,xOrg,yOrg);&lt;br /&gt;
					k+=1;&lt;br /&gt;
				}&lt;br /&gt;
			}		&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Portanto após esse algoritmo, temos guardadas as posições das partículas mais próximas. É importante ressaltar que o &amp;quot;for&amp;quot; em partícula-teste ainda não foi fechado, e ainda dentro deste mesmo loop serão calculados os valores de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Calculando o Psi 6 ===&lt;br /&gt;
&lt;br /&gt;
Tendo os valores de X e Y dos vizinhos da partícula-teste, podemos proceder para o cálculo do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;. 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 &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt; e será dado pela seguinte relação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\phi_i=arctg\left(\frac{\Delta Y}{\Delta X}\right)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na implementação em código fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(j=0;j&amp;lt;k;j++){&lt;br /&gt;
		delX=neighborsX[j]-xx[i];&lt;br /&gt;
		delY=neighborsY[j]-yy[i];&lt;br /&gt;
&lt;br /&gt;
                //Condições de contorno periódicas&lt;br /&gt;
		delX=delX-rint(delX/Lx)*Lx; &lt;br /&gt;
        	delY=delY-rint(delY/Ly)*Ly;&lt;br /&gt;
                // --- //&lt;br /&gt;
&lt;br /&gt;
		angle[j]=atan2(delY,delX);&lt;br /&gt;
		if (angle[j]&amp;lt;0)&lt;br /&gt;
			angle[j]=2*PI+angle[j];&lt;br /&gt;
                psix[i]=0;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora somente precisa-se realizar um algoritmo que ordene o vetor &amp;quot;angle&amp;quot; do menor para o maior ângulo, utilizando algoritmos de ordenamento (bubblesort, quicksort, etc) desta forma é possível calcular os &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Feito o ordenamento do vetor, basta calcular a média do valor do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; de cada vizinho. Para isto, precisamos calcular os valores de &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt; em função dos &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt;, basta realizar a subtração do próximo vizinho no vetor pelo valor do ângulo do vizinho atual, dessa forma: &amp;lt;math&amp;gt; \theta_i = \psi_{i+1} - \psi_i &amp;lt;/math&amp;gt; com exceção do último vizinho, que será o ângulo dele menos o do primeiro, desta forma a implementação fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		firstAngle=angle[0];	&lt;br /&gt;
		for(j=0;j&amp;lt;k-1;j++){ &lt;br /&gt;
			angle[j]=cos(6.*(angle[j+1]-angle[j]));&lt;br /&gt;
		}		&lt;br /&gt;
		angle[k-1]=cos(6.*(firstAngle+2*PI-angle[k-1]));&lt;br /&gt;
		for(j=0;j&amp;lt;k;j++){ &lt;br /&gt;
			psix[i]+=angle[j]/k.;&lt;br /&gt;
		}	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E então está calculado o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, para facilitar a implementação é recomendado que este algoritmo seja uma função dentro de seu código e desta forma retorne o vetor &amp;quot;psix&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Exemplos ===&lt;br /&gt;
&lt;br /&gt;
Para o caso de um potencial de Lennard-Jones, é possível fazer observar resultados de mapas de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, isto é, um mapa que mostra para cada partícula o seu valor da medida, da seguinte forma:&lt;/div&gt;</summary>
		<author><name>Rmoreira</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=650</id>
		<title>Medidas estáticas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=650"/>
		<updated>2016-07-31T23:31:06Z</updated>

		<summary type="html">&lt;p&gt;Rmoreira: /* Encontrando vizinhos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em dinâmica molecular, medidas estáticas são medidas realizadas em um passo específico de tempo da simulação.&lt;br /&gt;
&lt;br /&gt;
=Pair Distribution Function=&lt;br /&gt;
&lt;br /&gt;
[[Image:Gr.png|thumb|300px|right|Representação do cálculo numérico de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
A ''Pair Distribution Function'' , ou &amp;quot;&amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;&amp;quot;, é uma função que estima o quão provável é encontrar duas partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; dentro de um sistema de várias partículas.&lt;br /&gt;
&lt;br /&gt;
Em um sistema de &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas, o &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt; é definido como a média do número de partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
	g(r)=\frac{V}{N^2}\langle\sum_{i=1}^N\sum_{j\neq i}^N\delta(r-|r_i-r_j|)  \rangle&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Numéricamente pode ser interpretado como a média do número de pares de partículas a uma distância entre &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;r+\Delta r&amp;lt;/math&amp;gt; pesado pelo volume/área desta região.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	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]&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde &amp;lt;math&amp;gt;V_t&amp;lt;/math&amp;gt; é o/a volume/área total e &amp;lt;math&amp;gt;rect&amp;lt;/math&amp;gt; é a função retangular.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Em resumo, o &amp;lt;math&amp;gt;g(r,\Delta r)&amp;lt;/math&amp;gt; é a média dos [[Histogramas_e_Densidade_de_Probabilidade|histogramas]] do número de partículas em um ''bin''  de largura &amp;lt;math&amp;gt;\Delta r&amp;lt;/math&amp;gt; a uma &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; feitos para cada partícula no sistema pesado pelo volume/área deste ''bin''.&lt;br /&gt;
&lt;br /&gt;
==== Construção do Código ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Resultados ====&lt;br /&gt;
&lt;br /&gt;
[[Image:GR-D.png|400px|Resultado do cálculo de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
=Referências=&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Psi 6=&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;caixa&amp;quot; em que as partículas estão localizadas e então localizar possíveis &amp;quot;defeitos&amp;quot; no padrão hexagonal.&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\frac{\pi}{3}&amp;lt;/math&amp;gt;. Buscando uma relação em que esta situação seja a situação de &amp;lt;math&amp;gt;\psi_6 = 1&amp;lt;/math&amp;gt;, é possível definir que o &amp;lt;math&amp;gt;\psi_6 &amp;lt;/math&amp;gt; vale:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\psi_6=\frac{1}{6}\sum_i^ncos(6\theta_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\theta=\frac{\pi}{3}&amp;lt;/math&amp;gt; resulte em um valor de &amp;lt;math&amp;gt;\psi_6=1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Implementação Computacional ==&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Encontrando vizinhos ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[Image:Neighbors.jpg|thumb|200px|right|Definição de vizinhança;]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
O método aqui citado é pouco otimizado, pois utiliza-se um for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;, 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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;) baseando-se em outro valor já calculado, a medida do g(r), desta forma o valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; resultará em um valor razoável ( &amp;gt;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.&lt;br /&gt;
&lt;br /&gt;
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: &amp;quot;neighborsX&amp;quot; (que guarda a posição X do vizinho), &amp;quot;neighborsY&amp;quot;(que guarda a posição Y do vizinho) e &amp;quot;dNeighbors&amp;quot;(que guarda a distância do vizinho) e então faz-se o for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; buscando-se as distância menores que o raio de corte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(i=0;i&amp;lt;NP;i++){&lt;br /&gt;
		xOrg=xx[i];&lt;br /&gt;
		yOrg=yy[i];&lt;br /&gt;
		for(j=0;j&amp;lt;NP;j++){&lt;br /&gt;
			x2=xx[j];&lt;br /&gt;
			y2=yy[j];&lt;br /&gt;
			if(i!=j){&lt;br /&gt;
				if(distance(xOrg,yOrg,x2,y2)&amp;lt;radiusLimit)&lt;br /&gt;
				{	&lt;br /&gt;
					neighborsX[k]=x2;&lt;br /&gt;
					neighborsY[k]=y2;&lt;br /&gt;
					dNeighbors[k]=distance(x2,y2,xOrg,yOrg);&lt;br /&gt;
					k+=1;&lt;br /&gt;
				}&lt;br /&gt;
			}		&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Portanto após esse algoritmo, temos guardadas as posições das partículas mais próximas. É importante ressaltar que o &amp;quot;for&amp;quot; em partícula-teste ainda não foi fechado, e ainda dentro deste mesmo loop serão calculados os valores de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Calculando o Psi 6 ===&lt;br /&gt;
&lt;br /&gt;
Tendo os valores de X e Y dos vizinhos da partícula-teste, podemos proceder para o cálculo do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;. 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 &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt; e será dado pela seguinte relação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\phi_i=arctg\left(\frac{\Delta Y}{\Delta X}\right)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na implementação em código fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(j=0;j&amp;lt;k;j++){&lt;br /&gt;
		delX=neighborsX[j]-xx[i];&lt;br /&gt;
		delY=neighborsY[j]-yy[i];&lt;br /&gt;
&lt;br /&gt;
                //Condições de contorno periódicas&lt;br /&gt;
		delX=delX-rint(delX/Lx)*Lx; &lt;br /&gt;
        	delY=delY-rint(delY/Ly)*Ly;&lt;br /&gt;
                // --- //&lt;br /&gt;
&lt;br /&gt;
		angle[j]=atan2(delY,delX);&lt;br /&gt;
		if (angle[j]&amp;lt;0)&lt;br /&gt;
			angle[j]=2*PI+angle[j];&lt;br /&gt;
                psix[i]=0;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora somente precisa-se realizar um algoritmo que ordene o vetor &amp;quot;angle&amp;quot; do menor para o maior ângulo, utilizando algoritmos de ordenamento (bubblesort, quicksort, etc) desta forma é possível calcular os &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Feito o ordenamento do vetor, basta calcular a média do valor do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; de cada vizinho. Para isto, precisamos calcular os valores de &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt; em função dos &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt;, basta realizar a subtração do próximo vizinho no vetor pelo valor do ângulo do vizinho atual, dessa forma: &amp;lt;math&amp;gt; \theta_i = \psi_{i+1} - \psi_i &amp;lt;/math&amp;gt; com exceção do último vizinho, que será o ângulo dele menos o do primeiro, desta forma a implementação fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		firstAngle=angle[0];	&lt;br /&gt;
		for(j=0;j&amp;lt;k-1;j++){ &lt;br /&gt;
			angle[j]=cos(6.*(angle[j+1]-angle[j]));&lt;br /&gt;
		}		&lt;br /&gt;
		angle[k-1]=cos(6.*(firstAngle+2*PI-angle[k-1]));&lt;br /&gt;
		for(j=0;j&amp;lt;k;j++){ &lt;br /&gt;
			psix[i]+=angle[j]/k.;&lt;br /&gt;
		}	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E então está calculado o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, para facilitar a implementação é recomendado que este algoritmo seja uma função dentro de seu código e desta forma retorne o vetor &amp;quot;psix&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Exemplos ===&lt;br /&gt;
&lt;br /&gt;
Para o caso de um potencial de Lennard-Jones, é possível fazer observar resultados de mapas de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, isto é, um mapa que mostra para cada partícula o seu valor da medida, da seguinte forma:&lt;/div&gt;</summary>
		<author><name>Rmoreira</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=649</id>
		<title>Medidas estáticas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=649"/>
		<updated>2016-07-31T23:30:45Z</updated>

		<summary type="html">&lt;p&gt;Rmoreira: /* Encontrando vizinhos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em dinâmica molecular, medidas estáticas são medidas realizadas em um passo específico de tempo da simulação.&lt;br /&gt;
&lt;br /&gt;
=Pair Distribution Function=&lt;br /&gt;
&lt;br /&gt;
[[Image:Gr.png|thumb|300px|right|Representação do cálculo numérico de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
A ''Pair Distribution Function'' , ou &amp;quot;&amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;&amp;quot;, é uma função que estima o quão provável é encontrar duas partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; dentro de um sistema de várias partículas.&lt;br /&gt;
&lt;br /&gt;
Em um sistema de &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas, o &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt; é definido como a média do número de partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
	g(r)=\frac{V}{N^2}\langle\sum_{i=1}^N\sum_{j\neq i}^N\delta(r-|r_i-r_j|)  \rangle&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Numéricamente pode ser interpretado como a média do número de pares de partículas a uma distância entre &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;r+\Delta r&amp;lt;/math&amp;gt; pesado pelo volume/área desta região.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	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]&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde &amp;lt;math&amp;gt;V_t&amp;lt;/math&amp;gt; é o/a volume/área total e &amp;lt;math&amp;gt;rect&amp;lt;/math&amp;gt; é a função retangular.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Em resumo, o &amp;lt;math&amp;gt;g(r,\Delta r)&amp;lt;/math&amp;gt; é a média dos [[Histogramas_e_Densidade_de_Probabilidade|histogramas]] do número de partículas em um ''bin''  de largura &amp;lt;math&amp;gt;\Delta r&amp;lt;/math&amp;gt; a uma &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; feitos para cada partícula no sistema pesado pelo volume/área deste ''bin''.&lt;br /&gt;
&lt;br /&gt;
==== Construção do Código ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Resultados ====&lt;br /&gt;
&lt;br /&gt;
[[Image:GR-D.png|400px|Resultado do cálculo de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
=Referências=&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Psi 6=&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;caixa&amp;quot; em que as partículas estão localizadas e então localizar possíveis &amp;quot;defeitos&amp;quot; no padrão hexagonal.&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\frac{\pi}{3}&amp;lt;/math&amp;gt;. Buscando uma relação em que esta situação seja a situação de &amp;lt;math&amp;gt;\psi_6 = 1&amp;lt;/math&amp;gt;, é possível definir que o &amp;lt;math&amp;gt;\psi_6 &amp;lt;/math&amp;gt; vale:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\psi_6=\frac{1}{6}\sum_i^ncos(6\theta_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\theta=\frac{\pi}{3}&amp;lt;/math&amp;gt; resulte em um valor de &amp;lt;math&amp;gt;\psi_6=1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Implementação Computacional ==&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Encontrando vizinhos ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[Image:Neighbors.jpg|200px|right|Definição de vizinhança;]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
O método aqui citado é pouco otimizado, pois utiliza-se um for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;, 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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;) baseando-se em outro valor já calculado, a medida do g(r), desta forma o valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; resultará em um valor razoável ( &amp;gt;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.&lt;br /&gt;
&lt;br /&gt;
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: &amp;quot;neighborsX&amp;quot; (que guarda a posição X do vizinho), &amp;quot;neighborsY&amp;quot;(que guarda a posição Y do vizinho) e &amp;quot;dNeighbors&amp;quot;(que guarda a distância do vizinho) e então faz-se o for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; buscando-se as distância menores que o raio de corte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(i=0;i&amp;lt;NP;i++){&lt;br /&gt;
		xOrg=xx[i];&lt;br /&gt;
		yOrg=yy[i];&lt;br /&gt;
		for(j=0;j&amp;lt;NP;j++){&lt;br /&gt;
			x2=xx[j];&lt;br /&gt;
			y2=yy[j];&lt;br /&gt;
			if(i!=j){&lt;br /&gt;
				if(distance(xOrg,yOrg,x2,y2)&amp;lt;radiusLimit)&lt;br /&gt;
				{	&lt;br /&gt;
					neighborsX[k]=x2;&lt;br /&gt;
					neighborsY[k]=y2;&lt;br /&gt;
					dNeighbors[k]=distance(x2,y2,xOrg,yOrg);&lt;br /&gt;
					k+=1;&lt;br /&gt;
				}&lt;br /&gt;
			}		&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Portanto após esse algoritmo, temos guardadas as posições das partículas mais próximas. É importante ressaltar que o &amp;quot;for&amp;quot; em partícula-teste ainda não foi fechado, e ainda dentro deste mesmo loop serão calculados os valores de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Calculando o Psi 6 ===&lt;br /&gt;
&lt;br /&gt;
Tendo os valores de X e Y dos vizinhos da partícula-teste, podemos proceder para o cálculo do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;. 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 &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt; e será dado pela seguinte relação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\phi_i=arctg\left(\frac{\Delta Y}{\Delta X}\right)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na implementação em código fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(j=0;j&amp;lt;k;j++){&lt;br /&gt;
		delX=neighborsX[j]-xx[i];&lt;br /&gt;
		delY=neighborsY[j]-yy[i];&lt;br /&gt;
&lt;br /&gt;
                //Condições de contorno periódicas&lt;br /&gt;
		delX=delX-rint(delX/Lx)*Lx; &lt;br /&gt;
        	delY=delY-rint(delY/Ly)*Ly;&lt;br /&gt;
                // --- //&lt;br /&gt;
&lt;br /&gt;
		angle[j]=atan2(delY,delX);&lt;br /&gt;
		if (angle[j]&amp;lt;0)&lt;br /&gt;
			angle[j]=2*PI+angle[j];&lt;br /&gt;
                psix[i]=0;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora somente precisa-se realizar um algoritmo que ordene o vetor &amp;quot;angle&amp;quot; do menor para o maior ângulo, utilizando algoritmos de ordenamento (bubblesort, quicksort, etc) desta forma é possível calcular os &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Feito o ordenamento do vetor, basta calcular a média do valor do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; de cada vizinho. Para isto, precisamos calcular os valores de &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt; em função dos &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt;, basta realizar a subtração do próximo vizinho no vetor pelo valor do ângulo do vizinho atual, dessa forma: &amp;lt;math&amp;gt; \theta_i = \psi_{i+1} - \psi_i &amp;lt;/math&amp;gt; com exceção do último vizinho, que será o ângulo dele menos o do primeiro, desta forma a implementação fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		firstAngle=angle[0];	&lt;br /&gt;
		for(j=0;j&amp;lt;k-1;j++){ &lt;br /&gt;
			angle[j]=cos(6.*(angle[j+1]-angle[j]));&lt;br /&gt;
		}		&lt;br /&gt;
		angle[k-1]=cos(6.*(firstAngle+2*PI-angle[k-1]));&lt;br /&gt;
		for(j=0;j&amp;lt;k;j++){ &lt;br /&gt;
			psix[i]+=angle[j]/k.;&lt;br /&gt;
		}	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E então está calculado o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, para facilitar a implementação é recomendado que este algoritmo seja uma função dentro de seu código e desta forma retorne o vetor &amp;quot;psix&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Exemplos ===&lt;br /&gt;
&lt;br /&gt;
Para o caso de um potencial de Lennard-Jones, é possível fazer observar resultados de mapas de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, isto é, um mapa que mostra para cada partícula o seu valor da medida, da seguinte forma:&lt;/div&gt;</summary>
		<author><name>Rmoreira</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=648</id>
		<title>Medidas estáticas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=648"/>
		<updated>2016-07-31T23:30:10Z</updated>

		<summary type="html">&lt;p&gt;Rmoreira: /* Encontrando vizinhos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em dinâmica molecular, medidas estáticas são medidas realizadas em um passo específico de tempo da simulação.&lt;br /&gt;
&lt;br /&gt;
=Pair Distribution Function=&lt;br /&gt;
&lt;br /&gt;
[[Image:Gr.png|thumb|300px|right|Representação do cálculo numérico de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
A ''Pair Distribution Function'' , ou &amp;quot;&amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;&amp;quot;, é uma função que estima o quão provável é encontrar duas partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; dentro de um sistema de várias partículas.&lt;br /&gt;
&lt;br /&gt;
Em um sistema de &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas, o &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt; é definido como a média do número de partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
	g(r)=\frac{V}{N^2}\langle\sum_{i=1}^N\sum_{j\neq i}^N\delta(r-|r_i-r_j|)  \rangle&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Numéricamente pode ser interpretado como a média do número de pares de partículas a uma distância entre &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;r+\Delta r&amp;lt;/math&amp;gt; pesado pelo volume/área desta região.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	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]&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde &amp;lt;math&amp;gt;V_t&amp;lt;/math&amp;gt; é o/a volume/área total e &amp;lt;math&amp;gt;rect&amp;lt;/math&amp;gt; é a função retangular.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Em resumo, o &amp;lt;math&amp;gt;g(r,\Delta r)&amp;lt;/math&amp;gt; é a média dos [[Histogramas_e_Densidade_de_Probabilidade|histogramas]] do número de partículas em um ''bin''  de largura &amp;lt;math&amp;gt;\Delta r&amp;lt;/math&amp;gt; a uma &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; feitos para cada partícula no sistema pesado pelo volume/área deste ''bin''.&lt;br /&gt;
&lt;br /&gt;
==== Construção do Código ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Resultados ====&lt;br /&gt;
&lt;br /&gt;
[[Image:GR-D.png|400px|Resultado do cálculo de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
=Referências=&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Psi 6=&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;caixa&amp;quot; em que as partículas estão localizadas e então localizar possíveis &amp;quot;defeitos&amp;quot; no padrão hexagonal.&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\frac{\pi}{3}&amp;lt;/math&amp;gt;. Buscando uma relação em que esta situação seja a situação de &amp;lt;math&amp;gt;\psi_6 = 1&amp;lt;/math&amp;gt;, é possível definir que o &amp;lt;math&amp;gt;\psi_6 &amp;lt;/math&amp;gt; vale:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\psi_6=\frac{1}{6}\sum_i^ncos(6\theta_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\theta=\frac{\pi}{3}&amp;lt;/math&amp;gt; resulte em um valor de &amp;lt;math&amp;gt;\psi_6=1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Implementação Computacional ==&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Encontrando vizinhos ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[Image:Neighbors.jpg|200px|Definição de vizinhança;]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
O método aqui citado é pouco otimizado, pois utiliza-se um for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;, 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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;) baseando-se em outro valor já calculado, a medida do g(r), desta forma o valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; resultará em um valor razoável ( &amp;gt;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.&lt;br /&gt;
&lt;br /&gt;
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: &amp;quot;neighborsX&amp;quot; (que guarda a posição X do vizinho), &amp;quot;neighborsY&amp;quot;(que guarda a posição Y do vizinho) e &amp;quot;dNeighbors&amp;quot;(que guarda a distância do vizinho) e então faz-se o for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; buscando-se as distância menores que o raio de corte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(i=0;i&amp;lt;NP;i++){&lt;br /&gt;
		xOrg=xx[i];&lt;br /&gt;
		yOrg=yy[i];&lt;br /&gt;
		for(j=0;j&amp;lt;NP;j++){&lt;br /&gt;
			x2=xx[j];&lt;br /&gt;
			y2=yy[j];&lt;br /&gt;
			if(i!=j){&lt;br /&gt;
				if(distance(xOrg,yOrg,x2,y2)&amp;lt;radiusLimit)&lt;br /&gt;
				{	&lt;br /&gt;
					neighborsX[k]=x2;&lt;br /&gt;
					neighborsY[k]=y2;&lt;br /&gt;
					dNeighbors[k]=distance(x2,y2,xOrg,yOrg);&lt;br /&gt;
					k+=1;&lt;br /&gt;
				}&lt;br /&gt;
			}		&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Portanto após esse algoritmo, temos guardadas as posições das partículas mais próximas. É importante ressaltar que o &amp;quot;for&amp;quot; em partícula-teste ainda não foi fechado, e ainda dentro deste mesmo loop serão calculados os valores de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Calculando o Psi 6 ===&lt;br /&gt;
&lt;br /&gt;
Tendo os valores de X e Y dos vizinhos da partícula-teste, podemos proceder para o cálculo do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;. 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 &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt; e será dado pela seguinte relação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\phi_i=arctg\left(\frac{\Delta Y}{\Delta X}\right)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na implementação em código fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(j=0;j&amp;lt;k;j++){&lt;br /&gt;
		delX=neighborsX[j]-xx[i];&lt;br /&gt;
		delY=neighborsY[j]-yy[i];&lt;br /&gt;
&lt;br /&gt;
                //Condições de contorno periódicas&lt;br /&gt;
		delX=delX-rint(delX/Lx)*Lx; &lt;br /&gt;
        	delY=delY-rint(delY/Ly)*Ly;&lt;br /&gt;
                // --- //&lt;br /&gt;
&lt;br /&gt;
		angle[j]=atan2(delY,delX);&lt;br /&gt;
		if (angle[j]&amp;lt;0)&lt;br /&gt;
			angle[j]=2*PI+angle[j];&lt;br /&gt;
                psix[i]=0;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora somente precisa-se realizar um algoritmo que ordene o vetor &amp;quot;angle&amp;quot; do menor para o maior ângulo, utilizando algoritmos de ordenamento (bubblesort, quicksort, etc) desta forma é possível calcular os &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Feito o ordenamento do vetor, basta calcular a média do valor do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; de cada vizinho. Para isto, precisamos calcular os valores de &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt; em função dos &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt;, basta realizar a subtração do próximo vizinho no vetor pelo valor do ângulo do vizinho atual, dessa forma: &amp;lt;math&amp;gt; \theta_i = \psi_{i+1} - \psi_i &amp;lt;/math&amp;gt; com exceção do último vizinho, que será o ângulo dele menos o do primeiro, desta forma a implementação fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		firstAngle=angle[0];	&lt;br /&gt;
		for(j=0;j&amp;lt;k-1;j++){ &lt;br /&gt;
			angle[j]=cos(6.*(angle[j+1]-angle[j]));&lt;br /&gt;
		}		&lt;br /&gt;
		angle[k-1]=cos(6.*(firstAngle+2*PI-angle[k-1]));&lt;br /&gt;
		for(j=0;j&amp;lt;k;j++){ &lt;br /&gt;
			psix[i]+=angle[j]/k.;&lt;br /&gt;
		}	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E então está calculado o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, para facilitar a implementação é recomendado que este algoritmo seja uma função dentro de seu código e desta forma retorne o vetor &amp;quot;psix&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Exemplos ===&lt;br /&gt;
&lt;br /&gt;
Para o caso de um potencial de Lennard-Jones, é possível fazer observar resultados de mapas de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, isto é, um mapa que mostra para cada partícula o seu valor da medida, da seguinte forma:&lt;/div&gt;</summary>
		<author><name>Rmoreira</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=647</id>
		<title>Medidas estáticas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=647"/>
		<updated>2016-07-31T23:30:00Z</updated>

		<summary type="html">&lt;p&gt;Rmoreira: /* Encontrando vizinhos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em dinâmica molecular, medidas estáticas são medidas realizadas em um passo específico de tempo da simulação.&lt;br /&gt;
&lt;br /&gt;
=Pair Distribution Function=&lt;br /&gt;
&lt;br /&gt;
[[Image:Gr.png|thumb|300px|right|Representação do cálculo numérico de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
A ''Pair Distribution Function'' , ou &amp;quot;&amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;&amp;quot;, é uma função que estima o quão provável é encontrar duas partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; dentro de um sistema de várias partículas.&lt;br /&gt;
&lt;br /&gt;
Em um sistema de &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas, o &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt; é definido como a média do número de partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
	g(r)=\frac{V}{N^2}\langle\sum_{i=1}^N\sum_{j\neq i}^N\delta(r-|r_i-r_j|)  \rangle&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Numéricamente pode ser interpretado como a média do número de pares de partículas a uma distância entre &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;r+\Delta r&amp;lt;/math&amp;gt; pesado pelo volume/área desta região.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	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]&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde &amp;lt;math&amp;gt;V_t&amp;lt;/math&amp;gt; é o/a volume/área total e &amp;lt;math&amp;gt;rect&amp;lt;/math&amp;gt; é a função retangular.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Em resumo, o &amp;lt;math&amp;gt;g(r,\Delta r)&amp;lt;/math&amp;gt; é a média dos [[Histogramas_e_Densidade_de_Probabilidade|histogramas]] do número de partículas em um ''bin''  de largura &amp;lt;math&amp;gt;\Delta r&amp;lt;/math&amp;gt; a uma &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; feitos para cada partícula no sistema pesado pelo volume/área deste ''bin''.&lt;br /&gt;
&lt;br /&gt;
==== Construção do Código ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Resultados ====&lt;br /&gt;
&lt;br /&gt;
[[Image:GR-D.png|400px|Resultado do cálculo de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
=Referências=&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Psi 6=&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;caixa&amp;quot; em que as partículas estão localizadas e então localizar possíveis &amp;quot;defeitos&amp;quot; no padrão hexagonal.&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\frac{\pi}{3}&amp;lt;/math&amp;gt;. Buscando uma relação em que esta situação seja a situação de &amp;lt;math&amp;gt;\psi_6 = 1&amp;lt;/math&amp;gt;, é possível definir que o &amp;lt;math&amp;gt;\psi_6 &amp;lt;/math&amp;gt; vale:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\psi_6=\frac{1}{6}\sum_i^ncos(6\theta_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\theta=\frac{\pi}{3}&amp;lt;/math&amp;gt; resulte em um valor de &amp;lt;math&amp;gt;\psi_6=1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Implementação Computacional ==&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Encontrando vizinhos ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[Image:Neighbors.jpg|80px|Definição de vizinhança;]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
O método aqui citado é pouco otimizado, pois utiliza-se um for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;, 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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;) baseando-se em outro valor já calculado, a medida do g(r), desta forma o valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; resultará em um valor razoável ( &amp;gt;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.&lt;br /&gt;
&lt;br /&gt;
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: &amp;quot;neighborsX&amp;quot; (que guarda a posição X do vizinho), &amp;quot;neighborsY&amp;quot;(que guarda a posição Y do vizinho) e &amp;quot;dNeighbors&amp;quot;(que guarda a distância do vizinho) e então faz-se o for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; buscando-se as distância menores que o raio de corte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(i=0;i&amp;lt;NP;i++){&lt;br /&gt;
		xOrg=xx[i];&lt;br /&gt;
		yOrg=yy[i];&lt;br /&gt;
		for(j=0;j&amp;lt;NP;j++){&lt;br /&gt;
			x2=xx[j];&lt;br /&gt;
			y2=yy[j];&lt;br /&gt;
			if(i!=j){&lt;br /&gt;
				if(distance(xOrg,yOrg,x2,y2)&amp;lt;radiusLimit)&lt;br /&gt;
				{	&lt;br /&gt;
					neighborsX[k]=x2;&lt;br /&gt;
					neighborsY[k]=y2;&lt;br /&gt;
					dNeighbors[k]=distance(x2,y2,xOrg,yOrg);&lt;br /&gt;
					k+=1;&lt;br /&gt;
				}&lt;br /&gt;
			}		&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Portanto após esse algoritmo, temos guardadas as posições das partículas mais próximas. É importante ressaltar que o &amp;quot;for&amp;quot; em partícula-teste ainda não foi fechado, e ainda dentro deste mesmo loop serão calculados os valores de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Calculando o Psi 6 ===&lt;br /&gt;
&lt;br /&gt;
Tendo os valores de X e Y dos vizinhos da partícula-teste, podemos proceder para o cálculo do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;. 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 &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt; e será dado pela seguinte relação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\phi_i=arctg\left(\frac{\Delta Y}{\Delta X}\right)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na implementação em código fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(j=0;j&amp;lt;k;j++){&lt;br /&gt;
		delX=neighborsX[j]-xx[i];&lt;br /&gt;
		delY=neighborsY[j]-yy[i];&lt;br /&gt;
&lt;br /&gt;
                //Condições de contorno periódicas&lt;br /&gt;
		delX=delX-rint(delX/Lx)*Lx; &lt;br /&gt;
        	delY=delY-rint(delY/Ly)*Ly;&lt;br /&gt;
                // --- //&lt;br /&gt;
&lt;br /&gt;
		angle[j]=atan2(delY,delX);&lt;br /&gt;
		if (angle[j]&amp;lt;0)&lt;br /&gt;
			angle[j]=2*PI+angle[j];&lt;br /&gt;
                psix[i]=0;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora somente precisa-se realizar um algoritmo que ordene o vetor &amp;quot;angle&amp;quot; do menor para o maior ângulo, utilizando algoritmos de ordenamento (bubblesort, quicksort, etc) desta forma é possível calcular os &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Feito o ordenamento do vetor, basta calcular a média do valor do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; de cada vizinho. Para isto, precisamos calcular os valores de &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt; em função dos &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt;, basta realizar a subtração do próximo vizinho no vetor pelo valor do ângulo do vizinho atual, dessa forma: &amp;lt;math&amp;gt; \theta_i = \psi_{i+1} - \psi_i &amp;lt;/math&amp;gt; com exceção do último vizinho, que será o ângulo dele menos o do primeiro, desta forma a implementação fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		firstAngle=angle[0];	&lt;br /&gt;
		for(j=0;j&amp;lt;k-1;j++){ &lt;br /&gt;
			angle[j]=cos(6.*(angle[j+1]-angle[j]));&lt;br /&gt;
		}		&lt;br /&gt;
		angle[k-1]=cos(6.*(firstAngle+2*PI-angle[k-1]));&lt;br /&gt;
		for(j=0;j&amp;lt;k;j++){ &lt;br /&gt;
			psix[i]+=angle[j]/k.;&lt;br /&gt;
		}	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E então está calculado o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, para facilitar a implementação é recomendado que este algoritmo seja uma função dentro de seu código e desta forma retorne o vetor &amp;quot;psix&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Exemplos ===&lt;br /&gt;
&lt;br /&gt;
Para o caso de um potencial de Lennard-Jones, é possível fazer observar resultados de mapas de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, isto é, um mapa que mostra para cada partícula o seu valor da medida, da seguinte forma:&lt;/div&gt;</summary>
		<author><name>Rmoreira</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=646</id>
		<title>Medidas estáticas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=646"/>
		<updated>2016-07-31T23:29:50Z</updated>

		<summary type="html">&lt;p&gt;Rmoreira: /* Implementação Computacional */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em dinâmica molecular, medidas estáticas são medidas realizadas em um passo específico de tempo da simulação.&lt;br /&gt;
&lt;br /&gt;
=Pair Distribution Function=&lt;br /&gt;
&lt;br /&gt;
[[Image:Gr.png|thumb|300px|right|Representação do cálculo numérico de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
A ''Pair Distribution Function'' , ou &amp;quot;&amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;&amp;quot;, é uma função que estima o quão provável é encontrar duas partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; dentro de um sistema de várias partículas.&lt;br /&gt;
&lt;br /&gt;
Em um sistema de &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas, o &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt; é definido como a média do número de partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
	g(r)=\frac{V}{N^2}\langle\sum_{i=1}^N\sum_{j\neq i}^N\delta(r-|r_i-r_j|)  \rangle&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Numéricamente pode ser interpretado como a média do número de pares de partículas a uma distância entre &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;r+\Delta r&amp;lt;/math&amp;gt; pesado pelo volume/área desta região.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	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]&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde &amp;lt;math&amp;gt;V_t&amp;lt;/math&amp;gt; é o/a volume/área total e &amp;lt;math&amp;gt;rect&amp;lt;/math&amp;gt; é a função retangular.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Em resumo, o &amp;lt;math&amp;gt;g(r,\Delta r)&amp;lt;/math&amp;gt; é a média dos [[Histogramas_e_Densidade_de_Probabilidade|histogramas]] do número de partículas em um ''bin''  de largura &amp;lt;math&amp;gt;\Delta r&amp;lt;/math&amp;gt; a uma &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; feitos para cada partícula no sistema pesado pelo volume/área deste ''bin''.&lt;br /&gt;
&lt;br /&gt;
==== Construção do Código ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Resultados ====&lt;br /&gt;
&lt;br /&gt;
[[Image:GR-D.png|400px|Resultado do cálculo de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
=Referências=&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Psi 6=&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;caixa&amp;quot; em que as partículas estão localizadas e então localizar possíveis &amp;quot;defeitos&amp;quot; no padrão hexagonal.&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\frac{\pi}{3}&amp;lt;/math&amp;gt;. Buscando uma relação em que esta situação seja a situação de &amp;lt;math&amp;gt;\psi_6 = 1&amp;lt;/math&amp;gt;, é possível definir que o &amp;lt;math&amp;gt;\psi_6 &amp;lt;/math&amp;gt; vale:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\psi_6=\frac{1}{6}\sum_i^ncos(6\theta_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\theta=\frac{\pi}{3}&amp;lt;/math&amp;gt; resulte em um valor de &amp;lt;math&amp;gt;\psi_6=1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Implementação Computacional ==&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Encontrando vizinhos ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[Image:Neighbors.jpg|400px|Definição de vizinhança;]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
O método aqui citado é pouco otimizado, pois utiliza-se um for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;, 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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;) baseando-se em outro valor já calculado, a medida do g(r), desta forma o valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; resultará em um valor razoável ( &amp;gt;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.&lt;br /&gt;
&lt;br /&gt;
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: &amp;quot;neighborsX&amp;quot; (que guarda a posição X do vizinho), &amp;quot;neighborsY&amp;quot;(que guarda a posição Y do vizinho) e &amp;quot;dNeighbors&amp;quot;(que guarda a distância do vizinho) e então faz-se o for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; buscando-se as distância menores que o raio de corte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(i=0;i&amp;lt;NP;i++){&lt;br /&gt;
		xOrg=xx[i];&lt;br /&gt;
		yOrg=yy[i];&lt;br /&gt;
		for(j=0;j&amp;lt;NP;j++){&lt;br /&gt;
			x2=xx[j];&lt;br /&gt;
			y2=yy[j];&lt;br /&gt;
			if(i!=j){&lt;br /&gt;
				if(distance(xOrg,yOrg,x2,y2)&amp;lt;radiusLimit)&lt;br /&gt;
				{	&lt;br /&gt;
					neighborsX[k]=x2;&lt;br /&gt;
					neighborsY[k]=y2;&lt;br /&gt;
					dNeighbors[k]=distance(x2,y2,xOrg,yOrg);&lt;br /&gt;
					k+=1;&lt;br /&gt;
				}&lt;br /&gt;
			}		&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Portanto após esse algoritmo, temos guardadas as posições das partículas mais próximas. É importante ressaltar que o &amp;quot;for&amp;quot; em partícula-teste ainda não foi fechado, e ainda dentro deste mesmo loop serão calculados os valores de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Calculando o Psi 6 ===&lt;br /&gt;
&lt;br /&gt;
Tendo os valores de X e Y dos vizinhos da partícula-teste, podemos proceder para o cálculo do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;. 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 &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt; e será dado pela seguinte relação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\phi_i=arctg\left(\frac{\Delta Y}{\Delta X}\right)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na implementação em código fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(j=0;j&amp;lt;k;j++){&lt;br /&gt;
		delX=neighborsX[j]-xx[i];&lt;br /&gt;
		delY=neighborsY[j]-yy[i];&lt;br /&gt;
&lt;br /&gt;
                //Condições de contorno periódicas&lt;br /&gt;
		delX=delX-rint(delX/Lx)*Lx; &lt;br /&gt;
        	delY=delY-rint(delY/Ly)*Ly;&lt;br /&gt;
                // --- //&lt;br /&gt;
&lt;br /&gt;
		angle[j]=atan2(delY,delX);&lt;br /&gt;
		if (angle[j]&amp;lt;0)&lt;br /&gt;
			angle[j]=2*PI+angle[j];&lt;br /&gt;
                psix[i]=0;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora somente precisa-se realizar um algoritmo que ordene o vetor &amp;quot;angle&amp;quot; do menor para o maior ângulo, utilizando algoritmos de ordenamento (bubblesort, quicksort, etc) desta forma é possível calcular os &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Feito o ordenamento do vetor, basta calcular a média do valor do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; de cada vizinho. Para isto, precisamos calcular os valores de &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt; em função dos &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt;, basta realizar a subtração do próximo vizinho no vetor pelo valor do ângulo do vizinho atual, dessa forma: &amp;lt;math&amp;gt; \theta_i = \psi_{i+1} - \psi_i &amp;lt;/math&amp;gt; com exceção do último vizinho, que será o ângulo dele menos o do primeiro, desta forma a implementação fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		firstAngle=angle[0];	&lt;br /&gt;
		for(j=0;j&amp;lt;k-1;j++){ &lt;br /&gt;
			angle[j]=cos(6.*(angle[j+1]-angle[j]));&lt;br /&gt;
		}		&lt;br /&gt;
		angle[k-1]=cos(6.*(firstAngle+2*PI-angle[k-1]));&lt;br /&gt;
		for(j=0;j&amp;lt;k;j++){ &lt;br /&gt;
			psix[i]+=angle[j]/k.;&lt;br /&gt;
		}	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E então está calculado o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, para facilitar a implementação é recomendado que este algoritmo seja uma função dentro de seu código e desta forma retorne o vetor &amp;quot;psix&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Exemplos ===&lt;br /&gt;
&lt;br /&gt;
Para o caso de um potencial de Lennard-Jones, é possível fazer observar resultados de mapas de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, isto é, um mapa que mostra para cada partícula o seu valor da medida, da seguinte forma:&lt;/div&gt;</summary>
		<author><name>Rmoreira</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Neighbors.jpg&amp;diff=645</id>
		<title>Arquivo:Neighbors.jpg</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Neighbors.jpg&amp;diff=645"/>
		<updated>2016-07-31T23:29:37Z</updated>

		<summary type="html">&lt;p&gt;Rmoreira: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rmoreira</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=644</id>
		<title>Medidas estáticas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=644"/>
		<updated>2016-07-31T23:27:32Z</updated>

		<summary type="html">&lt;p&gt;Rmoreira: /* Implementação Computacional */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em dinâmica molecular, medidas estáticas são medidas realizadas em um passo específico de tempo da simulação.&lt;br /&gt;
&lt;br /&gt;
=Pair Distribution Function=&lt;br /&gt;
&lt;br /&gt;
[[Image:Gr.png|thumb|300px|right|Representação do cálculo numérico de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
A ''Pair Distribution Function'' , ou &amp;quot;&amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;&amp;quot;, é uma função que estima o quão provável é encontrar duas partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; dentro de um sistema de várias partículas.&lt;br /&gt;
&lt;br /&gt;
Em um sistema de &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas, o &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt; é definido como a média do número de partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
	g(r)=\frac{V}{N^2}\langle\sum_{i=1}^N\sum_{j\neq i}^N\delta(r-|r_i-r_j|)  \rangle&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Numéricamente pode ser interpretado como a média do número de pares de partículas a uma distância entre &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;r+\Delta r&amp;lt;/math&amp;gt; pesado pelo volume/área desta região.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	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]&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde &amp;lt;math&amp;gt;V_t&amp;lt;/math&amp;gt; é o/a volume/área total e &amp;lt;math&amp;gt;rect&amp;lt;/math&amp;gt; é a função retangular.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Em resumo, o &amp;lt;math&amp;gt;g(r,\Delta r)&amp;lt;/math&amp;gt; é a média dos [[Histogramas_e_Densidade_de_Probabilidade|histogramas]] do número de partículas em um ''bin''  de largura &amp;lt;math&amp;gt;\Delta r&amp;lt;/math&amp;gt; a uma &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; feitos para cada partícula no sistema pesado pelo volume/área deste ''bin''.&lt;br /&gt;
&lt;br /&gt;
==== Construção do Código ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Resultados ====&lt;br /&gt;
&lt;br /&gt;
[[Image:GR-D.png|400px|Resultado do cálculo de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
=Referências=&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Psi 6=&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;caixa&amp;quot; em que as partículas estão localizadas e então localizar possíveis &amp;quot;defeitos&amp;quot; no padrão hexagonal.&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\frac{\pi}{3}&amp;lt;/math&amp;gt;. Buscando uma relação em que esta situação seja a situação de &amp;lt;math&amp;gt;\psi_6 = 1&amp;lt;/math&amp;gt;, é possível definir que o &amp;lt;math&amp;gt;\psi_6 &amp;lt;/math&amp;gt; vale:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\psi_6=\frac{1}{6}\sum_i^ncos(6\theta_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\theta=\frac{\pi}{3}&amp;lt;/math&amp;gt; resulte em um valor de &amp;lt;math&amp;gt;\psi_6=1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Implementação Computacional ==&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Encontrando vizinhos ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[Image:neighbors.jpg|400px|Definição de vizinhança;]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
O método aqui citado é pouco otimizado, pois utiliza-se um for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;, 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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;) baseando-se em outro valor já calculado, a medida do g(r), desta forma o valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; resultará em um valor razoável ( &amp;gt;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.&lt;br /&gt;
&lt;br /&gt;
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: &amp;quot;neighborsX&amp;quot; (que guarda a posição X do vizinho), &amp;quot;neighborsY&amp;quot;(que guarda a posição Y do vizinho) e &amp;quot;dNeighbors&amp;quot;(que guarda a distância do vizinho) e então faz-se o for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; buscando-se as distância menores que o raio de corte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(i=0;i&amp;lt;NP;i++){&lt;br /&gt;
		xOrg=xx[i];&lt;br /&gt;
		yOrg=yy[i];&lt;br /&gt;
		for(j=0;j&amp;lt;NP;j++){&lt;br /&gt;
			x2=xx[j];&lt;br /&gt;
			y2=yy[j];&lt;br /&gt;
			if(i!=j){&lt;br /&gt;
				if(distance(xOrg,yOrg,x2,y2)&amp;lt;radiusLimit)&lt;br /&gt;
				{	&lt;br /&gt;
					neighborsX[k]=x2;&lt;br /&gt;
					neighborsY[k]=y2;&lt;br /&gt;
					dNeighbors[k]=distance(x2,y2,xOrg,yOrg);&lt;br /&gt;
					k+=1;&lt;br /&gt;
				}&lt;br /&gt;
			}		&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Portanto após esse algoritmo, temos guardadas as posições das partículas mais próximas. É importante ressaltar que o &amp;quot;for&amp;quot; em partícula-teste ainda não foi fechado, e ainda dentro deste mesmo loop serão calculados os valores de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Calculando o Psi 6 ===&lt;br /&gt;
&lt;br /&gt;
Tendo os valores de X e Y dos vizinhos da partícula-teste, podemos proceder para o cálculo do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;. 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 &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt; e será dado pela seguinte relação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\phi_i=arctg\left(\frac{\Delta Y}{\Delta X}\right)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na implementação em código fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(j=0;j&amp;lt;k;j++){&lt;br /&gt;
		delX=neighborsX[j]-xx[i];&lt;br /&gt;
		delY=neighborsY[j]-yy[i];&lt;br /&gt;
&lt;br /&gt;
                //Condições de contorno periódicas&lt;br /&gt;
		delX=delX-rint(delX/Lx)*Lx; &lt;br /&gt;
        	delY=delY-rint(delY/Ly)*Ly;&lt;br /&gt;
                // --- //&lt;br /&gt;
&lt;br /&gt;
		angle[j]=atan2(delY,delX);&lt;br /&gt;
		if (angle[j]&amp;lt;0)&lt;br /&gt;
			angle[j]=2*PI+angle[j];&lt;br /&gt;
                psix[i]=0;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora somente precisa-se realizar um algoritmo que ordene o vetor &amp;quot;angle&amp;quot; do menor para o maior ângulo, utilizando algoritmos de ordenamento (bubblesort, quicksort, etc) desta forma é possível calcular os &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Feito o ordenamento do vetor, basta calcular a média do valor do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; de cada vizinho. Para isto, precisamos calcular os valores de &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt; em função dos &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt;, basta realizar a subtração do próximo vizinho no vetor pelo valor do ângulo do vizinho atual, dessa forma: &amp;lt;math&amp;gt; \theta_i = \psi_{i+1} - \psi_i &amp;lt;/math&amp;gt; com exceção do último vizinho, que será o ângulo dele menos o do primeiro, desta forma a implementação fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		firstAngle=angle[0];	&lt;br /&gt;
		for(j=0;j&amp;lt;k-1;j++){ &lt;br /&gt;
			angle[j]=cos(6.*(angle[j+1]-angle[j]));&lt;br /&gt;
		}		&lt;br /&gt;
		angle[k-1]=cos(6.*(firstAngle+2*PI-angle[k-1]));&lt;br /&gt;
		for(j=0;j&amp;lt;k;j++){ &lt;br /&gt;
			psix[i]+=angle[j]/k.;&lt;br /&gt;
		}	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E então está calculado o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, para facilitar a implementação é recomendado que este algoritmo seja uma função dentro de seu código e desta forma retorne o vetor &amp;quot;psix&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Exemplos ===&lt;br /&gt;
&lt;br /&gt;
Para o caso de um potencial de Lennard-Jones, é possível fazer observar resultados de mapas de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, isto é, um mapa que mostra para cada partícula o seu valor da medida, da seguinte forma:&lt;/div&gt;</summary>
		<author><name>Rmoreira</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=643</id>
		<title>Medidas estáticas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=643"/>
		<updated>2016-07-31T20:08:10Z</updated>

		<summary type="html">&lt;p&gt;Rmoreira: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em dinâmica molecular, medidas estáticas são medidas realizadas em um passo específico de tempo da simulação.&lt;br /&gt;
&lt;br /&gt;
=Pair Distribution Function=&lt;br /&gt;
&lt;br /&gt;
[[Image:Gr.png|thumb|300px|right|Representação do cálculo numérico de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
A ''Pair Distribution Function'' , ou &amp;quot;&amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;&amp;quot;, é uma função que estima o quão provável é encontrar duas partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; dentro de um sistema de várias partículas.&lt;br /&gt;
&lt;br /&gt;
Em um sistema de &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas, o &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt; é definido como a média do número de partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
	g(r)=\frac{V}{N^2}\langle\sum_{i=1}^N\sum_{j\neq i}^N\delta(r-|r_i-r_j|)  \rangle&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Numéricamente pode ser interpretado como a média do número de pares de partículas a uma distância entre &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;r+\Delta r&amp;lt;/math&amp;gt; pesado pelo volume/área desta região.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	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]&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde &amp;lt;math&amp;gt;V_t&amp;lt;/math&amp;gt; é o/a volume/área total e &amp;lt;math&amp;gt;rect&amp;lt;/math&amp;gt; é a função retangular.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Em resumo, o &amp;lt;math&amp;gt;g(r,\Delta r)&amp;lt;/math&amp;gt; é a média dos [[Histogramas_e_Densidade_de_Probabilidade|histogramas]] do número de partículas em um ''bin''  de largura &amp;lt;math&amp;gt;\Delta r&amp;lt;/math&amp;gt; a uma &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; feitos para cada partícula no sistema pesado pelo volume/área deste ''bin''.&lt;br /&gt;
&lt;br /&gt;
==== Construção do Código ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Resultados ====&lt;br /&gt;
&lt;br /&gt;
[[Image:GR-D.png|400px|Resultado do cálculo de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
=Referências=&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Psi 6=&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;caixa&amp;quot; em que as partículas estão localizadas e então localizar possíveis &amp;quot;defeitos&amp;quot; no padrão hexagonal.&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\frac{\pi}{3}&amp;lt;/math&amp;gt;. Buscando uma relação em que esta situação seja a situação de &amp;lt;math&amp;gt;\psi_6 = 1&amp;lt;/math&amp;gt;, é possível definir que o &amp;lt;math&amp;gt;\psi_6 &amp;lt;/math&amp;gt; vale:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\psi_6=\frac{1}{6}\sum_i^ncos(6\theta_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\theta=\frac{\pi}{3}&amp;lt;/math&amp;gt; resulte em um valor de &amp;lt;math&amp;gt;\psi_6=1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Implementação Computacional ==&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Encontrando vizinhos ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
O método aqui citado é pouco otimizado, pois utiliza-se um for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;, 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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;) baseando-se em outro valor já calculado, a medida do g(r), desta forma o valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; resultará em um valor razoável ( &amp;gt;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.&lt;br /&gt;
&lt;br /&gt;
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: &amp;quot;neighborsX&amp;quot; (que guarda a posição X do vizinho), &amp;quot;neighborsY&amp;quot;(que guarda a posição Y do vizinho) e &amp;quot;dNeighbors&amp;quot;(que guarda a distância do vizinho) e então faz-se o for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; buscando-se as distância menores que o raio de corte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(i=0;i&amp;lt;NP;i++){&lt;br /&gt;
		xOrg=xx[i];&lt;br /&gt;
		yOrg=yy[i];&lt;br /&gt;
		for(j=0;j&amp;lt;NP;j++){&lt;br /&gt;
			x2=xx[j];&lt;br /&gt;
			y2=yy[j];&lt;br /&gt;
			if(i!=j){&lt;br /&gt;
				if(distance(xOrg,yOrg,x2,y2)&amp;lt;radiusLimit)&lt;br /&gt;
				{	&lt;br /&gt;
					neighborsX[k]=x2;&lt;br /&gt;
					neighborsY[k]=y2;&lt;br /&gt;
					dNeighbors[k]=distance(x2,y2,xOrg,yOrg);&lt;br /&gt;
					k+=1;&lt;br /&gt;
				}&lt;br /&gt;
			}		&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Portanto após esse algoritmo, temos guardadas as posições das partículas mais próximas. É importante ressaltar que o &amp;quot;for&amp;quot; em partícula-teste ainda não foi fechado, e ainda dentro deste mesmo loop serão calculados os valores de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Calculando o Psi 6 ===&lt;br /&gt;
&lt;br /&gt;
Tendo os valores de X e Y dos vizinhos da partícula-teste, podemos proceder para o cálculo do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;. 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 &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt; e será dado pela seguinte relação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\phi_i=arctg\left(\frac{\Delta Y}{\Delta X}\right)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na implementação em código fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(j=0;j&amp;lt;k;j++){&lt;br /&gt;
		delX=neighborsX[j]-xx[i];&lt;br /&gt;
		delY=neighborsY[j]-yy[i];&lt;br /&gt;
&lt;br /&gt;
                //Condições de contorno periódicas&lt;br /&gt;
		delX=delX-rint(delX/Lx)*Lx; &lt;br /&gt;
        	delY=delY-rint(delY/Ly)*Ly;&lt;br /&gt;
                // --- //&lt;br /&gt;
&lt;br /&gt;
		angle[j]=atan2(delY,delX);&lt;br /&gt;
		if (angle[j]&amp;lt;0)&lt;br /&gt;
			angle[j]=2*PI+angle[j];&lt;br /&gt;
                psix[i]=0;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora somente precisa-se realizar um algoritmo que ordene o vetor &amp;quot;angle&amp;quot; do menor para o maior ângulo, utilizando algoritmos de ordenamento (bubblesort, quicksort, etc) desta forma é possível calcular os &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Feito o ordenamento do vetor, basta calcular a média do valor do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; de cada vizinho. Para isto, precisamos calcular os valores de &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt; em função dos &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt;, basta realizar a subtração do próximo vizinho no vetor pelo valor do ângulo do vizinho atual, dessa forma: &amp;lt;math&amp;gt; \theta_i = \psi_{i+1} - \psi_i &amp;lt;/math&amp;gt; com exceção do último vizinho, que será o ângulo dele menos o do primeiro, desta forma a implementação fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		firstAngle=angle[0];	&lt;br /&gt;
		for(j=0;j&amp;lt;k-1;j++){ &lt;br /&gt;
			angle[j]=cos(6.*(angle[j+1]-angle[j]));&lt;br /&gt;
		}		&lt;br /&gt;
		angle[k-1]=cos(6.*(firstAngle+2*PI-angle[k-1]));&lt;br /&gt;
		for(j=0;j&amp;lt;k;j++){ &lt;br /&gt;
			psix[i]+=angle[j]/k.;&lt;br /&gt;
		}	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E então está calculado o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, para facilitar a implementação é recomendado que este algoritmo seja uma função dentro de seu código e desta forma retorne o vetor &amp;quot;psix&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Exemplos ===&lt;br /&gt;
&lt;br /&gt;
Para o caso de um potencial de Lennard-Jones, é possível fazer observar resultados de mapas de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, isto é, um mapa que mostra para cada partícula o seu valor da medida, da seguinte forma:&lt;/div&gt;</summary>
		<author><name>Rmoreira</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=642</id>
		<title>Medidas estáticas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=642"/>
		<updated>2016-07-31T20:01:54Z</updated>

		<summary type="html">&lt;p&gt;Rmoreira: /* Calculando o Psi 6 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em dinâmica molecular, medidas estáticas são medidas realizadas em um passo específico de tempo da simulação.&lt;br /&gt;
&lt;br /&gt;
=Pair Distribution Function=&lt;br /&gt;
&lt;br /&gt;
[[Image:Gr.png|thumb|300px|right|Representação do cálculo numérico de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
A ''Pair Distribution Function'' , ou &amp;quot;&amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;&amp;quot;, é uma função que estima o quão provável é encontrar duas partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; dentro de um sistema de várias partículas.&lt;br /&gt;
&lt;br /&gt;
Em um sistema de &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas, o &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt; é definido como a média do número de partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
	g(r)=\frac{V}{N^2}\langle\sum_{i=1}^N\sum_{j\neq i}^N\delta(r-|r_i-r_j|)  \rangle&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Numéricamente pode ser interpretado como a média do número de pares de partículas a uma distância entre &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;r+\Delta r&amp;lt;/math&amp;gt; pesado pelo volume/área desta região.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	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]&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde &amp;lt;math&amp;gt;V_t&amp;lt;/math&amp;gt; é o/a volume/área total e &amp;lt;math&amp;gt;rect&amp;lt;/math&amp;gt; é a função retangular.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Em resumo, o &amp;lt;math&amp;gt;g(r,\Delta r)&amp;lt;/math&amp;gt; é a média dos [[Histogramas_e_Densidade_de_Probabilidade|histogramas]] do número de partículas em um ''bin''  de largura &amp;lt;math&amp;gt;\Delta r&amp;lt;/math&amp;gt; a uma &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; feitos para cada partícula no sistema pesado pelo volume/área deste ''bin''.&lt;br /&gt;
&lt;br /&gt;
==== Construção do Código ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Resultados ====&lt;br /&gt;
&lt;br /&gt;
[[Image:GR-D.png|400px|Resultado do cálculo de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
=Referências=&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Psi 6=&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;caixa&amp;quot; em que as partículas estão localizadas e então localizar possíveis &amp;quot;defeitos&amp;quot; no padrão hexagonal.&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\frac{\pi}{3}&amp;lt;/math&amp;gt;. Buscando uma relação em que esta situação seja a situação de &amp;lt;math&amp;gt;\psi_6 = 1&amp;lt;/math&amp;gt;, é possível definir que o &amp;lt;math&amp;gt;\psi_6 &amp;lt;/math&amp;gt; vale:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\psi_6=\frac{1}{6}\sum_i^ncos(6\theta_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\theta=\frac{\pi}{3}&amp;lt;/math&amp;gt; resulte em um valor de &amp;lt;math&amp;gt;\psi_6=1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Implementação Computacional ==&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Encontrando vizinhos ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
O método aqui citado é pouco otimizado, pois utiliza-se um for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;, 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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;) baseando-se em outro valor já calculado, a medida do g(r), desta forma o valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; resultará em um valor razoável ( &amp;gt;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.&lt;br /&gt;
&lt;br /&gt;
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: &amp;quot;neighborsX&amp;quot; (que guarda a posição X do vizinho), &amp;quot;neighborsY&amp;quot;(que guarda a posição Y do vizinho) e &amp;quot;dNeighbors&amp;quot;(que guarda a distância do vizinho) e então faz-se o for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; buscando-se as distância menores que o raio de corte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(i=0;i&amp;lt;NP;i++){&lt;br /&gt;
		xOrg=xx[i];&lt;br /&gt;
		yOrg=yy[i];&lt;br /&gt;
		for(j=0;j&amp;lt;NP;j++){&lt;br /&gt;
			x2=xx[j];&lt;br /&gt;
			y2=yy[j];&lt;br /&gt;
			if(i!=j){&lt;br /&gt;
				if(distance(xOrg,yOrg,x2,y2)&amp;lt;radiusLimit)&lt;br /&gt;
				{	&lt;br /&gt;
					neighborsX[k]=x2;&lt;br /&gt;
					neighborsY[k]=y2;&lt;br /&gt;
					dNeighbors[k]=distance(x2,y2,xOrg,yOrg);&lt;br /&gt;
					k+=1;&lt;br /&gt;
				}&lt;br /&gt;
			}		&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Portanto após esse algoritmo, temos guardadas as posições das partículas mais próximas. É importante ressaltar que o &amp;quot;for&amp;quot; em partícula-teste ainda não foi fechado, e ainda dentro deste mesmo loop serão calculados os valores de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Calculando o Psi 6 ===&lt;br /&gt;
&lt;br /&gt;
Tendo os valores de X e Y dos vizinhos da partícula-teste, podemos proceder para o cálculo do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;. 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 &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt; e será dado pela seguinte relação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\phi_i=arctg\left(\frac{\Delta Y}{\Delta X}\right)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na implementação em código fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(j=0;j&amp;lt;k;j++){&lt;br /&gt;
		delX=neighborsX[j]-xx[i];&lt;br /&gt;
		delY=neighborsY[j]-yy[i];&lt;br /&gt;
&lt;br /&gt;
                //Condições de contorno periódicas&lt;br /&gt;
		delX=delX-rint(delX/Lx)*Lx; &lt;br /&gt;
        	delY=delY-rint(delY/Ly)*Ly;&lt;br /&gt;
                // --- //&lt;br /&gt;
&lt;br /&gt;
		angle[j]=atan2(delY,delX);&lt;br /&gt;
		if (angle[j]&amp;lt;0)&lt;br /&gt;
			angle[j]=2*PI+angle[j];&lt;br /&gt;
                psix[i]=0;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora somente precisa-se realizar um algoritmo que ordene o vetor &amp;quot;angle&amp;quot; do menor para o maior ângulo, utilizando algoritmos de ordenamento (bubblesort, quicksort, etc) desta forma é possível calcular os &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Feito o ordenamento do vetor, basta calcular a média do valor do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; de cada vizinho. Para isto, precisamos calcular os valores de &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt; em função dos &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt;, basta realizar a subtração do próximo vizinho no vetor pelo valor do ângulo do vizinho atual, dessa forma: &amp;lt;math&amp;gt; \theta_i = \psi_{i+1} - \psi_i &amp;lt;/math&amp;gt; com exceção do último vizinho, que será o ângulo dele menos o do primeiro, desta forma a implementação fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		firstAngle=angle[0];	&lt;br /&gt;
		for(j=0;j&amp;lt;k-1;j++){ &lt;br /&gt;
			angle[j]=cos(6.*(angle[j+1]-angle[j]));&lt;br /&gt;
		}		&lt;br /&gt;
		angle[k-1]=cos(6.*(firstAngle+2*PI-angle[k-1]));&lt;br /&gt;
		for(j=0;j&amp;lt;k;j++){ &lt;br /&gt;
			psix[i]+=angle[j]/k.;&lt;br /&gt;
		}	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E então está calculado o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, para facilitar a implementação é recomendado que este algoritmo seja uma função dentro de seu código e desta forma retorne o vetor &amp;quot;psix&amp;quot;.&lt;/div&gt;</summary>
		<author><name>Rmoreira</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=641</id>
		<title>Medidas estáticas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=641"/>
		<updated>2016-07-30T19:21:45Z</updated>

		<summary type="html">&lt;p&gt;Rmoreira: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em dinâmica molecular, medidas estáticas são medidas realizadas em um passo específico de tempo da simulação.&lt;br /&gt;
&lt;br /&gt;
=Pair Distribution Function=&lt;br /&gt;
&lt;br /&gt;
[[Image:Gr.png|thumb|300px|right|Representação do cálculo numérico de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
A ''Pair Distribution Function'' , ou &amp;quot;&amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;&amp;quot;, é uma função que estima o quão provável é encontrar duas partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; dentro de um sistema de várias partículas.&lt;br /&gt;
&lt;br /&gt;
Em um sistema de &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas, o &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt; é definido como a média do número de partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
	g(r)=\frac{V}{N^2}\langle\sum_{i=1}^N\sum_{j\neq i}^N\delta(r-|r_i-r_j|)  \rangle&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Numéricamente pode ser interpretado como a média do número de pares de partículas a uma distância entre &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;r+\Delta r&amp;lt;/math&amp;gt; pesado pelo volume/área desta região.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	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]&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde &amp;lt;math&amp;gt;V_t&amp;lt;/math&amp;gt; é o/a volume/área total e &amp;lt;math&amp;gt;rect&amp;lt;/math&amp;gt; é a função retangular.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Em resumo, o &amp;lt;math&amp;gt;g(r,\Delta r)&amp;lt;/math&amp;gt; é a média dos [[Histogramas_e_Densidade_de_Probabilidade|histogramas]] do número de partículas em um ''bin''  de largura &amp;lt;math&amp;gt;\Delta r&amp;lt;/math&amp;gt; a uma &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; feitos para cada partícula no sistema pesado pelo volume/área deste ''bin''.&lt;br /&gt;
&lt;br /&gt;
==== Construção do Código ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Resultados ====&lt;br /&gt;
&lt;br /&gt;
[[Image:GR-D.png|400px|Resultado do cálculo de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
=Referências=&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Psi 6=&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;caixa&amp;quot; em que as partículas estão localizadas e então localizar possíveis &amp;quot;defeitos&amp;quot; no padrão hexagonal.&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\frac{\pi}{3}&amp;lt;/math&amp;gt;. Buscando uma relação em que esta situação seja a situação de &amp;lt;math&amp;gt;\psi_6 = 1&amp;lt;/math&amp;gt;, é possível definir que o &amp;lt;math&amp;gt;\psi_6 &amp;lt;/math&amp;gt; vale:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\psi_6=\frac{1}{6}\sum_i^ncos(6\theta_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\theta=\frac{\pi}{3}&amp;lt;/math&amp;gt; resulte em um valor de &amp;lt;math&amp;gt;\psi_6=1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Implementação Computacional ==&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Encontrando vizinhos ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
O método aqui citado é pouco otimizado, pois utiliza-se um for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;, 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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;) baseando-se em outro valor já calculado, a medida do g(r), desta forma o valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; resultará em um valor razoável ( &amp;gt;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.&lt;br /&gt;
&lt;br /&gt;
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: &amp;quot;neighborsX&amp;quot; (que guarda a posição X do vizinho), &amp;quot;neighborsY&amp;quot;(que guarda a posição Y do vizinho) e &amp;quot;dNeighbors&amp;quot;(que guarda a distância do vizinho) e então faz-se o for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; buscando-se as distância menores que o raio de corte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(i=0;i&amp;lt;NP;i++){&lt;br /&gt;
		xOrg=xx[i];&lt;br /&gt;
		yOrg=yy[i];&lt;br /&gt;
		for(j=0;j&amp;lt;NP;j++){&lt;br /&gt;
			x2=xx[j];&lt;br /&gt;
			y2=yy[j];&lt;br /&gt;
			if(i!=j){&lt;br /&gt;
				if(distance(xOrg,yOrg,x2,y2)&amp;lt;radiusLimit)&lt;br /&gt;
				{	&lt;br /&gt;
					neighborsX[k]=x2;&lt;br /&gt;
					neighborsY[k]=y2;&lt;br /&gt;
					dNeighbors[k]=distance(x2,y2,xOrg,yOrg);&lt;br /&gt;
					k+=1;&lt;br /&gt;
				}&lt;br /&gt;
			}		&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Portanto após esse algoritmo, temos guardadas as posições das partículas mais próximas. É importante ressaltar que o &amp;quot;for&amp;quot; em partícula-teste ainda não foi fechado, e ainda dentro deste mesmo loop serão calculados os valores de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Calculando o Psi 6 ===&lt;br /&gt;
&lt;br /&gt;
Tendo os valores de X e Y dos vizinhos da partícula-teste, podemos proceder para o cálculo do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;. 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 &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt; e será dado pela seguinte relação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\phi_i=arctg\left(\frac{\Delta Y}{\Delta X}\right)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na implementação em código fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(j=0;j&amp;lt;6;j++){&lt;br /&gt;
		delX=neighborsX[j]-xx[i];&lt;br /&gt;
		delY=neighborsY[j]-yy[i];&lt;br /&gt;
&lt;br /&gt;
                //Condições de contorno periódicas&lt;br /&gt;
		delX=delX-rint(delX/Lx)*Lx; &lt;br /&gt;
        	delY=delY-rint(delY/Ly)*Ly;&lt;br /&gt;
                // --- //&lt;br /&gt;
&lt;br /&gt;
		angle[j]=atan2(delY,delX);&lt;br /&gt;
		if (angle[j]&amp;lt;0)&lt;br /&gt;
			angle[j]=2*PI+angle[j];&lt;br /&gt;
                psix[i]=0;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora somente precisa-se realizar um algoritmo que ordene o vetor &amp;quot;angle&amp;quot; do menor para o maior ângulo, utilizando algoritmos de ordenamento (bubblesort, quicksort, etc) desta forma é possível calcular os &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Feito o ordenamento do vetor, basta calcular a média do valor do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; de cada vizinho. Para isto, precisamos calcular os valores de &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt; em função dos &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt;, basta realizar a subtração do próximo vizinho no vetor pelo valor do ângulo do vizinho atual, dessa forma: &amp;lt;math&amp;gt; \theta_i = \psi_{i+1} - \psi_i &amp;lt;/math&amp;gt; com exceção do último vizinho, que será o ângulo dele menos o do primeiro, desta forma a implementação fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		firstAngle=angle[0];	&lt;br /&gt;
		for(j=0;j&amp;lt;5;j++){ &lt;br /&gt;
			angle[j]=cos(6.*(angle[j+1]-angle[j]));&lt;br /&gt;
		}		&lt;br /&gt;
		angle[5]=cos(6.*(firstAngle+2*PI-angle[5]));&lt;br /&gt;
		for(j=0;j&amp;lt;6;j++){ &lt;br /&gt;
			psix[i]+=angle[j]/6.;&lt;br /&gt;
		}	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E então está calculado o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, para facilitar a implementação é recomendado que este algoritmo seja uma função dentro de seu código e desta forma retorne o vetor &amp;quot;psix&amp;quot;.&lt;/div&gt;</summary>
		<author><name>Rmoreira</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=640</id>
		<title>Medidas estáticas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=640"/>
		<updated>2016-07-30T19:20:37Z</updated>

		<summary type="html">&lt;p&gt;Rmoreira: /* Encontrando vizinhos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em dinâmica molecular, medidas estáticas são medidas realizadas em um passo específico de tempo da simulação.&lt;br /&gt;
= Psi 6=&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;caixa&amp;quot; em que as partículas estão localizadas e então localizar possíveis &amp;quot;defeitos&amp;quot; no padrão hexagonal.&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\frac{\pi}{3}&amp;lt;/math&amp;gt;. Buscando uma relação em que esta situação seja a situação de &amp;lt;math&amp;gt;\psi_6 = 1&amp;lt;/math&amp;gt;, é possível definir que o &amp;lt;math&amp;gt;\psi_6 &amp;lt;/math&amp;gt; vale:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\psi_6=\frac{1}{6}\sum_i^ncos(6\theta_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\theta=\frac{\pi}{3}&amp;lt;/math&amp;gt; resulte em um valor de &amp;lt;math&amp;gt;\psi_6=1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Implementação Computacional ==&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Encontrando vizinhos ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
O método aqui citado é pouco otimizado, pois utiliza-se um for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;, 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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;) baseando-se em outro valor já calculado, a medida do g(r), desta forma o valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; resultará em um valor razoável ( &amp;gt;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.&lt;br /&gt;
&lt;br /&gt;
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: &amp;quot;neighborsX&amp;quot; (que guarda a posição X do vizinho), &amp;quot;neighborsY&amp;quot;(que guarda a posição Y do vizinho) e &amp;quot;dNeighbors&amp;quot;(que guarda a distância do vizinho) e então faz-se o for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; buscando-se as distância menores que o raio de corte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(i=0;i&amp;lt;NP;i++){&lt;br /&gt;
		xOrg=xx[i];&lt;br /&gt;
		yOrg=yy[i];&lt;br /&gt;
		for(j=0;j&amp;lt;NP;j++){&lt;br /&gt;
			x2=xx[j];&lt;br /&gt;
			y2=yy[j];&lt;br /&gt;
			if(i!=j){&lt;br /&gt;
				if(distance(xOrg,yOrg,x2,y2)&amp;lt;radiusLimit)&lt;br /&gt;
				{	&lt;br /&gt;
					neighborsX[k]=x2;&lt;br /&gt;
					neighborsY[k]=y2;&lt;br /&gt;
					dNeighbors[k]=distance(x2,y2,xOrg,yOrg);&lt;br /&gt;
					k+=1;&lt;br /&gt;
				}&lt;br /&gt;
			}		&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Portanto após esse algoritmo, temos guardadas as posições das partículas mais próximas. É importante ressaltar que o &amp;quot;for&amp;quot; em partícula-teste ainda não foi fechado, e ainda dentro deste mesmo loop serão calculados os valores de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Calculando o Psi 6 ===&lt;br /&gt;
&lt;br /&gt;
Tendo os valores de X e Y dos vizinhos da partícula-teste, podemos proceder para o cálculo do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;. 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 &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt; e será dado pela seguinte relação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\phi_i=arctg\left(\frac{\Delta Y}{\Delta X}\right)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na implementação em código fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(j=0;j&amp;lt;6;j++){&lt;br /&gt;
		delX=neighborsX[j]-xx[i];&lt;br /&gt;
		delY=neighborsY[j]-yy[i];&lt;br /&gt;
&lt;br /&gt;
                //Condições de contorno periódicas&lt;br /&gt;
		delX=delX-rint(delX/Lx)*Lx; &lt;br /&gt;
        	delY=delY-rint(delY/Ly)*Ly;&lt;br /&gt;
                // --- //&lt;br /&gt;
&lt;br /&gt;
		angle[j]=atan2(delY,delX);&lt;br /&gt;
		if (angle[j]&amp;lt;0)&lt;br /&gt;
			angle[j]=2*PI+angle[j];&lt;br /&gt;
                psix[i]=0;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora somente precisa-se realizar um algoritmo que ordene o vetor &amp;quot;angle&amp;quot; do menor para o maior ângulo, utilizando algoritmos de ordenamento (bubblesort, quicksort, etc) desta forma é possível calcular os &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Feito o ordenamento do vetor, basta calcular a média do valor do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; de cada vizinho. Para isto, precisamos calcular os valores de &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt; em função dos &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt;, basta realizar a subtração do próximo vizinho no vetor pelo valor do ângulo do vizinho atual, dessa forma: &amp;lt;math&amp;gt; \theta_i = \psi_{i+1} - \psi_i &amp;lt;/math&amp;gt; com exceção do último vizinho, que será o ângulo dele menos o do primeiro, desta forma a implementação fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		firstAngle=angle[0];	&lt;br /&gt;
		for(j=0;j&amp;lt;5;j++){ &lt;br /&gt;
			angle[j]=cos(6.*(angle[j+1]-angle[j]));&lt;br /&gt;
		}		&lt;br /&gt;
		angle[5]=cos(6.*(firstAngle+2*PI-angle[5]));&lt;br /&gt;
		for(j=0;j&amp;lt;6;j++){ &lt;br /&gt;
			psix[i]+=angle[j]/6.;&lt;br /&gt;
		}	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E então está calculado o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, para facilitar a implementação é recomendado que este algoritmo seja uma função dentro de seu código e desta forma retorne o vetor &amp;quot;psix&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=Pair Distribution Function=&lt;br /&gt;
&lt;br /&gt;
[[Image:Gr.png|thumb|300px|right|Representação do cálculo numérico de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
A ''Pair Distribution Function'' , ou &amp;quot;&amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;&amp;quot;, é uma função que estima o quão provável é encontrar duas partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; dentro de um sistema de várias partículas.&lt;br /&gt;
&lt;br /&gt;
Em um sistema de &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas, o &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt; é definido como a média do número de partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
	g(r)=\frac{V}{N^2}\langle\sum_{i=1}^N\sum_{j\neq i}^N\delta(r-|r_i-r_j|)  \rangle&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Numéricamente pode ser interpretado como a média do número de pares de partículas a uma distância entre &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;r+\Delta r&amp;lt;/math&amp;gt; pesado pelo volume/área desta região.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	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]&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde &amp;lt;math&amp;gt;V_t&amp;lt;/math&amp;gt; é o/a volume/área total e &amp;lt;math&amp;gt;rect&amp;lt;/math&amp;gt; é a função retangular.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Em resumo, o &amp;lt;math&amp;gt;g(r,\Delta r)&amp;lt;/math&amp;gt; é a média dos [[Histogramas_e_Densidade_de_Probabilidade|histogramas]] do número de partículas em um ''bin''  de largura &amp;lt;math&amp;gt;\Delta r&amp;lt;/math&amp;gt; a uma &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; feitos para cada partícula no sistema pesado pelo volume/área deste ''bin''.&lt;br /&gt;
&lt;br /&gt;
==== Construção do Código ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Resultados ====&lt;br /&gt;
&lt;br /&gt;
[[Image:GR-D.png|400px|Resultado do cálculo de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
=Referências=&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;/div&gt;</summary>
		<author><name>Rmoreira</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=566</id>
		<title>Medidas estáticas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=566"/>
		<updated>2016-06-20T13:29:20Z</updated>

		<summary type="html">&lt;p&gt;Rmoreira: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em dinâmica molecular, medidas estáticas são medidas realizadas em um passo específico de tempo da simulação.&lt;br /&gt;
= Psi 6=&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;caixa&amp;quot; em que as partículas estão localizadas e então localizar possíveis &amp;quot;defeitos&amp;quot; no padrão hexagonal.&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\frac{\pi}{3}&amp;lt;/math&amp;gt;. Buscando uma relação em que esta situação seja a situação de &amp;lt;math&amp;gt;\psi_6 = 1&amp;lt;/math&amp;gt;, é possível definir que o &amp;lt;math&amp;gt;\psi_6 &amp;lt;/math&amp;gt; vale:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\psi_6=\frac{1}{6}\sum_i^ncos(6\theta_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\theta=\frac{\pi}{3}&amp;lt;/math&amp;gt; resulte em um valor de &amp;lt;math&amp;gt;\psi_6=1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Implementação Computacional ==&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Encontrando vizinhos ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
O método aqui citado é pouco otimizado, pois utiliza-se um for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;, 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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;), desta forma o valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; resultará em um valor razoável ( &amp;gt;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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for(i=0;i&amp;lt;6;i++){&lt;br /&gt;
	neighborsX[i]=999;&lt;br /&gt;
	neighborsY[i]=999;&lt;br /&gt;
        dNeighbors[i]=999;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;for&amp;quot; em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; 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 &amp;quot;xOrg&amp;quot; (x original) e o possível vizinho de &amp;quot;x2&amp;quot;) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for(i=0;i&amp;lt;NP;i++){             &lt;br /&gt;
	xOrg=xx[i];&lt;br /&gt;
	yOrg=yy[i];&lt;br /&gt;
	for(j=0;j&amp;lt;6;j++){&lt;br /&gt;
		dNeighbors[j]=999.;&lt;br /&gt;
	}&lt;br /&gt;
	for(j=0;j&amp;lt;NP;j++){&lt;br /&gt;
		x2=xx[j];&lt;br /&gt;
		y2=yy[j];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;radiusLimit&amp;quot; (Raio limite) do codigo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
		if(i!=j){&lt;br /&gt;
			//Calcula distância entre partícula-teste e possível vizinho&lt;br /&gt;
			deltaX=fabs(x2-xOrg);&lt;br /&gt;
			deltaY=fabs(y2-yOrg);&lt;br /&gt;
			deltaX=deltaX-rint(deltaX/Lx)*Lx;&lt;br /&gt;
			deltaY=deltaY-rint(deltaY/Ly)*Ly;&lt;br /&gt;
			dNew=sqrt((deltaX*deltaX)+(deltaY*deltaY));&lt;br /&gt;
				// --- //&lt;br /&gt;
&lt;br /&gt;
			if(dNew&amp;lt;radiusLimit)  // Testa se a distância é menor que o raio limite&lt;br /&gt;
			{	&lt;br /&gt;
				//Procura-se o maior valor presente em dNeighbors e salva-se com o nome de &amp;quot;dOld&amp;quot;, bem como seu indíce como &amp;quot;index&amp;quot;&lt;br /&gt;
				dOld=0;&lt;br /&gt;
				for(k=0;k&amp;lt;6;k++){&lt;br /&gt;
					if(dNeighbors[k]&amp;gt;dOld){&lt;br /&gt;
						dOld=dNeighbors[k];&lt;br /&gt;
						index=k;&lt;br /&gt;
					}&lt;br /&gt;
							 }&lt;br /&gt;
							 // --- //    &lt;br /&gt;
						   &lt;br /&gt;
							// Testa-se se a distância do possível vizinho é menor que a maior distância presente já em dNeighbors&lt;br /&gt;
				if(dNew&amp;lt;dOld){&lt;br /&gt;
					neighborsX[index]=x2;&lt;br /&gt;
					neighborsY[index]=y2;&lt;br /&gt;
					dNeighbors[index]=dNew;&lt;br /&gt;
				}&lt;br /&gt;
			}		&lt;br /&gt;
			}&lt;br /&gt;
	}         &lt;br /&gt;
   &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Portanto após esse algoritmo, temos guardadas as posições das 6 partículas mais próximas, é importante ressaltar que o &amp;quot;for&amp;quot; em partícula-teste ainda não foi fechado, e ainda dentro deste mesmo loop serão calculados os valores de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Calculando o Psi 6 ===&lt;br /&gt;
&lt;br /&gt;
Tendo os valores de X e Y dos vizinhos da partícula-teste, podemos proceder para o cálculo do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;. 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 &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt; e será dado pela seguinte relação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\phi_i=arctg\left(\frac{\Delta Y}{\Delta X}\right)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na implementação em código fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(j=0;j&amp;lt;6;j++){&lt;br /&gt;
		delX=neighborsX[j]-xx[i];&lt;br /&gt;
		delY=neighborsY[j]-yy[i];&lt;br /&gt;
&lt;br /&gt;
                //Condições de contorno periódicas&lt;br /&gt;
		delX=delX-rint(delX/Lx)*Lx; &lt;br /&gt;
        	delY=delY-rint(delY/Ly)*Ly;&lt;br /&gt;
                // --- //&lt;br /&gt;
&lt;br /&gt;
		angle[j]=atan2(delY,delX);&lt;br /&gt;
		if (angle[j]&amp;lt;0)&lt;br /&gt;
			angle[j]=2*PI+angle[j];&lt;br /&gt;
                psix[i]=0;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora somente precisa-se realizar um algoritmo que ordene o vetor &amp;quot;angle&amp;quot; do menor para o maior ângulo, utilizando algoritmos de ordenamento (bubblesort, quicksort, etc) desta forma é possível calcular os &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Feito o ordenamento do vetor, basta calcular a média do valor do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; de cada vizinho. Para isto, precisamos calcular os valores de &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt; em função dos &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt;, basta realizar a subtração do próximo vizinho no vetor pelo valor do ângulo do vizinho atual, dessa forma: &amp;lt;math&amp;gt; \theta_i = \psi_{i+1} - \psi_i &amp;lt;/math&amp;gt; com exceção do último vizinho, que será o ângulo dele menos o do primeiro, desta forma a implementação fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		firstAngle=angle[0];	&lt;br /&gt;
		for(j=0;j&amp;lt;5;j++){ &lt;br /&gt;
			angle[j]=cos(6.*(angle[j+1]-angle[j]));&lt;br /&gt;
		}		&lt;br /&gt;
		angle[5]=cos(6.*(firstAngle+2*PI-angle[5]));&lt;br /&gt;
		for(j=0;j&amp;lt;6;j++){ &lt;br /&gt;
			psix[i]+=angle[j]/6.;&lt;br /&gt;
		}	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E então está calculado o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, para facilitar a implementação é recomendado que este algoritmo seja uma função dentro de seu código e desta forma retorne o vetor &amp;quot;psix&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=Pair Distribution Function=&lt;br /&gt;
&lt;br /&gt;
[[Image:Gr.png|thumb|300px|right|Representação do cálculo numérico de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
A ''Pair Distribution Function'' , ou &amp;quot;&amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;&amp;quot;, é uma função que estima o quão provável é encontrar duas partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; dentro de um sistema de várias partículas.&lt;br /&gt;
&lt;br /&gt;
Em um sistema de &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas, o &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt; é definido como a média do número de partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
	g(r)=\frac{V}{N^2}\langle\sum_{i=1}^N\sum_{j\neq i}^N\delta(r-|r_i-r_j|)  \rangle&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Numéricamente pode ser interpretado como a média do número de pares de partículas a uma distância entre &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;r+\Delta r&amp;lt;/math&amp;gt; pesado pelo volume/área desta região.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	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]&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde &amp;lt;math&amp;gt;V_t&amp;lt;/math&amp;gt; é o/a volume/área total e &amp;lt;math&amp;gt;rect&amp;lt;/math&amp;gt; é a função retangular.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Em resumo, o &amp;lt;math&amp;gt;g(r,\Delta r)&amp;lt;/math&amp;gt; é a média dos [[Histogramas_e_Densidade_de_Probabilidade|histogramas]] do número de partículas em um ''bin''  de largura &amp;lt;math&amp;gt;\Delta r&amp;lt;/math&amp;gt; a uma &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; feitos para cada partícula no sistema pesado pelo volume/área deste ''bin''.&lt;br /&gt;
&lt;br /&gt;
==== Construção do Código ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Resultados ====&lt;br /&gt;
&lt;br /&gt;
[[Image:GR-D.png|400px|Resultado do cálculo de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
=Referências=&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;/div&gt;</summary>
		<author><name>Rmoreira</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=565</id>
		<title>Medidas estáticas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=565"/>
		<updated>2016-06-20T13:25:43Z</updated>

		<summary type="html">&lt;p&gt;Rmoreira: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em dinâmica molecular, medidas estáticas são medidas realizadas em um passo específico de tempo da simulação.&lt;br /&gt;
= Psi 6=&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;caixa&amp;quot; em que as partículas estão localizadas e então localizar possíveis &amp;quot;defeitos&amp;quot; no padrão hexagonal.&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\frac{\pi}{3}&amp;lt;/math&amp;gt;. Buscando uma relação em que esta situação seja a situação de &amp;lt;math&amp;gt;\psi_6 = 1&amp;lt;/math&amp;gt;, é possível definir que o &amp;lt;math&amp;gt;\psi_6 &amp;lt;/math&amp;gt; vale:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\psi_6=\frac{1}{6}\sum_i^ncos(6\theta_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\theta=\frac{\pi}{3}&amp;lt;/math&amp;gt; resulte em um valor de &amp;lt;math&amp;gt;\psi_6=1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Implementação Computacional ==&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Encontrando vizinhos ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
O método aqui citado é pouco otimizado, pois utiliza-se um for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;, 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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;), desta forma o valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; resultará em um valor razoável ( &amp;gt;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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for(i=0;i&amp;lt;6;i++){&lt;br /&gt;
	neighborsX[i]=999;&lt;br /&gt;
	neighborsY[i]=999;&lt;br /&gt;
        dNeighbors[i]=999;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;for&amp;quot; em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; 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 &amp;quot;xOrg&amp;quot; (x original) e o possível vizinho de &amp;quot;x2&amp;quot;) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for(i=0;i&amp;lt;NP;i++){             &lt;br /&gt;
	xOrg=xx[i];&lt;br /&gt;
	yOrg=yy[i];&lt;br /&gt;
	for(j=0;j&amp;lt;6;j++){&lt;br /&gt;
		dNeighbors[j]=999.;&lt;br /&gt;
	}&lt;br /&gt;
	for(j=0;j&amp;lt;NP;j++){&lt;br /&gt;
		x2=xx[j];&lt;br /&gt;
		y2=yy[j];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;radiusLimit&amp;quot; (Raio limite) do codigo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
		if(i!=j){&lt;br /&gt;
			//Calcula distância entre partícula-teste e possível vizinho&lt;br /&gt;
			deltaX=fabs(x2-xOrg);&lt;br /&gt;
			deltaY=fabs(y2-yOrg);&lt;br /&gt;
			deltaX=deltaX-rint(deltaX/Lx)*Lx;&lt;br /&gt;
			deltaY=deltaY-rint(deltaY/Ly)*Ly;&lt;br /&gt;
			dNew=sqrt((deltaX*deltaX)+(deltaY*deltaY));&lt;br /&gt;
				// --- //&lt;br /&gt;
&lt;br /&gt;
			if(dNew&amp;lt;radiusLimit)  // Testa se a distância é menor que o raio limite&lt;br /&gt;
			{	&lt;br /&gt;
				//Procura-se o maior valor presente em dNeighbors e salva-se com o nome de &amp;quot;dOld&amp;quot;, bem como seu indíce como &amp;quot;index&amp;quot;&lt;br /&gt;
				dOld=0;&lt;br /&gt;
				for(k=0;k&amp;lt;6;k++){&lt;br /&gt;
					if(dNeighbors[k]&amp;gt;dOld){&lt;br /&gt;
						dOld=dNeighbors[k];&lt;br /&gt;
						index=k;&lt;br /&gt;
					}&lt;br /&gt;
							 }&lt;br /&gt;
							 // --- //    &lt;br /&gt;
						   &lt;br /&gt;
							// Testa-se se a distância do possível vizinho é menor que a maior distância presente já em dNeighbors&lt;br /&gt;
				if(dNew&amp;lt;dOld){&lt;br /&gt;
					neighborsX[index]=x2;&lt;br /&gt;
					neighborsY[index]=y2;&lt;br /&gt;
					dNeighbors[index]=dNew;&lt;br /&gt;
				}&lt;br /&gt;
			}		&lt;br /&gt;
			}&lt;br /&gt;
	}         &lt;br /&gt;
   &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Portanto após esse algoritmo, temos guardadas as posições das 6 partículas mais próximas, é importante ressaltar que o &amp;quot;for&amp;quot; em partícula-teste ainda não foi fechado, e ainda dentro deste mesmo loop serão calculados os valores de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Calculando o Psi 6 ===&lt;br /&gt;
&lt;br /&gt;
Tendo os valores de X e Y dos vizinhos da partícula-teste, podemos proceder para o cálculo do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;. 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 &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt; e será dado pela seguinte relação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\phi_i=arctg\left(\frac{\Delta Y}{\Delta X}\right)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na implementação em código fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(j=0;j&amp;lt;6;j++){&lt;br /&gt;
		delX=neighborsX[j]-xx[i];&lt;br /&gt;
		delY=neighborsY[j]-yy[i];&lt;br /&gt;
&lt;br /&gt;
                //Condições de contorno periódicas&lt;br /&gt;
		delX=delX-rint(delX/Lx)*Lx; &lt;br /&gt;
        	delY=delY-rint(delY/Ly)*Ly;&lt;br /&gt;
                // --- //&lt;br /&gt;
&lt;br /&gt;
		angle[j]=atan2(delY,delX);&lt;br /&gt;
		if (angle[j]&amp;lt;0)&lt;br /&gt;
			angle[j]=2*PI+angle[j];&lt;br /&gt;
                psix[i]=0;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora somente precisa-se realizar um algoritmo que ordene o vetor &amp;quot;angle&amp;quot; do menor para o maior ângulo, desta forma é possível calcular os &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Feito o ordenamento do vetor, basta calcular a média do valor do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; de cada vizinho. Para isto, precisamos calcular os valores de &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt; em função dos &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt;, basta realizar a subtração do próximo vizinho no vetor pelo valor do ângulo do vizinho atual, dessa forma: &amp;lt;math&amp;gt; \theta_i = \psi_{i+1} - \psi_i &amp;lt;/math&amp;gt; com exceção do último vizinho, que será o ângulo dele menos o do primeiro, desta forma a implementação fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		firstAngle=angle[0];	&lt;br /&gt;
		for(j=0;j&amp;lt;5;j++){ &lt;br /&gt;
			angle[j]=cos(6.*(angle[j+1]-angle[j]));&lt;br /&gt;
		}		&lt;br /&gt;
		angle[5]=cos(6.*(firstAngle+2*PI-angle[5]));&lt;br /&gt;
		for(j=0;j&amp;lt;6;j++){ &lt;br /&gt;
			psix[i]+=angle[j]/6.;&lt;br /&gt;
		}	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E então está calculado o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, para facilitar a implementação é recomendado que este algoritmo seja uma função dentro de seu código e desta forma retorne o vetor &amp;quot;psix&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=Pair Distribution Function=&lt;br /&gt;
&lt;br /&gt;
[[Image:Gr.png|thumb|300px|right|Representação do cálculo numérico de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
A ''Pair Distribution Function'' , ou &amp;quot;&amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;&amp;quot;, é uma função que estima o quão provável é encontrar duas partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; dentro de um sistema de várias partículas.&lt;br /&gt;
&lt;br /&gt;
Em um sistema de &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas, o &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt; é definido como a média do número de partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
	g(r)=\frac{V}{N^2}\langle\sum_{i=1}^N\sum_{j\neq i}^N\delta(r-|r_i-r_j|)  \rangle&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Numéricamente pode ser interpretado como a média do número de pares de partículas a uma distância entre &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;r+\Delta r&amp;lt;/math&amp;gt; pesado pelo volume/área desta região.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	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]&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde &amp;lt;math&amp;gt;V_t&amp;lt;/math&amp;gt; é o/a volume/área total e &amp;lt;math&amp;gt;rect&amp;lt;/math&amp;gt; é a função retangular.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Em resumo, o &amp;lt;math&amp;gt;g(r,\Delta r)&amp;lt;/math&amp;gt; é a média dos [[Histogramas_e_Densidade_de_Probabilidade|histogramas]] do número de partículas em um ''bin''  de largura &amp;lt;math&amp;gt;\Delta r&amp;lt;/math&amp;gt; a uma &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; feitos para cada partícula no sistema pesado pelo volume/área deste ''bin''.&lt;br /&gt;
&lt;br /&gt;
==== Construção do Código ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Resultados ====&lt;br /&gt;
&lt;br /&gt;
[[Image:GR-D.png|400px|Resultado do cálculo de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
=Referências=&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;/div&gt;</summary>
		<author><name>Rmoreira</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=563</id>
		<title>Medidas estáticas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=563"/>
		<updated>2016-06-20T13:16:59Z</updated>

		<summary type="html">&lt;p&gt;Rmoreira: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em dinâmica molecular, medidas estáticas são medidas realizadas em um passo específico de tempo da simulação.&lt;br /&gt;
= Psi 6=&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;caixa&amp;quot; em que as partículas estão localizadas e então localizar possíveis &amp;quot;defeitos&amp;quot; no padrão hexagonal.&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\frac{\pi}{3}&amp;lt;/math&amp;gt;. Buscando uma relação em que esta situação seja a situação de &amp;lt;math&amp;gt;\psi_6 = 1&amp;lt;/math&amp;gt;, é possível definir que o &amp;lt;math&amp;gt;\psi_6 &amp;lt;/math&amp;gt; vale:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\psi_6=\frac{1}{6}\sum_i^ncos(6\theta_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\theta=\frac{\pi}{3}&amp;lt;/math&amp;gt; resulte em um valor de &amp;lt;math&amp;gt;\psi_6=1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Implementação Computacional ==&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Encontrando vizinhos ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
O método aqui citado é pouco otimizado, pois utiliza-se um for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;, 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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;), desta forma o valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; resultará em um valor razoável ( &amp;gt;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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for(i=0;i&amp;lt;6;i++){&lt;br /&gt;
	neighborsX[i]=999;&lt;br /&gt;
	neighborsY[i]=999;&lt;br /&gt;
        dNeighbors[i]=999;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;for&amp;quot; em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; 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 &amp;quot;xOrg&amp;quot; (x original) e o possível vizinho de &amp;quot;x2&amp;quot;) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for(i=0;i&amp;lt;NP;i++){             &lt;br /&gt;
	xOrg=xx[i];&lt;br /&gt;
	yOrg=yy[i];&lt;br /&gt;
	for(j=0;j&amp;lt;6;j++){&lt;br /&gt;
		dNeighbors[j]=999.;&lt;br /&gt;
	}&lt;br /&gt;
	for(j=0;j&amp;lt;NP;j++){&lt;br /&gt;
		x2=xx[j];&lt;br /&gt;
		y2=yy[j];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;radiusLimit&amp;quot; (Raio limite) do codigo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
		if(i!=j){&lt;br /&gt;
			//Calcula distância entre partícula-teste e possível vizinho&lt;br /&gt;
			deltaX=fabs(x2-xOrg);&lt;br /&gt;
			deltaY=fabs(y2-yOrg);&lt;br /&gt;
			deltaX=deltaX-rint(deltaX/Lx)*Lx;&lt;br /&gt;
			deltaY=deltaY-rint(deltaY/Ly)*Ly;&lt;br /&gt;
			dNew=sqrt((deltaX*deltaX)+(deltaY*deltaY));&lt;br /&gt;
				// --- //&lt;br /&gt;
&lt;br /&gt;
			if(dNew&amp;lt;radiusLimit)  // Testa se a distância é menor que o raio limite&lt;br /&gt;
			{	&lt;br /&gt;
				//Procura-se o maior valor presente em dNeighbors e salva-se com o nome de &amp;quot;dOld&amp;quot;, bem como seu indíce como &amp;quot;index&amp;quot;&lt;br /&gt;
				dOld=0;&lt;br /&gt;
				for(k=0;k&amp;lt;6;k++){&lt;br /&gt;
					if(dNeighbors[k]&amp;gt;dOld){&lt;br /&gt;
						dOld=dNeighbors[k];&lt;br /&gt;
						index=k;&lt;br /&gt;
					}&lt;br /&gt;
							 }&lt;br /&gt;
							 // --- //    &lt;br /&gt;
						   &lt;br /&gt;
							// Testa-se se a distância do possível vizinho é menor que a maior distância presente já em dNeighbors&lt;br /&gt;
				if(dNew&amp;lt;dOld){&lt;br /&gt;
					neighborsX[index]=x2;&lt;br /&gt;
					neighborsY[index]=y2;&lt;br /&gt;
					dNeighbors[index]=dNew;&lt;br /&gt;
				}&lt;br /&gt;
			}		&lt;br /&gt;
			}&lt;br /&gt;
	}         &lt;br /&gt;
   &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Portanto após esse algoritmo, temos guardadas as posições das 6 partículas mais próximas, é importante ressaltar que o &amp;quot;for&amp;quot; em partícula-teste ainda não foi fechado, e ainda dentro deste mesmo loop serão calculados os valores de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Calculando o Psi 6 ===&lt;br /&gt;
&lt;br /&gt;
Tendo os valores de X e Y dos vizinhos da partícula-teste, podemos proceder para o cálculo do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;. 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 &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt; e será dado pela seguinte relação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\phi_i=arctg\left(\frac{\Delta Y}{\Delta X}\right)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na implementação em código fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(j=0;j&amp;lt;6;j++){ // Calculating angles&lt;br /&gt;
		delX=neighborsX[j]-xx[i];&lt;br /&gt;
		delY=neighborsY[j]-yy[i];&lt;br /&gt;
&lt;br /&gt;
                //Condições de contorno periódicas&lt;br /&gt;
		delX=delX-rint(delX/Lx)*Lx; &lt;br /&gt;
        	delY=delY-rint(delY/Ly)*Ly;&lt;br /&gt;
                // --- //&lt;br /&gt;
&lt;br /&gt;
		angle[j]=atan2(delY,delX);&lt;br /&gt;
		if (angle[j]&amp;lt;0)&lt;br /&gt;
			angle[j]=2*PI+angle[j];&lt;br /&gt;
                psix[i]=0;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora somente precisa-se realizar um algoritmo que ordene o vetor &amp;quot;angle&amp;quot; do menor para o maior ângulo, desta forma é possível calcular os &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Feito o ordenamento do vetor, basta calcular a média do valor do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; de cada vizinho. Para isto, precisamos calcular os valores de &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt; em função dos &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt;, basta realizar a subtração do próximo vizinho no vetor pelo valor do ângulo do vizinho atual, dessa forma: &amp;lt;math&amp;gt; \theta_i = \psi_{i+1} - \psi_i &amp;lt;/math&amp;gt; com exceção do último vizinho, que será o ângulo dele menos o do primeiro, desta forma a implementação fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		firstAngle=angle[0];	&lt;br /&gt;
		for(j=0;j&amp;lt;5;j++){ &lt;br /&gt;
			angle[j]=cos(6.*(angle[j+1]-angle[j]));&lt;br /&gt;
		}		&lt;br /&gt;
		angle[5]=cos(6.*(firstAngle+2*PI-angle[5]));&lt;br /&gt;
		for(j=0;j&amp;lt;6;j++){ &lt;br /&gt;
			psix[i]+=angle[j]/6.;&lt;br /&gt;
		}	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E então está calculado o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, para facilitar a implementação é recomendado que este algoritmo seja uma função dentro de seu código e desta forma retorne o vetor &amp;quot;psix&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=Pair Distribution Function=&lt;br /&gt;
&lt;br /&gt;
[[Image:Gr.png|thumb|300px|right|Representação do cálculo numérico de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
A ''Pair Distribution Function'' , ou &amp;quot;&amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;&amp;quot;, é uma função que estima o quão provável é encontrar duas partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; dentro de um sistema de várias partículas.&lt;br /&gt;
&lt;br /&gt;
Em um sistema de &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas, o &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt; é definido como a média do número de partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
	g(r)=\frac{V}{N^2}\langle\sum_{i=1}^N\sum_{j\neq i}^N\delta(r-|r_i-r_j|)  \rangle&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Numéricamente pode ser interpretado como a média do número de pares de partículas a uma distância entre &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;r+\Delta r&amp;lt;/math&amp;gt; pesado pelo volume/área desta região.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	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]&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde &amp;lt;math&amp;gt;V_t&amp;lt;/math&amp;gt; é o/a volume/área total e &amp;lt;math&amp;gt;rect&amp;lt;/math&amp;gt; é a função retangular.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Em resumo, o &amp;lt;math&amp;gt;g(r,\Delta r)&amp;lt;/math&amp;gt; é a média dos [[Histogramas_e_Densidade_de_Probabilidade|histogramas]] do número de partículas em um ''bin''  de largura &amp;lt;math&amp;gt;\Delta r&amp;lt;/math&amp;gt; a uma &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; feitos para cada partícula no sistema pesado pelo volume/área deste ''bin''.&lt;br /&gt;
&lt;br /&gt;
==== Construção do Código ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Resultados ====&lt;br /&gt;
&lt;br /&gt;
[[Image:GR-D.png|400px|Resultado do cálculo de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
=Referências=&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;/div&gt;</summary>
		<author><name>Rmoreira</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=562</id>
		<title>Medidas estáticas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=562"/>
		<updated>2016-06-20T13:07:47Z</updated>

		<summary type="html">&lt;p&gt;Rmoreira: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em dinâmica molecular, medidas estáticas são medidas realizadas em um passo específico de tempo da simulação.&lt;br /&gt;
= Psi 6=&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;caixa&amp;quot; em que as partículas estão localizadas e então localizar possíveis &amp;quot;defeitos&amp;quot; no padrão hexagonal.&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\frac{\pi}{3}&amp;lt;/math&amp;gt;. Buscando uma relação em que esta situação seja a situação de &amp;lt;math&amp;gt;\psi_6 = 1&amp;lt;/math&amp;gt;, é possível definir que o &amp;lt;math&amp;gt;\psi_6 &amp;lt;/math&amp;gt; vale:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\psi_6=\frac{1}{6}\sum_i^ncos(6\theta_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\theta=\frac{\pi}{3}&amp;lt;/math&amp;gt; resulte em um valor de &amp;lt;math&amp;gt;\psi_6=1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Implementação Computacional ==&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Encontrando vizinhos ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
O método aqui citado é pouco otimizado, pois utiliza-se um for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;, 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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;), desta forma o valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; resultará em um valor razoável ( &amp;gt;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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for(i=0;i&amp;lt;6;i++){&lt;br /&gt;
	neighborsX[i]=999;&lt;br /&gt;
	neighborsY[i]=999;&lt;br /&gt;
        dNeighbors[i]=999;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;for&amp;quot; em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; 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 &amp;quot;xOrg&amp;quot; (x original) e o possível vizinho de &amp;quot;x2&amp;quot;) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for(i=0;i&amp;lt;NP;i++){             &lt;br /&gt;
	xOrg=xx[i];&lt;br /&gt;
	yOrg=yy[i];&lt;br /&gt;
	for(j=0;j&amp;lt;6;j++){&lt;br /&gt;
		dNeighbors[j]=999.;&lt;br /&gt;
	}&lt;br /&gt;
	for(j=0;j&amp;lt;NP;j++){&lt;br /&gt;
		x2=xx[j];&lt;br /&gt;
		y2=yy[j];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;radiusLimit&amp;quot; (Raio limite) do codigo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
		if(i!=j){&lt;br /&gt;
			//Calcula distância entre partícula-teste e possível vizinho&lt;br /&gt;
			deltaX=fabs(x2-xOrg);&lt;br /&gt;
			deltaY=fabs(y2-yOrg);&lt;br /&gt;
			deltaX=deltaX-rint(deltaX/Lx)*Lx;&lt;br /&gt;
			deltaY=deltaY-rint(deltaY/Ly)*Ly;&lt;br /&gt;
			dNew=sqrt((deltaX*deltaX)+(deltaY*deltaY));&lt;br /&gt;
				// --- //&lt;br /&gt;
&lt;br /&gt;
			if(dNew&amp;lt;radiusLimit)  // Testa se a distância é menor que o raio limite&lt;br /&gt;
			{	&lt;br /&gt;
				//Procura-se o maior valor presente em dNeighbors e salva-se com o nome de &amp;quot;dOld&amp;quot;, bem como seu indíce como &amp;quot;index&amp;quot;&lt;br /&gt;
				dOld=0;&lt;br /&gt;
				for(k=0;k&amp;lt;6;k++){&lt;br /&gt;
					if(dNeighbors[k]&amp;gt;dOld){&lt;br /&gt;
						dOld=dNeighbors[k];&lt;br /&gt;
						index=k;&lt;br /&gt;
					}&lt;br /&gt;
							 }&lt;br /&gt;
							 // --- //    &lt;br /&gt;
						   &lt;br /&gt;
							// Testa-se se a distância do possível vizinho é menor que a maior distância presente já em dNeighbors&lt;br /&gt;
				if(dNew&amp;lt;dOld){&lt;br /&gt;
					neighborsX[index]=x2;&lt;br /&gt;
					neighborsY[index]=y2;&lt;br /&gt;
					dNeighbors[index]=dNew;&lt;br /&gt;
				}&lt;br /&gt;
			}		&lt;br /&gt;
			}&lt;br /&gt;
	}         &lt;br /&gt;
   &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Portanto após esse algoritmo, temos guardadas as posições das 6 partículas mais próximas, é importante ressaltar que o &amp;quot;for&amp;quot; em partícula-teste ainda não foi fechado, e ainda dentro deste mesmo loop serão calculados os valores de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Calculando o Psi 6 ===&lt;br /&gt;
&lt;br /&gt;
Tendo os valores de X e Y dos vizinhos da partícula-teste, podemos proceder para o cálculo do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;. 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 &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt; e será dado pela seguinte relação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\phi_i=arctg\left(\frac{\Delta Y}{\Delta X}\right)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na implementação em código fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(j=0;j&amp;lt;6;j++){ // Calculating angles&lt;br /&gt;
		delX=neighborsX[j]-xx[i];&lt;br /&gt;
		delY=neighborsY[j]-yy[i];&lt;br /&gt;
&lt;br /&gt;
                //Condições de contorno periódicas&lt;br /&gt;
		delX=delX-rint(delX/Lx)*Lx; &lt;br /&gt;
        	delY=delY-rint(delY/Ly)*Ly;&lt;br /&gt;
                // --- //&lt;br /&gt;
&lt;br /&gt;
		angle[j]=atan2(delY,delX);&lt;br /&gt;
		if (angle[j]&amp;lt;0)&lt;br /&gt;
			angle[j]=2*PI+angle[j];&lt;br /&gt;
                psix[i]=0;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora somente precisa-se realizar um algoritmo que ordene o vetor &amp;quot;angle&amp;quot; do menor para o maior ângulo, desta forma é possível calcular os &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Feito o ordenamento do vetor, basta calcular a média do valor do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; de cada vizinho. Para isto, precisamos calcular os valores de &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt; em função dos &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt;, basta realizar a subtração do próximo vizinho no vetor pelo valor do ângulo do vizinho atual, dessa forma: &amp;lt;math&amp;gt; \theta_i = \psi_{i+1} - \psi_i &amp;lt;/math&amp;gt; com exceção do último vizinho, que será o ângulo dele menos o do primeiro, desta forma a implementação fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		firstAngle=angle[0];	&lt;br /&gt;
		for(j=0;j&amp;lt;5;j++){ &lt;br /&gt;
			angle[j]=cos(6.*(angle[j+1]-angle[j]));&lt;br /&gt;
		}		&lt;br /&gt;
		angle[5]=cos(6.*(firstAngle+2*PI-angle[5]));&lt;br /&gt;
		for(j=0;j&amp;lt;6;j++){ &lt;br /&gt;
			psix[i]+=angle[j]/6.;&lt;br /&gt;
		}	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E então está calculado o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, para facilitar a implementação é recomendado que este algoritmo seja uma função dentro de seu código e desta forma retorne o vetor &amp;quot;psix&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=Pair Distribution Function=&lt;br /&gt;
&lt;br /&gt;
[[Image:Gr.png|thumb|300px|right|Representação do cálculo numérico de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
A ''Pair Distribution Function'' , ou &amp;quot;&amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;&amp;quot;, é uma função que estima o quão provável é encontrar duas partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; dentro de um sistema de várias partículas.&lt;br /&gt;
&lt;br /&gt;
Em um sistema de &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas, o &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt; é definido como a média do número de partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
	g(r)=\frac{V}{N^2}\langle\sum_{i=1}^N\sum_{j\neq i}^N\delta(r-|r_i-r_j|)  \rangle&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Numéricamente pode ser interpretado como a média do número de pares de partículas a uma distância entre &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;r+\Delta r&amp;lt;/math&amp;gt; pesado pelo volume/área desta região.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	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]&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde &amp;lt;math&amp;gt;V_t&amp;lt;/math&amp;gt; é o/a volume/área total e &amp;lt;math&amp;gt;rect&amp;lt;/math&amp;gt; é a função retangular.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Em resumo, o &amp;lt;math&amp;gt;g(r,\Delta r)&amp;lt;/math&amp;gt; é a média dos [[Histogramas_e_Densidade_de_Probabilidade|histogramas]] do número de partículas em um ''bin''  de largura &amp;lt;math&amp;gt;\Delta r&amp;lt;/math&amp;gt; a uma &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; feitos para cada partícula no sistema pesado pelo volume/área deste ''bin''.&lt;br /&gt;
&lt;br /&gt;
==== Construção do Código ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Resultados ====&lt;br /&gt;
&lt;br /&gt;
[[Image:GR-D.png|400px|Resultado do cálculo de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
=Referências=&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;/div&gt;</summary>
		<author><name>Rmoreira</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=559</id>
		<title>Medidas estáticas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=559"/>
		<updated>2016-06-20T02:20:51Z</updated>

		<summary type="html">&lt;p&gt;Rmoreira: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em dinâmica molecular, medidas estáticas são medidas que&lt;br /&gt;
= Psi 6=&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;caixa&amp;quot; em que as partículas estão localizadas e então localizar possíveis &amp;quot;defeitos&amp;quot; no padrão hexagonal.&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\frac{\pi}{3}&amp;lt;/math&amp;gt;. Buscando uma relação em que esta situação seja a situação de &amp;lt;math&amp;gt;\psi_6 = 1&amp;lt;/math&amp;gt;, é possível definir que o &amp;lt;math&amp;gt;\psi_6 &amp;lt;/math&amp;gt; vale:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\psi_6=\frac{1}{6}\sum_i^ncos(6\theta_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\theta=\frac{\pi}{3}&amp;lt;/math&amp;gt; resulte em um valor de &amp;lt;math&amp;gt;\psi_6=1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Implementação Computacional ==&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Encontrando vizinhos ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
O método aqui citado é pouco otimizado, pois utiliza-se um for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;, 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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;), desta forma o valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; resultará em um valor razoável ( &amp;gt;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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for(i=0;i&amp;lt;6;i++){&lt;br /&gt;
	neighborsX[i]=999;&lt;br /&gt;
	neighborsY[i]=999;&lt;br /&gt;
        dNeighbors[i]=999;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;for&amp;quot; em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; 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 &amp;quot;xOrg&amp;quot; (x original) e o possível vizinho de &amp;quot;x2&amp;quot;) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for(i=0;i&amp;lt;NP;i++){             &lt;br /&gt;
	xOrg=xx[i];&lt;br /&gt;
	yOrg=yy[i];&lt;br /&gt;
	for(j=0;j&amp;lt;6;j++){&lt;br /&gt;
		dNeighbors[j]=999.;&lt;br /&gt;
	}&lt;br /&gt;
	for(j=0;j&amp;lt;NP;j++){&lt;br /&gt;
		x2=xx[j];&lt;br /&gt;
		y2=yy[j];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;radiusLimit&amp;quot; (Raio limite) do codigo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
		if(i!=j){&lt;br /&gt;
			//Calcula distância entre partícula-teste e possível vizinho&lt;br /&gt;
			deltaX=fabs(x2-xOrg);&lt;br /&gt;
			deltaY=fabs(y2-yOrg);&lt;br /&gt;
			deltaX=deltaX-rint(deltaX/Lx)*Lx;&lt;br /&gt;
			deltaY=deltaY-rint(deltaY/Ly)*Ly;&lt;br /&gt;
			dNew=sqrt((deltaX*deltaX)+(deltaY*deltaY));&lt;br /&gt;
				// --- //&lt;br /&gt;
&lt;br /&gt;
			if(dNew&amp;lt;radiusLimit)  // Testa se a distância é menor que o raio limite&lt;br /&gt;
			{	&lt;br /&gt;
				//Procura-se o maior valor presente em dNeighbors e salva-se com o nome de &amp;quot;dOld&amp;quot;, bem como seu indíce como &amp;quot;index&amp;quot;&lt;br /&gt;
				dOld=0;&lt;br /&gt;
				for(k=0;k&amp;lt;6;k++){&lt;br /&gt;
					if(dNeighbors[k]&amp;gt;dOld){&lt;br /&gt;
						dOld=dNeighbors[k];&lt;br /&gt;
						index=k;&lt;br /&gt;
					}&lt;br /&gt;
							 }&lt;br /&gt;
							 // --- //    &lt;br /&gt;
						   &lt;br /&gt;
							// Testa-se se a distância do possível vizinho é menor que a maior distância presente já em dNeighbors&lt;br /&gt;
				if(dNew&amp;lt;dOld){&lt;br /&gt;
					neighborsX[index]=x2;&lt;br /&gt;
					neighborsY[index]=y2;&lt;br /&gt;
					dNeighbors[index]=dNew;&lt;br /&gt;
				}&lt;br /&gt;
			}		&lt;br /&gt;
			}&lt;br /&gt;
	}         &lt;br /&gt;
   &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Portanto após esse algoritmo, temos guardadas as posições das 6 partículas mais próximas, é importante ressaltar que o &amp;quot;for&amp;quot; em partícula-teste ainda não foi fechado, e ainda dentro deste mesmo loop serão calculados os valores de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Calculando o Psi 6 ===&lt;br /&gt;
&lt;br /&gt;
Tendo os valores de X e Y dos vizinhos da partícula-teste, podemos proceder para o cálculo do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;. 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 &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt; e será dado pela seguinte relação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\phi_i=arctg\left(\frac{\Delta Y}{\Delta X}\right)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na implementação em código fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(j=0;j&amp;lt;6;j++){ // Calculating angles&lt;br /&gt;
		delX=neighborsX[j]-xx[i];&lt;br /&gt;
		delY=neighborsY[j]-yy[i];&lt;br /&gt;
&lt;br /&gt;
                //Condições de contorno periódicas&lt;br /&gt;
		delX=delX-rint(delX/Lx)*Lx; &lt;br /&gt;
        	delY=delY-rint(delY/Ly)*Ly;&lt;br /&gt;
                // --- //&lt;br /&gt;
&lt;br /&gt;
		angle[j]=atan2(delY,delX);&lt;br /&gt;
		if (angle[j]&amp;lt;0)&lt;br /&gt;
			angle[j]=2*PI+angle[j];&lt;br /&gt;
                psix[i]=0;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora somente precisa-se realizar um algoritmo que ordene o vetor &amp;quot;angle&amp;quot; do menor para o maior ângulo, desta forma é possível calcular os &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Feito o ordenamento do vetor, basta calcular a média do valor do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; de cada vizinho. Para isto, precisamos calcular os valores de &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt; em função dos &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt;, basta realizar a subtração do próximo vizinho no vetor pelo valor do ângulo do vizinho atual, dessa forma: &amp;lt;math&amp;gt; \theta_i = \psi_{i+1} - \psi_i &amp;lt;/math&amp;gt; com exceção do último vizinho, que será o ângulo dele menos o do primeiro, desta forma a implementação fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		firstAngle=angle[0];	&lt;br /&gt;
		for(j=0;j&amp;lt;5;j++){ &lt;br /&gt;
			angle[j]=cos(6.*(angle[j+1]-angle[j]));&lt;br /&gt;
		}		&lt;br /&gt;
		angle[5]=cos(6.*(firstAngle+2*PI-angle[5]));&lt;br /&gt;
		for(j=0;j&amp;lt;6;j++){ &lt;br /&gt;
			psix[i]+=angle[j]/6.;&lt;br /&gt;
		}	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E então está calculado o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, para facilitar a implementação é recomendado que este algoritmo seja uma função dentro de seu código e desta forma retorne o vetor &amp;quot;psix&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=Pair Distribution Function=&lt;br /&gt;
&lt;br /&gt;
[[Image:Gr.png|thumb|300px|right|Representação do cálculo numérico de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
A ''Pair Distribution Function'' , ou &amp;quot;&amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;&amp;quot;, é uma função que estima o quão provável é encontrar duas partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; dentro de um sistema de várias partículas.&lt;br /&gt;
&lt;br /&gt;
Em um sistema de &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas, o &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt; é definido como a média do número de partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
	g(r)=\frac{V}{N^2}\langle\sum_{i=1}^N\sum_{j\neq i}^N\delta(r-|r_i-r_j|)  \rangle&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Numéricamente pode ser interpretado como a média do número de pares de partículas a uma distância entre &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;r+\Delta r&amp;lt;/math&amp;gt; pesado pelo volume/área desta região.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	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]&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde &amp;lt;math&amp;gt;V_t&amp;lt;/math&amp;gt; é o/a volume/área total e &amp;lt;math&amp;gt;rect&amp;lt;/math&amp;gt; é a função retangular.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Em resumo, o &amp;lt;math&amp;gt;g(r,\Delta r)&amp;lt;/math&amp;gt; é a média dos [[Histogramas_e_Densidade_de_Probabilidade|histogramas]] do número de partículas em um ''bin''  de largura &amp;lt;math&amp;gt;\Delta r&amp;lt;/math&amp;gt; a uma &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; feitos para cada partícula no sistema pesado pelo volume/área deste ''bin''.&lt;br /&gt;
&lt;br /&gt;
==== Construção do Código ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Resultados ====&lt;br /&gt;
&lt;br /&gt;
[[Image:GR-D.png|400px|Resultado do cálculo de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
=Referências=&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;/div&gt;</summary>
		<author><name>Rmoreira</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=558</id>
		<title>Medidas estáticas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_est%C3%A1ticas&amp;diff=558"/>
		<updated>2016-06-20T02:15:06Z</updated>

		<summary type="html">&lt;p&gt;Rmoreira: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em dinâmica molecular, medidas estáticas são medidas que&lt;br /&gt;
= Psi 6=&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;caixa&amp;quot; em que as partículas estão localizadas e então localizar possíveis &amp;quot;defeitos&amp;quot; no padrão hexagonal.&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\frac{\pi}{3}&amp;lt;/math&amp;gt;. Buscando uma relação em que esta situação seja a situação de &amp;lt;math&amp;gt;\psi_6 = 1&amp;lt;/math&amp;gt;, é possível definir que o &amp;lt;math&amp;gt;\psi_6 &amp;lt;/math&amp;gt; vale:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\psi_6=\frac{1}{6}\sum_i^ncos(6\theta_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\theta=\frac{\pi}{3}&amp;lt;/math&amp;gt; resulte em um valor de &amp;lt;math&amp;gt;\psi_6=1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Implementação Computacional ==&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Encontrando vizinhos ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
O método aqui citado é pouco otimizado, pois utiliza-se um for em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;, 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 &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt;), desta forma o valor de &amp;lt;math&amp;gt;\psi_6&amp;lt;/math&amp;gt; resultará em um valor razoável ( &amp;gt;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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for(i=0;i&amp;lt;6;i++){&lt;br /&gt;
	neighborsX[i]=999;&lt;br /&gt;
	neighborsY[i]=999;&lt;br /&gt;
        dNeighbors[i]=999;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;for&amp;quot; em &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; 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 &amp;quot;xOrg&amp;quot; (x original) e o possível vizinho de &amp;quot;x2&amp;quot;) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for(i=0;i&amp;lt;NP;i++){             &lt;br /&gt;
	xOrg=xx[i];&lt;br /&gt;
	yOrg=yy[i];&lt;br /&gt;
	for(j=0;j&amp;lt;6;j++){&lt;br /&gt;
		dNeighbors[j]=999.;&lt;br /&gt;
	}&lt;br /&gt;
	for(j=0;j&amp;lt;NP;j++){&lt;br /&gt;
		x2=xx[j];&lt;br /&gt;
		y2=yy[j];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;radiusLimit&amp;quot; (Raio limite) do codigo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
		if(i!=j){&lt;br /&gt;
			//Calcula distância entre partícula-teste e possível vizinho&lt;br /&gt;
			deltaX=fabs(x2-xOrg);&lt;br /&gt;
			deltaY=fabs(y2-yOrg);&lt;br /&gt;
			deltaX=deltaX-rint(deltaX/Lx)*Lx;&lt;br /&gt;
			deltaY=deltaY-rint(deltaY/Ly)*Ly;&lt;br /&gt;
			dNew=sqrt((deltaX*deltaX)+(deltaY*deltaY));&lt;br /&gt;
				// --- //&lt;br /&gt;
&lt;br /&gt;
			if(dNew&amp;lt;radiusLimit)  // Testa se a distância é menor que o raio limite&lt;br /&gt;
			{	&lt;br /&gt;
				//Procura-se o maior valor presente em dNeighbors e salva-se com o nome de &amp;quot;dOld&amp;quot;, bem como seu indíce como &amp;quot;index&amp;quot;&lt;br /&gt;
				dOld=0;&lt;br /&gt;
				for(k=0;k&amp;lt;6;k++){&lt;br /&gt;
					if(dNeighbors[k]&amp;gt;dOld){&lt;br /&gt;
						dOld=dNeighbors[k];&lt;br /&gt;
						index=k;&lt;br /&gt;
					}&lt;br /&gt;
							 }&lt;br /&gt;
							 // --- //    &lt;br /&gt;
						   &lt;br /&gt;
							// Testa-se se a distância do possível vizinho é menor que a maior distância presente já em dNeighbors&lt;br /&gt;
				if(dNew&amp;lt;dOld){&lt;br /&gt;
					neighborsX[index]=x2;&lt;br /&gt;
					neighborsY[index]=y2;&lt;br /&gt;
					dNeighbors[index]=dNew;&lt;br /&gt;
				}&lt;br /&gt;
			}		&lt;br /&gt;
			}&lt;br /&gt;
	}         &lt;br /&gt;
   &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Portanto após esse algoritmo, temos guardadas as posições das 6 partículas mais próximas, é importante ressaltar que o &amp;quot;for&amp;quot; em partícula-teste ainda não foi fechado, e ainda dentro deste mesmo loop serão calculados os valores de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Calculando o Psi 6 ===&lt;br /&gt;
&lt;br /&gt;
Tendo os valores de X e Y dos vizinhos da partícula-teste, podemos proceder para o cálculo do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;. 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 &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt; e será dado pela seguinte relação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\phi_i=arctg\left(\frac{\Delta Y}{\Delta X}\right)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na implementação em código fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	for(j=0;j&amp;lt;6;j++){ // Calculating angles&lt;br /&gt;
		delX=neighborsX[j]-xx[i];&lt;br /&gt;
		delY=neighborsY[j]-yy[i];&lt;br /&gt;
&lt;br /&gt;
                //Condições de contorno periódicas&lt;br /&gt;
		delX=delX-rint(delX/Lx)*Lx; &lt;br /&gt;
        	delY=delY-rint(delY/Ly)*Ly;&lt;br /&gt;
                // --- //&lt;br /&gt;
&lt;br /&gt;
		angle[j]=atan2(delY,delX);&lt;br /&gt;
		if (angle[j]&amp;lt;0)&lt;br /&gt;
			angle[j]=2*PI+angle[j];&lt;br /&gt;
                psix[i]=0;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora somente precisa-se realizar um algoritmo que ordene o vetor &amp;quot;angle&amp;quot; do menor para o maior ângulo, desta forma é possível calcular os &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Feito o ordenamento do vetor, basta calcular a média do valor do &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt; de cada vizinho. Para isto, precisamos calcular os valores de &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt; em função dos &amp;lt;math&amp;gt; \phi &amp;lt;/math&amp;gt;, basta realizar a subtração do próximo vizinho no vetor pelo valor do ângulo do vizinho atual, dessa forma: &amp;lt;math&amp;gt; \theta_i = \psi_{i+1} - \psi_i &amp;lt;/math&amp;gt; com exceção do último vizinho, que será o ângulo dele menos o do primeiro, desta forma a implementação fica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		firstAngle=angle[0];	&lt;br /&gt;
		for(j=0;j&amp;lt;5;j++){ &lt;br /&gt;
			angle[j]=cos(6.*(angle[j+1]-angle[j]));&lt;br /&gt;
		}		&lt;br /&gt;
		angle[5]=cos(6.*(firstAngle+2*PI-angle[5]));&lt;br /&gt;
		for(j=0;j&amp;lt;6;j++){ &lt;br /&gt;
			psix[i]+=angle[j]/6.;&lt;br /&gt;
		}	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E então está calculado o valor de &amp;lt;math&amp;gt; \psi_6 &amp;lt;/math&amp;gt;, para facilitar a implementação é recomendado que este algoritmo seja uma função dentro de seu código e desta forma retorne o vetor &amp;quot;psix&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=Pair Distribution Function=&lt;br /&gt;
&lt;br /&gt;
[[Image:Gr.png|thumb|300px|right|Representação do cálculo numérico de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
A ''Pair Distribution Function'' , ou &amp;quot;&amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;&amp;quot;, é uma função que estima o quão provável é encontrar duas partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; dentro de um sistema de várias partículas.&lt;br /&gt;
&lt;br /&gt;
Em um sistema de &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; partículas, o &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt; é definido como a média do número de partículas a uma distância &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
	g(r)=\frac{V}{N^2}\langle\sum_{i=1}^N\sum_{j\neq i}^N\delta(r-|r_i-r_j|)  \rangle&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Numéricamente pode ser interpretado como a média do número de pares de partículas a uma distância entre &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;r+\Delta r&amp;lt;/math&amp;gt; pesado pelo volume/área desta região.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	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]&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde &amp;lt;math&amp;gt;V_t&amp;lt;/math&amp;gt; é o/a volume/área total e &amp;lt;math&amp;gt;rect&amp;lt;/math&amp;gt; é a função retangular.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Em resumo, o &amp;lt;math&amp;gt;g(r,\Delta r)&amp;lt;/math&amp;gt; é a média dos [[Histogramas_e_Densidade_de_Probabilidade|histogramas]] do número de partículas em um ''bin''  de largura &amp;lt;math&amp;gt;\Delta r&amp;lt;/math&amp;gt; a uma &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; feitos para cada partícula no sistema pesado pelo volume/área deste ''bin''.&lt;br /&gt;
&lt;br /&gt;
==== Construção do Código ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Resultados ====&lt;br /&gt;
&lt;br /&gt;
[[Image:GR-D.png|400px|Resultado do cálculo de &amp;lt;math&amp;gt;g(r)&amp;lt;/math&amp;gt;;]]&lt;br /&gt;
&lt;br /&gt;
=Referências=&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;/div&gt;</summary>
		<author><name>Rmoreira</name></author>
	</entry>
</feed>