Autor Tópico: Corujão do Clube Cético  (Lida 289469 vezes)

0 Membros e 1 Visitante estão vendo este tópico.

Offline Gaúcho

  • Moderadores Globais
  • Nível Máximo
  • *
  • Mensagens: 15.288
  • Sexo: Masculino
  • República Rio-Grandense
Re: Corujão do Clube Cético
« Resposta #3025 Online: 09 de Novembro de 2008, 06:11:11 »
Eu estou trapaceando já que aqui é 21:10 :D
"— A democracia em uma sociedade livre exige que os governados saibam o que fazem os governantes, mesmo quando estes buscam agir protegidos pelas sombras." Sérgio Moro

Offline Flavia

  • Nível 34
  • *
  • Mensagens: 2.767
  • Sexo: Feminino
Re: Corujão do Clube Cético
« Resposta #3026 Online: 12 de Novembro de 2008, 00:24:55 »
opa!
só passando aqui pra marcar presença... :D
já to indo dormir de qualquer jeito huauhauhahua
vanitas vanitatum omnia vanitas

Offline Fabulous

  • Nível Máximo
  • *
  • Mensagens: 6.425
Re: Corujão do Clube Cético
« Resposta #3027 Online: 14 de Novembro de 2008, 18:32:42 »
Faz tempo que não apareço no Atos da Moderação. HaHaHahahaHhahahAha... :P
MSN: fabulous3700@hotmail.com

Offline SnowRaptor

  • Nível Máximo
  • *
  • Mensagens: 17.962
  • Sexo: Masculino
Re: Corujão do Clube Cético
« Resposta #3028 Online: 14 de Novembro de 2008, 18:48:17 »
Isso pode ser providenciado :twisted:
Elton Carvalho

Antes de me apresentar sua teoria científica revolucionária, clique AQUI

“Na fase inicial do processo [...] o cientista trabalha através da
imaginação, assim como o artista. Somente depois, quando testes
críticos e experimentação entram em jogo, é que a ciência diverge da
arte.”

-- François Jacob, 1997

Offline Nyx

  • Nível Máximo
  • *
  • Mensagens: 7.758
  • Sexo: Feminino
  • nyx
Re: Corujão do Clube Cético
« Resposta #3029 Online: 15 de Novembro de 2008, 01:58:33 »
 :P Alguém vivo?

Offline Dodo

  • Nível Máximo
  • *
  • Mensagens: 5.304
Re: Corujão do Clube Cético
« Resposta #3030 Online: 15 de Novembro de 2008, 02:07:51 »
Você é único, assim como todos os outros.
Alfred E. Newman

Offline Nyx

  • Nível Máximo
  • *
  • Mensagens: 7.758
  • Sexo: Feminino
  • nyx
Re: Corujão do Clube Cético
« Resposta #3031 Online: 15 de Novembro de 2008, 02:12:15 »
 :hihi: Boa noite tio Dodô.

Offline Dodo

  • Nível Máximo
  • *
  • Mensagens: 5.304
Re: Corujão do Clube Cético
« Resposta #3032 Online: 15 de Novembro de 2008, 02:19:17 »
:hihi: Boa noite tio Dodô.

Boa noite, minha filha, como vai você?
Você é único, assim como todos os outros.
Alfred E. Newman

Offline Nyx

  • Nível Máximo
  • *
  • Mensagens: 7.758
  • Sexo: Feminino
  • nyx
Re: Corujão do Clube Cético
« Resposta #3033 Online: 15 de Novembro de 2008, 02:27:14 »
 :down: Mais ou menos.

 :P Mas isso não é o Muro das Lamentações, então não vou ficar reclamando.

Offline Dodo

  • Nível Máximo
  • *
  • Mensagens: 5.304
Re: Corujão do Clube Cético
« Resposta #3034 Online: 15 de Novembro de 2008, 02:43:18 »
:down: Mais ou menos.

 :P Mas isso não é o Muro das Lamentações, então não vou ficar reclamando.

Isso acontece, mas não se preocupe: quando casar, sara.  :hihi:
Você é único, assim como todos os outros.
Alfred E. Newman

