편미분방정식의 해를 일정한 시간 간격별로 얻은 데이터로 만든 그래프는 animating gif를 이용하면 시간적으로 변하는 해를 보다 쉽게 표현할 수 있다. 각각의 시간 간격(여기서는 10 * time-step)에서 얻은 데이터 화일의 이름이 gp_0000.data, gp_0010.dat,...,go_2000.dat 처럼 되도록 만든다. 각 데이터 화일은 공간 그리드 위치와 그 지점에서 해의 값 (999개 행 x 2열이고, xrange 가 0:1000 이고, yrange는 -1:1 이다). 

그래픽화일에서  gif를 만드는 프로그램을 이용하려면 각 데이터 화일을 이용해서 일단 그래픽 화일을 만들고, 만들어진 그래픽화일을 모아서  gif를 만든다. gnuplot에서는 이 작업이 일괄작업으로 가능한데, 이를 위해서는 다음과 같이 두 개의 txt 파일을 editor로 만들면 된다.

gp_out.plt--화일;

#We will plot gif animation

reset

set term gif animate

set output "gpacket.gif"                #생성될  gif화일.

n = 2000    #n frames                #마지막 화일번호

set xrange [0:1000]

set yrange [-1:1]

i = 0                                        #시작화일 번호

load "gp_ann.plt"                      #각 데이터 화일을 그리는 명령을 담고 있음

set output


gp_ann.plt--화일

plot sprintf("gp_%04d.dat", i) u 1:2 w l    #데이터 화일의 이름이 gp_####.dat

i = i + 10                                            #화일의 번호가 10씩 증가함.

if (i < n) reread


gnuplot 에서 load gp_out.plt


또는, 하나의 화일로 만들면,

reset

set term gif animate

set output "gpacket.gif"

n = 2000 #n frames

set xrange [0:1000]

set yrange [-1:1]

do for [i = 0: n: 10] {

          plot sprintf("gp_%04d.dat", i) u 1:2 w l

}

set output


결과: potential well 내부에 갇힌 gaussian wavepacket의 time evolution (real part만)을 보여준다.




Posted by helloktk