운동시뮬레이션 제10주 실습 Random systems
프로젝트는 Chap07로 한다 패키지는 motion.y2014 로 한다
RandomWalk Project 생성 (Chap07)
RandomWalk class 추가
RandomWalk 프로그램의 동작 주어진 수 만큼의 Walker에 대하여 각 각 주어진 수 만큼의 걸음 수만큼 0부 터 시작하여 걸음을 걷고 그 값을 기록 한다. 각 걸음 수에 대하여 각 Walker의 위치 값을 파일에 저장한다. 저장된 파일의 내용을 gnuplot 으로 그림을 그린다.
소스 설명 Random rnd : 난수 발생 기 double[ ][ ] r : 각 walker 에 대한 위치 값을 저장 할 변수 int steps : 걸음 수 int walkers : walker의 수 String filename : 결과를 저장할 파일 명
main 설명 Walker의 수 걸음 수를 받아들여 변수 를 초기화 한다. 각 Walker의 위치를 계산하여 변수에 저장한다 결과를 출력한다.
Initialize 설명 28번 줄 : 난수 발생기 생성 29~31번 줄 : 실행할 때 마다 다른 난수를 생성 하도록 seed를 현재 시간으로 설정한다. 이 때 seed는 짝수가 되어서는 안된다. 필요한 변수를 받아들여서 배열을 선언한다.
Calculation 설명 각 Walker에 대하여 원 점으로 부터 출발하여 주어진 걸음 수 만큼 걸어간 결과를 저장한 다. 이를 위하여 이중 for 문을 사용하였다.
Store 설명 각 걸음에 대하여 각 Walker의 위치 값 을 한 줄에 하나씩 저장한다. 저장한 내용은 다음 ppt 파일에 있는 것 과 같다.
자료 파일 예 줄번호 걸음 수 1번 Walker의 위치 4번 Walker의 위치
Store 설명 그림을 그리는 명령을 저장한 파일을 생성 한다. 이는 그림 그리는 편의를 위한 것이다. load “wlaker4.gnu” 라는 명령으로 그림을 그릴 수 있다.
walker4.gnu 파일 명령의 내용이 다음 줄로 계속 된다는 표시이다.
Random Walks
실행 예 gnuplot 명령 load “walker5.gnu”
RandomWalk2 RandomWalk에서 𝑥 2 의 평균을 구하여 확인 제곱의 평균을 계산하는 CalculateAverage() 함수 를 추가한다. Calculation에서 CalculateAvreage 함수를 호출한 다.
변수 추가 소스 수정 제곱의 평균을 저장 할 변수 r2를 추가한 다. Initialization 함수 에 서 r2 변수 배열 생성
CalculateAverage 함수 추가 각 걸음의 위치 값에 대한 Walker 수 만큼 제 곱하여 더한 후 Walker 의 수로 나누어 평균을 계산한다. Calculation 함수에서 CalculateAverage 함수 를 호출한다.
Store 함수 평균 값을 저장한다. 그림 그리는 gnu 명령어 파일을 생성한 다.
실행 예 gnuplot 명령 load “walker2_500.gnu”
Diffusion1D 1차 미분 방정식인 Diffusion 방정식을 계산한다. 파동과 유사하게 시간에 따라 밀도 값 을 출력한다.
변수 현재 시간의 밀도를 저장할 변수 rho와 다음 시간에서의 값을 저장할 변수 rho1 X grid의 크기 N 출력 주기 nPrint 적분 시간 time 물리 상수값 D, dt, dx 저장할 파일명 filename
Initialize 함수 필요한 변수 값을 입력 받고 배열을 선 언한 후 현재 밀도 값을 초기화 한다.
Evolution 함수 현재의 밀도 값으로부터 다음 시간의 밀도 값을 계산한다. 현재 밀도 값을 갱신한다.
Calculation 함수 반복하여 다음 시간에서의 값을 계산 한다. 출력 주기가 되면 파일에 저장한다.
Store 함수 출력 주기에 해당하는 파일명을 만들 어 현재의 밀도를 저장한다.
실행 예 gnuplot 명령 plot “Diff1D_0001.0_0001.0_00100.dat” using 1:2 with lines
실습 내용 위 예제를 확인하고 이해한다.