Offline SnowRaptor

  • Nível Máximo
  • *
  • Mensagens: 17.962
  • Sexo: Masculino
Re: Corujão do Clube Cético
« Resposta #3035 Online: 15 de Novembro de 2008, 03:11:34 »
Tentei dormir. Fiquei pensando sobre um problema por resolver e vim aqui "codar".

Ó:

Código: [Selecionar]
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

void simula_mc(int L, int Nsteps, double temp, int **S, int **resultados, double *magnetizacao, double *energia);
void inicializa_matriz(int **S, int L);
void troca(int **S, int L, double temp);
void calcula(int **S, int L, int *mag, int *ener);

int main(int argc, char** argv){
int L, Nsteps, counter, **S, **resultados;
double temp, magnetizacao, energia;
FILE *output;
srand (1);
/* Converte os parametros de entrada em variaveis utilizaveis */
if (argc !=  5){
printf("Erro: Uso: %s  L Nsteps temp outfile\n", argv[0]);
exit(1);
}
L = atoi(argv[1]);
Nsteps = atoi(argv[2]);
temp = atof(argv[3]);

/* Declara a matriz de Ising S*/
S = malloc(L*sizeof(int*));
if (S == NULL){
printf("Allocation failure\n");
exit (2);
}
for( counter=0; counter < L; counter++){
S[counter] = malloc(L * sizeof(int));
if (S[counter] == NULL){
printf("Allocation failure\n");
exit (2);
}
}

/* Declara a matriz de rezultados: primeira coluna = magnetizacao, segunda coluna = energia. uma linha por passo de MC */
resultados = malloc(Nsteps*sizeof(int *));
if (resultados == NULL){
printf("Allocation failure\n");
exit (2);
}
for( counter=0; counter < Nsteps; counter++){
resultados[counter] = malloc(2 * sizeof(int));
if (resultados[counter] == NULL){
printf("Allocation failure\n");
exit (2);
}
}

simula_mc(L, Nsteps, temp, S, resultados, &magnetizacao, &energia);

output = fopen(argv[4], "w");
if (output == NULL){
printf("Erro ao abrir arquivo %s para escrita\n", argv[6]);
exit(2);
}

fprintf(output, "#Saida montecarlo: T = %g; %d passos; L = %d\n",temp, Nsteps, L);
fprintf(output, "#Magnetizacao media: %g \t Energia media %g\n", magnetizacao, energia);
fprintf(output, "#Passo\tMagnetizacao\tEnergia\n");

for( counter=0; counter < Nsteps; counter++){
fprintf(output, "%d\t%d\t%d\n", counter, resultados[counter][0], resultados[counter][1]);
}

fclose(output);

for(counter = 0; counter < L; counter++) free(S[counter]);
free (S);

for (counter = 0; counter < Nsteps; counter++) free(resultados[counter]);
free(resultados);
return 0;
}

void simula_mc(int L, int Nsteps, double temp, int **S, int **resultados, double *magnetizacao, double *energia){
int passo, passoMC, L2 = L*L;
int mag_passo, ener_passo;

temp = 1/temp;
*magnetizacao= 0;
*energia = 0;
inicializa_matriz(S, L);

/* transiente */
for (passo = 0; passo < L2*Nsteps/10; passo++)
troca(S, L, temp);

for (passoMC = 0; passoMC < Nsteps; passoMC++)
{
for(passo = 0; passo < L2; passo++)
troca(S, L, temp);
calcula(S, L, &mag_passo, &ener_passo);
*magnetizacao += abs(mag_passo);
*energia += ener_passo;
resultados[passoMC][0]= mag_passo;
resultados[passoMC][1]= ener_passo;
}
*magnetizacao = *magnetizacao/Nsteps;
*energia = *energia/Nsteps;
}


void inicializa_matriz(int **S, int L){
int i, j;
for (i=0; i < L; i++)
for (j=0; j < L; j++){
S[i][j] = 1;
}
}

