Ir ao conteúdo
  • Cadastre-se

Matriz 3 d nao permite mais de 71 valores


Posts recomendados

#include <stdio.h>
#include <math.h>
#include <stdlib.h>

int main(){
	
	// declaração de variaveis
	int i, j,k, L, n,start,ncfi,k1,k2,k3,k4,k5,k6;
	float magnet[2001],magnet_med,S[250][250][250],p,BJ,T,r, somaup[2001], somadown[2001];

	// constantes
	L=251;
	ncfi=2000;
	
	// RECEBER TEMPERATURA E START PARA CRIAÇÃO DE REDE
	printf("start=?");	
	scanf("%d",&start);
	printf("T=?");	 
	scanf("%f",&T);
	BJ = 1/T;
	 
	if(start==1) 
		for(i=1;i<=L;i++)
			for(j=1;j<=L;j++)
				for(k=1;k<=L;k++)
					S[i][j][k]=1.0;
	else 
		for(i=1;i<=L;i++)
			for(j=1;j<=L;j++)
				for(k=1;k<=L;k++){
					r=rand()%1000;
					if(r<=500)	S[i][j][k]=1.0;
					else   S[i][j][k]=-1.0;
					}

	for(n=1;n<=ncfi;n++){
	    somaup[n]=0;
	    somadown[n]=0;
	   	for(i=1;i<=L;i++){
			for(j=1;j<=L;j++){
				for(k=1;k<=L;k++){
					//condições de contorno  		
			   		k1=i-1;
			   		if(i==1) k1=L; 
			   
			  		k2=i+1;
			  		if(k2>L)  k2=k2-L;
			   
					k3=j-1;
			   		if(j==1) k3=L;
			   
			   		k4=j+1;
			   		if(k4>L) k4=k4-L;
			   		
			   		k5=k-1;
			   		if(k==1) k5=L;
			   
			   		k6=k+1;
			   		if(k6>L) k6=k6-L;
		  
	
	   				//calcula o probabilidade de mudar de configuração
	    
	   				p=expf(-2*BJ*(S[i][k3][k]*S[i][j][k]+S[i][j][k]*S[i][k4][k]+S[k1][j][k]*S[i][j][k]+S[i][j][k]*S[k2][j][k]+S[i][j][k5]*S[i][j][k]+S[i][j][k]*S[i][j][k6])); 
	   				// if(j<6 and i<6 and j<6) printf("%f\n",p);
			 		if(n==1) S[i][j][k]=S[i][j][k];
	         		else if (p>=1) S[i][j][k]=-S[i][j][k];
			 		else{		   
		      		r=(float)(rand()%1000)/1000;
		      		if(r<=p) S[i][j][k]=-S[i][j][k];}
				
					// cálculo da somaup
					if(S[i][j][k]==1) somaup[n]=somaup[n]+1;        
	    		
					// cálculo da somadown
					if(S[i][j][k]==-1) somadown[n]=somadown[n]+1;

		 			//cálculo da magnetização
		 	  
					magnet[n]=(float)(1/pow((double)L,3))*(somaup[n]-somadown[n]);
					}
				}
			}
		}
	
	magnet_med=0;
		 
	for(n=1;n<ncfi;n++){
			
		//magnet_med+=magnet[n]; 
		magnet_med= magnet_med+magnet[n];	
		}  
		 
	magnet_med=(float)magnet_med/ncfi;
	printf("a media e : %f",magnet_med);
    
	

	
}

 

Preciso de matrizes que a matriz permita [251][251][251] 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...