Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
물리:재규격화_변환_renormalization_transformation [2022/01/16 11:00] – minwoo | 물리:재규격화_변환_renormalization_transformation [2023/09/05 15:46] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 4: | Line 4: | ||
하나는 coarse graining 과정, 다른 하나는 rescaling 이다. | 하나는 coarse graining 과정, 다른 하나는 rescaling 이다. | ||
- | coarse graining은 ' | + | coarse graining은 ' |
아래의 ' | 아래의 ' | ||
Line 12: | Line 12: | ||
아래의 그림 중 왼쪽은, 어느 특정 시점에서 10x10 스핀 배열의 원본이고, | 아래의 그림 중 왼쪽은, 어느 특정 시점에서 10x10 스핀 배열의 원본이고, | ||
오른쪽 그림은 그러한 왼쪽의 배열을 ' | 오른쪽 그림은 그러한 왼쪽의 배열을 ' | ||
- | {{:: | + | |
+ | {{:: | ||
+ | |||
+ | 블록 스핀이란, | ||
+ | |||
+ | 즉, 위의 경우는 아래의 방식으로, | ||
+ | |||
+ | |||
+ | {{:: | ||
+ | |||
+ | 그 2x2 정사각형 내의 왼쪽 아래에 위치한 스핀의 부호를 택하여, 나머지 3개의 스핀까지 같은 스핀으로 둔 방식이다. | ||
+ | |||
+ | 이러한 방식을 ' | ||
+ | |||
+ | 다른 변환 방식으로는 ' | ||
+ | |||
+ | 그래서 이러한 과정을 coasre graining이라고 부르는데, | ||
+ | |||
+ | $\\$ $\\$ 같은 방식으로 128x128개의 스핀 배열을 예로 들어, 아래의 그림들로 보다 명확히 살펴볼 수 있다. | ||
+ | |||
+ | (각각 ' | ||
+ | {{:: | ||
+ | $\\$ | ||
+ | {{:: | ||
+ | |||
+ | ($\beta=0.5$ 로 설정하였고, | ||
+ | |||
+ | 위에서 설명한 decimation의 방식을 택하여 시뮬레이션을 수행해 보기 위해, 아래의 C++ 코드를 이용할 수 있으며, | ||
+ | |||
+ | [[물리: | ||
+ | |||
+ | (spin : 스핀 배열 원본, deci : decimation을 적용시킨 블록 스핀 배열) | ||
+ | |||
+ | <code C++> | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | |||
+ | using namespace std; | ||
+ | |||
+ | int main() { | ||
+ | const int lsize=30; | ||
+ | const float beta = 0.5; | ||
+ | const float J = 1; | ||
+ | const int MC_steps=1000; | ||
+ | const int iter=lsize*lsize*5000; | ||
+ | |||
+ | int i; int j; | ||
+ | float del_E; float mp_probability; | ||
+ | float spin[lsize][lsize] = { 0 }; | ||
+ | float deci[lsize][lsize] = { 0 }; | ||
+ | random_device rd; | ||
+ | mt19937 gen(rd()); | ||
+ | bernoulli_distribution distrib(0.5); | ||
+ | uniform_int_distribution<> | ||
+ | uniform_real_distribution<> | ||
+ | |||
+ | for (int t=0; t< | ||
+ | if (t==0){ | ||
+ | for (int a=0; | ||
+ | for (int b=0; | ||
+ | if (distrib(gen)){ | ||
+ | spin[a][b]=1; | ||
+ | } | ||
+ | else { | ||
+ | spin[a][b]=-1; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | else { | ||
+ | i = distri(gen); | ||
+ | j = distri(gen); | ||
+ | |||
+ | if (i< | ||
+ | del_E=2*J*(spin[i][j]*(spin[i-1][j] + spin[i+1][j] + spin[i][j-1] + spin[i][j+1])); | ||
+ | } | ||
+ | else if (i==lsize-1 && j< | ||
+ | del_E=2*J*(spin[i][j]*(spin[i-1][j] + spin[0][j] + spin[i][j-1] + spin[i][j+1])); | ||
+ | } | ||
+ | |||
+ | else if (i< | ||
+ | del_E=2*J*(spin[i][j]*(spin[i-1][j] + spin[i+1][j] + spin[i][j-1] + spin[i][0])); | ||
+ | } | ||
+ | |||
+ | else if (i==lsize-1 && j==lsize-1){ | ||
+ | del_E=2*J*(spin[i][j]*(spin[i-1][j] + spin[0][j] + spin[i][j-1] + spin[i][0])); | ||
+ | } | ||
+ | |||
+ | if (exp(-beta*del_E) < 1){ | ||
+ | mp_probability = exp(-beta*del_E); | ||
+ | } | ||
+ | |||
+ | else if (exp(-beta*del_E) >= 1) { | ||
+ | mp_probability = 1; | ||
+ | } | ||
+ | |||
+ | if (dist(gen) < mp_probability){ | ||
+ | spin[i][j] = spin[i][j]*(-1); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | for (int a=0; | ||
+ | for (int b=0; | ||
+ | if ((a+1)%2==0 && (a+b)%2==1){ | ||
+ | deci[a][b] = spin[a][b]; | ||
+ | deci[a][b+1] = spin[a][b]; | ||
+ | deci[a-1][b+1] = spin[a][b]; | ||
+ | deci[a-1][b] = spin[a][b];// | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | } | ||
+ | return 0; | ||
+ | } | ||
+ | |||
+ | </ |