void troca(int **S, int L, double temp){
int i, j, imais, imenos, jmais, jmenos;
int delta_E;
double aleat;


i = rand() % L;
j = rand() % L;
imais = (i+L+1)%L;
imenos = (i+L-1)%L;
jmais = (j+L+1)%L;
jmenos = (j+L-1)%L;

delta_E = 2 * S[i][j] * (S[i][jmais]+ S[i][jmenos] + S[imais][j] + S[imenos][j]);

if(delta_E <= 0){
S[i][j] *= -1;
}
else{
aleat = (double) rand()/RAND_MAX;
if (aleat < exp(-delta_E*temp)){
S[i][j] *= -1;
}
}
}


void calcula(int **S, int L, int *mag, int *ener){
register int i, j;
*mag=0; *ener=0;
for (i=0; i < L; i++){
for (j=0; j < L; j++){
    *mag += S[i][j];
    *ener += S[i][j]*(S[i][(j+1)%L] + S[(i+1)%L][j]);
}
}
}
Elton Carvalho

Antes de me apresentar sua teoria científica revolucionária, clique AQUI

“Na fase inicial do processo [...] o cientista trabalha através da
imaginação, assim como o artista. Somente depois, quando testes
críticos e experimentação entram em jogo, é que a ciência diverge da
arte.”

-- François Jacob, 1997

Offline Eleitor de Mário Oliveira

  • Nível 37
  • *
  • Mensagens: 3.502
  • Sexo: Masculino
    • Lattes
Re: Corujão do Clube Cético
« Resposta #3036 Online: 15 de Novembro de 2008, 04:54:12 »
Vou compilar isto agora e ver o que faz.

Offline Eleitor de Mário Oliveira

  • Nível 37
  • *
  • Mensagens: 3.502
  • Sexo: Masculino
    • Lattes
Re: Corujão do Clube Cético
« Resposta #3037 Online: 15 de Novembro de 2008, 05:04:19 »
ok... eu sou um n00b! não entendi para que serve.

Offline FZapp

  • Administradores
  • Nível Máximo
  • *
  • Mensagens: 6.943
  • Sexo: Masculino
  • El Inodoro Pereyra
    • JVMC
Re: Corujão do Clube Cético
« Resposta #3038 Online: 15 de Novembro de 2008, 09:37:28 »
Bom, simulamc deve ser algum calculo de magnetização usando simulação de Monte Carlo, que não sei exatamente o que significa e uma busca do Google me deixou mais confuso ainda !

Por exemplo:

http://wwwusers.rdc.puc-rio.br/wbraga/MCarlo/MC.htm


Snow, se me falar melhor o problema, quem sabe ajudo :)
--
Si hemos de salvar o no,
de esto naides nos responde;
derecho ande el sol se esconde
tierra adentro hay que tirar;
algun día hemos de llegar...
despues sabremos a dónde.

"Why do you necessarily have to be wrong just because a few million people think you are?" Frank Zappa

Offline FZapp

  • Administradores
  • Nível Máximo
  • *
  • Mensagens: 6.943
  • Sexo: Masculino
  • El Inodoro Pereyra
    • JVMC
Re: Corujão do Clube Cético
« Resposta #3039 Online: 15 de Novembro de 2008, 11:33:40 »
Mmm... você poderia postar como você está executando ? Isto é, valores possiveis para L, Nsteps, temp, etc.

Tenho uma surpresinha, quem sabe vc gosta...
--
Si hemos de salvar o no,
de esto naides nos responde;
derecho ande el sol se esconde
tierra adentro hay que tirar;
algun día hemos de llegar...
despues sabremos a dónde.

"Why do you necessarily have to be wrong just because a few million people think you are?" Frank Zappa

Offline FZapp

  • Administradores
  • Nível Máximo
  • *
  • Mensagens: 6.943
  • Sexo: Masculino
  • El Inodoro Pereyra
    • JVMC
Re: Corujão do Clube Cético
« Resposta #3040 Online: 15 de Novembro de 2008, 12:05:50 »
Como estou velho e preguiçoso, portei ele para Java. Eu não vi que faça cálculos tão terríveis ou profundos como para que haja problemas de performance, mas como nos valores de cálculo vc usou register, talvez eu esteja enganado.

Passando como valores L=20, Nsteps= 5 temp=45

#Saida montecarlo: T = 0.022222222222222223; 5 passos; L = +20
#Magnetizacao media: 17.6     Energia media -0.8
#Passo   Magnetizacao   Energia
0   32   20
1   -2   -32
2   0   -8
3   -36   0
4   18   16
--
Si hemos de salvar o no,
de esto naides nos responde;
derecho ande el sol se esconde
tierra adentro hay que tirar;
algun día hemos de llegar...
despues sabremos a dónde.

"Why do you necessarily have to be wrong just because a few million people think you are?" Frank Zappa

Offline FZapp

  • Administradores
  • Nível Máximo
  • *
  • Mensagens: 6.943
  • Sexo: Masculino
  • El Inodoro Pereyra
    • JVMC
Re: Corujão do Clube Cético
« Resposta #3041 Online: 15 de Novembro de 2008, 12:14:52 »
Já mandei, se tiver algum erro de cálculo me avise... mas portei usando random, abs, exp, são todas funções clássicas ;)
--
Si hemos de salvar o no,
de esto naides nos responde;
derecho ande el sol se esconde
tierra adentro hay que tirar;
algun día hemos de llegar...
despues sabremos a dónde.

"Why do you necessarily have to be wrong just because a few million people think you are?" Frank Zappa

Offline SnowRaptor

  • Nível Máximo
  • *
  • Mensagens: 17.962
  • Sexo: Masculino
Re: Corujão do Clube Cético
« Resposta #3042 Online: 15 de Novembro de 2008, 13:28:05 »
Acordei agora :D

L tipicamente fica entre 10 e 40, mas o resultado fica bonito mesmo com L=400 ou 500. Temp é uma temperatura normalizada adimensional maluca. As cosias legais acontecem se rodarmos o programa para várias temperaturas (temp) entre 1.0 e 3.0 e vermos o que acontece com a magnetização média e com um histograma dos valores de magnetização. Como vamos fazer estatística, o legal é que Npassos seja da ordem de um milhão.

Descrição do problema: É uma rede quadrada (bidimensional) de spins (ímãs) que interagem com seus vizinhos à esquerda, à direita acima e abaixo. Ela é representada pela matriz S_%7Bij%7D+%3D+%5Cpm+1, onde +1 representa spin "pra cima" e -1 representa spin "pra baixo".

A energia desse sistema é dada por H+%3D+-J%5Csum_%7Bi%2Cj%7D%5Cleft%28S_%7Bij%7DS_%7Bi%28j%2B1%29%7D+%2B+S_%7Bij%7DS_%7B%28i%2B1%29j%7D%5Cright%29. Ou seja, se dois vizinhos têm o mesmo sinal, a energia é -J. Se têm sinais opostos, é +J. Isso significa que o sistema "prefere" ficar todo alinhado e virar um grande ímã. Isso representa um sistema ferromagnético, um ímã permanente desses que a gente conhece. Acontece que isso depende da temperatura. Se a temperatura estiver muito alta, esses spins se agitam muito e não páram quietos alinhadinhos bonitinhos. Isso acontece com o ferro: se você aquecê-lo acima de uma certa temperatura, ele deixa de ser magnético. Todo ferreiro decente sabe disso :D

Montecarlo é o nome desse tipo se simulação, que usa números aleatórios. Nesse caso, os números aleatórios são escolhidos pra "flipar" (mudar de sinal) um elemento aleatório da matriz S. Primeiro ele calcula qual vai ser a mudança na energia do sistema se ele flipasse aquele spin. Se essa mudança for negativa ou zero (ou seja, o sistema não precisa de energia externa pra realizar a troca), ele aceita a mudança e grava o spin flipado na matriz. Se a enegia aumentar, ele tem uma probabilidade e%5E%7B-%5Cfrac%7B%5CDelta_E%7D%7Bk_b+T%7D%7D de aceitar a mudança. Ou seja, quanto maior a temperatura, mais provável é ele aceitar uma mudança que aumente a energia em um certo valor.

Como eu falei, a graça disso é rodar esse programa pra vários valores de temperatura e ver como a magnetização média muda:
Elton Carvalho

Antes de me apresentar sua teoria científica revolucionária, clique AQUI

“Na fase inicial do processo [...] o cientista trabalha através da
imaginação, assim como o artista. Somente depois, quando testes
críticos e experimentação entram em jogo, é que a ciência diverge da
arte.”

-- François Jacob, 1997

Offline Mr."A"

  • Nível 24
  • *
  • Mensagens: 1.005
  • Sexo: Masculino
Re: Corujão do Clube Cético
« Resposta #3043 Online: 15 de Novembro de 2008, 23:52:07 »
22:51 no meu relógio. Já está em horário de corujão ou só a partir de meia noite?
8-)

Offline uiliníli

  • Nível Máximo
  • *
  • Mensagens: 18.107
  • Sexo: Masculino
Re: Corujão do Clube Cético
« Resposta #3044 Online: 15 de Novembro de 2008, 23:55:21 »
22:51 no meu relógio. Já está em horário de corujão ou só a partir de meia noite?

O Elton e o Catino estavam postando ao meio-dia, então 22:51 está valendo... Sem contar que com o horário de verão, em boa parte do Brasil já é 23:55. Em que estado você mora?

Offline Mr."A"

  • Nível 24
  • *
  • Mensagens: 1.005
  • Sexo: Masculino
Re: Corujão do Clube Cético
« Resposta #3045 Online: 16 de Novembro de 2008, 00:09:19 »
Já chegou o horário de verão?  :o Moro em Salvador e não ligo a televisão para outra coisa além de DVD. Como o tempo passa rápido: sinto como se o último horário de verão tivesse terminado ontem.
8-)

Offline SnowRaptor

  • Nível Máximo
  • *
  • Mensagens: 17.962
  • Sexo: Masculino
Re: Corujão do Clube Cético
« Resposta #3046 Online: 16 de Novembro de 2008, 00:10:52 »
Horário de verão agora oficialmente começa no terceiro domingo de outubro e acaba no terceiro domingo de fevereiro, exceto se for domingo de carnaval, aí acaba no domingo seguinte.
« Última modificação: 16 de Novembro de 2008, 00:13:41 por SnowRaptor »
Elton Carvalho

Antes de me apresentar sua teoria científica revolucionária, clique AQUI

“Na fase inicial do processo [...] o cientista trabalha através da
imaginação, assim como o artista. Somente depois, quando testes
críticos e experimentação entram em jogo, é que a ciência diverge da
arte.”

-- François Jacob, 1997

Offline Mr."A"

  • Nível 24
  • *
  • Mensagens: 1.005
  • Sexo: Masculino
Re: Corujão do Clube Cético
« Resposta #3047 Online: 16 de Novembro de 2008, 00:22:16 »
Obrigado pela informação, Snow. Se, um dia, eu for trabalhar no Banco do Brasil, lembrarei de você.  :P
8-)

Offline SnowRaptor

  • Nível Máximo
  • *
  • Mensagens: 17.962
  • Sexo: Masculino
Re: Corujão do Clube Cético
« Resposta #3048 Online: 16 de Novembro de 2008, 00:23:57 »
Hein?
Elton Carvalho

Antes de me apresentar sua teoria científica revolucionária, clique AQUI

“Na fase inicial do processo [...] o cientista trabalha através da
imaginação, assim como o artista. Somente depois, quando testes
críticos e experimentação entram em jogo, é que a ciência diverge da
arte.”

-- François Jacob, 1997

Offline Mr."A"

  • Nível 24
  • *
  • Mensagens: 1.005
  • Sexo: Masculino
Re: Corujão do Clube Cético
« Resposta #3049 Online: 16 de Novembro de 2008, 00:25:29 »
É que os bancos costumam aderir ao horário de verão em todos os estados, inclusive os estados que não aderem.
8-)

 

Do NOT follow this link or you will be banned from the site!