gcc로 컴파일해서 열심히 프로그램을 돌리다보면 Segmentation Fault가 나는 경우가 있다. 
보통 배열에 접근할 때나 포인터를 넘길 때 잘못하면 이런 문제가 생기는데 보통 for문 등 루프에서 배열에 접근할 때의 조건을 잘 보면 해결된다. 그런데도... Segmentation Fault가 해결이 안된다면 Valgrind를 사용해보자.

우분투의 경우 apt-get install valgrind 를 이용해 설치하면 되며 이외에는 valgrind.org에서 다운로드 받아 설치하면 될 것 같다..
(우분투만 써봐서요...ㅎㅎ)

설치 후 컴파일에서 옵션을 주어야 하는데 -g를 꼭 넣어줘야 한다.

Valgrind의 옵션은 꽤 다양해서 Valgrind --help를 입력해 옵션의 설명을 보는 것도 유용하다. 그래도... 귀찮다면

valgrind --leak-check=full --log-file=memcheck.txt -v --error-limit=no ./abc.out arg1 arg2
옵션은 버전마다 다를 수 있으므로 확인해서 맞는 옵션을 쓰자.

프로그램이 실행되면 로그가 memcheck.txt에 남게 되는데 이를 열어서 보면.... 꽤 많은 기록이 쏟아져 나온다.
우선 로그의 좌측 숫자는 프로그램의 PID이며 에러의 경우 == PID == 로 나타난다. -- PID --라면 이는 일반적인 정보이다.

다음의 블로그에서 정보를 얻었다.
http://adnoctum.tistory.com/555
 

전자기학 jackson 1.11 번 문제를 푸는데... 아니 왜 반지름이 3차원에서 2개가 나오는지 모르겠더군요. 혹시나 싶어서 구글링을 해보니 아주 빠르게 답을 얻었습니다. 울프람 아저씨는 설명만 있고 원하는 그림이 없어서....ㅠ

http://www.nature.com/nrm/journal/v7/n1/box/nrm1784_BX1.html

역시 이미지가 필요하면 재빨리 이미지검색으로 ㅋㅋㅋㅋㅋ

그러니까 임의의 곡면을 두 개의 반지름으로 표현하는데 이 반지름들을  Principle radii라고 한답니다..

대학원 고전역학 숙제를 하다가 답이 궁금해 구글신께 여쭈어봤습니다.

친절히 알려주시더군요. ㅎㅎㅎㅎㅎㅎㅎㅎ풀이는 없고 결과만 있으나 이마저도 감사할 따름 ㅋㅋㅋ

http://people.rit.edu/pnveme/pigf/Coords/coord_sph_def.html

'Study > Physics' 카테고리의 다른 글

leap-frog algorithm  (0) 2012.11.01
Euler method로 미분방정식 풀어보기  (0) 2012.11.01
Strogatz 2.5.6  (0) 2012.09.28
그리스인 vs 바빌로니아인  (0) 2010.01.17
도스에서 작업한 txt파일을 리눅스에서 불러와 작업하면 상당히 애로사항이 많게 됩니다. 

파일을 편집하다 보면 뒤에 ^M이 생기는 것도 볼 수 있구요... -.-
이외에도 윈도우에서는 UTF-8로 기본 저장하지 않기 때문에 가끔 문제를 일으키기도 합니다.

하지만 리눅스에선 간단히 파일의 인코딩과 속성을 바꿀 수 있어요.

우선 파일의 속성을 살펴보기 위해 다음과 같이 입력합니다.
file test.txt
만약 도스에서 편집된 파일이면 다음과 같이 나옵니다.

test.txt: ISO-8859 text, with CRLF line terminators

이제 파일을 변환해주기 위해 다음과 같이 명령어를 입력합니다. 
dos2unix test.txt
만약 dos2unix 가 설치되어 있지 않다면.... 
sudo apt-get install dos2unix 로 설치해주세요. ^^ 이제 file test.txt 를 다시 입력해 상태를 확입합니다.

test.txt: ISO-8859 text

이제 인코딩을 바꾸어줄 순서인데요. iconv 라는 명령어와 recode 라는 명령어 두개가 있습니다. recode의 경우 *.txt를 지원해서 참 편리하지만... 이상하게도 제가 가지고 있던 파일에선 UTF-8로 변환시 한글이 왕창 깨지더군요..ㅠㅠ 저는 iconv로 변환했을 때 한글이 깨지지 않았습니다. 

iconv -f EUC-KR -t UTF-8 test.txt > test.txt1

위와 같이 입력해주는데 처음에는 현재 인코딩을, 두번째에는 원하는 인코딩을 쓰시면 됩니다. *.txt를 지원하지 않기 때문에 배치파일을 만들어서 쓰시거나 노가다를 좀 해주시면 됩니다... (라고 무책임하게 말하기ㅡ.ㅡㅋㅋ)

다시 file 명령어를 이용해 속성을 확인해보면, 

test.txt: UTF-8 Unicode text

그리고 vi를 이용해 한글이 깨졌는지 확인해보면...! 깨지지 않았죠? (전 안깨졌어요...ㅋ)

많은 파일을 쉽게 변환하는 팁을 알려드리면... 결과파일의 파일이름을 쓸 때 확장자를 조금만 바꾸어주세요. 우분투의 경우 rename 이라는 명령어(별도로 설치하셔야합니다.)를 이용해 간단히 바꿀 수 있어요. 

참고로 recode로 인코딩을 바꾸는 방법은 아래와 같습니다.

 recode -f EUC-KR *.txt

자세한 옵션설명은 구글에서 검색해보세요. ^^

'Study > Computer' 카테고리의 다른 글

Linux에서 Memory 정보 확인하기  (0) 2012.07.31
Linux에서 Valgrind 사용하기  (0) 2011.08.11
MS-SQL to MySQL  (0) 2011.02.26
프랙탈 그림 그리기 (Z^3-1=0)  (0) 2010.04.19
윈도우에서 gcc를 쓸 수 있다?  (2) 2010.01.05
천문노트에서 작게 독서모임을 할 예정입니다. 지속적으로요. 그래서 독서모임 때 해야 할 이야기나 토론의 형식들을 간단히 정리해보고 있습니다.. 그러므로 언제 어디가 바뀔지 모른다는 거죠~?ㅋㅋ 아무튼 아이디어가 있으시면 코멘트 부탁드립니다.



1. 사회자(혹은 발제자)가 자신이 책을 고른 이유에 대해서 간단히 설명함.
 - 책에 대한 간단한 소개, 저자의 정보, 책을 고른 이유 등 책에 대한 전반적인 정보를 이야기해줌.

2. 책의 큰 주제별로 나누어 돌아가면서 줄거리(혹은 주제)를 설명함.

3. 이후 자신이 책을 읽으면서 마음에 와닿은 이야기 혹은 관심이 있는 주제(논제)에 대한 구절을 소개함.
 - 왜 이런 구절 혹은 주제(논제)가 좋은지 서로 이야기를 해본다. 이런 과정을 통해 생각이 비슷함과 동시에 다름을 느끼고 나눌 수 있다.

4. 각자 생각한 토론 주제에 대해 이야기하고 그 중 토론할 주제 몇 개를 선정
 - 천문노트에서 읽고 토론할 책은 민감한 이슈를 다루고 있지 않다. 따라서 토론이 한 쪽으로 쏠리거나 말꼬리잡기 등으로 길어지고 집중도가 떨어지는 일은 별로 없을 것 같다. 문학적, 기술적, 사회적 혹은 개인적 토론의 주제.... 토론이라는 말이 좀 딱딱한가? 수다를 떨 주제를 모두 모은 뒤에 되도록 많은 부분에 대해 이야기를 나누어본다.

예를 들면 칼 세이건의 <에필로그>라는 책을 읽고 난 뒤에 지구온난화에 대한 우리의 자세에 대한 이야기를 할 수도 있고, 우주의 경이로움에 대해 이야기를 나눌 수도 있다. 혹은 칼 세이건의 멋진 인생에 대해 이야기하자고 할 수도 있겠다. 우리는 지구온난화의 전문가도 아니고 모두가 천문학을 전공했을리도 없다. 그러므로 학술적 혹은 기술적으로 어려운 이야기를 하기 보다는 평범한 사람들의 생각과 말로 우리의 주제를 통해 과학이나 사회의 큰 그림을 그리고 방향을 찾아가면서 경이로움과 아름다움을 느끼는 것을 목표로 한다.

사실 전문가들끼리 모여서 독서토론하면 그게 독서토론인가. 연구실 스터디 혹은 Journal club이겠지.

아. 그리고 다양한 주제와 목적으로 토론하는 경우가 많을테니 정보가 부족할 수도 있다. 노트북으로 사회자는 필요할 경우 검색신공을 쓰는 것도 생각중이다.. 위키피디아와 구글링이면 사실 어지간한 정보를 찾을 수 있다. (물론... 영어를 잘해야 하는 부담은 여전하다. 대부분 양질의 검색결과들이 영문이므로..ㅠ)

5. 서로 토론한 내용이 어떤 결론으로 귀결되면 토론을 정리한다.
 - 이 과정에서 사람들이 어떤 이야기에 공감하고 동의했는지, 어떤 이야기의 충돌이 있었고 해결이 되었는지 등을 모두가 의논하여 정리하도록 한다. 이유는 서로 어떻게 이야기를 나누었고 다른 생각들은 무엇이었는지 되돌아보기 위해서이다. 물론 결과물을 만들어야 하는 리더의 부담도 있지만 말이다.

6. 다음에 읽을 책을 정한다.
 - 보통 우리의 목적과 처음에 모임을 운영하려는 방향이 있기 때문에 사람들이 제안하는 모든 책을 다 받아들이지 못하는 경우도 있다. 혹은 훌륭한 천문학 교양도서가 딱히 떠오르지 않아 다들 제안하기 어려운 경우도 있을 것이다. 사회자가 매번 다음에 읽을 책을 두어권 정도 정해서 온 뒤에 사람들과 간단한 대화로 책을 결정한다.

7. 뒷풀이
 - 독서모임을 열심히 나오는 회원이 있다거나 책을 깊이있게 읽어서 토론에 많은 기여를 하고 사람들과 생각을 나누었다거나 등등... 으로 해서 커피값 정도를 천문노트에서 대신 내주는 것으로 매번 시상을 하는것도...?
뒷풀이는 간단히 저녁밥을 먹으면 좋겠다. 다들 이야기하느라 고생했을테니...


서평은 각자 언제 써보는게 좋을까??

도움이 될만한 링크들
1. [딜레탕트] 독서·문학, 지적 즐거움에 중독되다. 여기

이 글은 IEEE TRANSACTIONS ON NEURAL NETWORKS. VOL. 14, NO. 6, NOVEMBER 2003의 논문인 Simple Model of Spiking Neurons 를 설명한 것입니다.

논문의 저자는 Eugene M. Izhikevich입니다.

 이 논문은 허드킨-헉슬리 모델을 비롯한 여러 neuron spiking model들과 마찬가지로 neuron의 spiking 패턴을 미분방정식으로 만들어 모델링한 내용을 담고 있습니다. 그러나 내용이 짧아 왜 그렇게 되는지는 모르겠습니다. 물론 Izhikevich가 만든 모델을 이용해 다른 여러 현상들을 보는게 저의 목적이기 때문에 깊이 이해하고 있지는 않습니다. 그러나 간단히 그가 만든 모델이 어떤 것이고 무엇을 설명할 수 있는지 정리할 필요가 있습니다.

1. The Model

이 논문에 소개된 모델은 다른 여러 모델들보다 훨씬 간결하고 계산이 쉽습니다. Hodgkin-Huxley Model의 경우 연립 미분방정식이 4개로 이루어져 있습니다만 이 모델은 2개의 연립 미분방정식으로 뉴런의 발화(firing)패턴을 거의 비슷하게 만들 수 있습니다. 

v' = 0.04v^2 + 5v + 140 - u + I                 (1)

u' = a(bv - u)                                               (2)

그리고 부가적으로 뉴런이 발화한 후에 변수를 바꾸어 줍니다. 

if v \geq 30 mV, then \left\{\begin{matrix} v\leftarrow c\\ u \leftarrow u + d \end{matrix}\right.

여기서 v와 u는 차원이 없는 변수들이며 a, b, c, d는 차원이 없는 parameter 입니다. 

v와 u에 미분형태는 시간에 대한 미분(d/dt)입니다. v는 막전위(membrane potential)을 의미하며 u는 막회복변수(membrane recovery variable)을 의미합니다. 논문에서는 변수 u는 칼륨 이온의 화성화와 나트륨 이온의 비활성화에 대해 설명하고 있으며 u는 v를 억제하는 피드백을 준다고 하는군요. 

(1)의 I는 시냅스에서의 전류나 뉴런에 주어진 직류 전류를 의미합니다.

 

이렇게 변수들의 설명은 끝났고 이제 parameter에 대해서 정리를 해보도록 하죠.

a는 u에 대한 time scale을 의미한다고 합니다. 작은 값일 수록 u가 회복되는 시간이 오래 걸리는 것 같죠? (2)식에서 보면 u'과 u는 a만큼의 관계가 있으니 말입니다. 

실제로 뉴런의 모델링에선 0.02로 둡니다.

b는 논문에서 u가 얼마나 민감한지를 막전위 v의 subthreshold fluctuation으로 설명하는 parameter라고 합니다. b값이 커질수록 u와 v의 관계가 커지며 이 결과로 subthreshold 진동과 low-threshold spiking dynamics가 가능하다고 합니다. 보통 뉴런의 경우 0.2 로 둡니다.

c는 막전위인 v가 발화(firing, spiking)후 되돌아가는 초기값을 의미합니다. c는 -65로 둡니다. 이해를 돕기 위해 단위를 mV로 생각할 수 있습니다.

d는 회복변위인 u가 발화 후 되돌아가는 초기값을 의미합니다. 보통 2로 둡니다. 

 

2. Different Types of Neurons

  이제 두 개의 연립미분방정식으로 만들어진 Izhikevich의 모델을 이용해 여러 뉴런들을 계산해보기로 합니다. 우선 뉴런의 종류부터 알아야 하는데요. 뉴런은 크게 흥분성(Excitatory Cortical Cell)과 억제성(Inhibitory Cortical Cell)로 나누어 집니다. 흥분성 뉴런의 경우 자신이 받은 전류들을 모아 자신과 연결된 뉴런들에게 전달해주는 역할을 합니다. 그러나 억제성 뉴런의 경우에는 자신이 받은 전류들을 자신과 연결된 뉴런들에게 전달해주지 않습니다.

 이제 이 두가지 뉴런의 spiking type을 Izhikevich모델을 통해 구현해보겠습니다.

 

1. 흥분성 뉴런(Excitatory neurons)

 ① RS(regular spiking) Neurons

 RS 뉴런은 대뇌피질(cortex)에서 가장 많이 발견되는 전형적인 뉴런입니다. 파라미터는 다음과 같습니다.

a = 0.02,   b = 0.2,  c = -65,   d = 8

이를 C언어를 이용해 미분방정식을 풀어보면 다음과 같은 결과를 얻습니다.

neuron01.gif

x축은 시간축으로 단위는 ms 이며 y축은 전압(mV)을 의미합니다. 미분방정식을 푼 method는 뒤에 소개하도록 하겠습니다.

 

② CH(chttering) Neurons

CH 뉴런은 spike가 일어나는 부근에서 아주 가까운 시간에 burst가 일어나는 패턴을 나타냅니다. 각 burst들 사이의 frequency는 40Hz정도 된다고 합니다.

파라미터는 다음과 같습니다.

a = 0.02,   b = 0.2,   c = -50,   d = 2

마찬가지로 C언어를 이용해 미분방정식을 풀어보면 실제와 비슷한 결과를 얻습니다.

CH-total.jpg

 

2. 억제성 뉴런(Inhibitory Neurons)

 

①FS(Fast Spiking) Neurons

FS 뉴런은 RS와 달리 순응과정(adaptation, slowing down)과정이 없이 계속 빠르게 Spiking하는 뉴런입니다. 

파라미터는 다음과 같습니다.

a = 0.1,   b = 0.2,   c = -65,   d = 2

마찬가지로 미분방정식을 컴퓨터를 통해 풀어보면 다음과 같은 결과를 얻습니다.

FS-total.jpg

 

이외에도 논문에는 몇 가지 다른 흥분성, 억제성 뉴런이 소개되어 있으며 이외에도 thalamo-cortical neuron 도 소개되어 있습니다. 그러나 주어진 parameter를 이용해 계산을 해보니 실제와 비슷한 결과가 나오지 않았습니다... 이유를 모르겠네요... 아무튼 흥분성 뉴런과 억제성 뉴런의 대표인 RS와 FS가 잘 나온것으로도 충분히 좋은 모델이라고 생각됩니다.

다른 모델에 비해 빠르고 간단하기 때문에 많은 수의 뉴런을 시뮬레이션하기에 적합한 것 같습니다.

 

(출처 :: http://www.izhikevich.org/publications/spikes.htm  )

 

3. Pulse-Coupled Implementation


이제 1,000 개의 뉴런이 Fully Connected Network로 구성되어 있을 때의 상황에서 이 모델을 구현해보도록 하겠습니다. 뉴런은 1,000개이고 서로 모두 연결되어 있으므로 링크(시냅스)의 수는 1,000,000개입니다. 잘 생각해보면 자기 자신과 다시 연결되어 있는 상황도 포함되어 있음을 알 수 있습니다. 

Excitatory neuron은 RS Neuron으로, Inhibitory Neuron은 FS Neuron으로 가정합니다. 또한 Ex/In Neuron의 비율은 80:20으로 정합니다. 이 비율은 Thalamus 에서 Ex/In의 비율이 80:20 임에서 착안한 것 같습니다. 

각각의 RS, FS neuron의 parameter는 다음과 같이 정해집니다. 논문에 이렇게 시뮬레이션했다고 나오는군요..

 

흥분성 뉴런(RS, CH neuron) 억제성 뉴런 (FS Neuron)
a_{i} = 0.02 a_{i} = 0.02 + 0.08 \cross r_i
b_i = 0.2 b_i = 0.25 - 0.05 r_i
c_i = -65 + 15 r_i^2 c_i = -65
d_i = 8 - 6 r_i^2 d_i = 2

 

위의 표에서 r_i 는 0 \leq r_i \leq 1 사이의 uniformly random variable 입니다. 흥분성 뉴런의 경우 r_i 값이 0이면 RS Neuron, 1이면 CH Neuron입니다. 

이외에도 주목할만한 변수와 미분방정식을 푼 method를 소개해야 하는데요. 논문에서는 이 Fully Connected network 에서 각 Neuron들이 연결되어 있는 Weight를 다음과 같이 주었습니다. 위에서와 마찬가지로 random number를 이용해 만듭니다.

 

흥분성 뉴런(RS, CH neuron) 억제성 뉴런 (FS Neuron)

 0 \leq S_i \leq 0.5 uniformly random variable

 -1.0 \leq S_i \leq 0   uniformly random variable

 이외에도 각 뉴런에 주어지는 전류 역시 다음과 같이 주어집니다. 전류는 지금까지의 parameter와 달리 Gaussian Random Distribution을 이용합니다. Uniform하지 않죠.

흥분성 뉴런(RS, CH neuron) 억제성 뉴런 (FS Neuron)

 \begin{math} \left 0 \leq I_i \leq 5, \end{math} Gaussian Distribution

I는 -5 에서 5 사이의 범위를 가지며 
평균은 0, 표준편차는 1 입니다.

\begin{math} \left 0 \leq I_i \leq 2, \end{math} Gaussian Distribution

I는 -2에서 2 사이의 범위를 가지며
평균은 0, 표준편차는 1 입니다.

 또 미분방정식을 푸는 해법이 좀 독특합니다. Euler method를 이용해 미분방정식을 푸는데요. 이상하게도 v에 대해선 dt를 줄여 2번 게산합니다. u에 대해서도 dt를 줄여서 계산하거나 Euler Method 대신 Runge-Kutta 2nd Methdod를 쓰면 원래 패턴이 잘 재현되지 않네요. 이에 대한 논문도 교수님께서 보여주신 적이 있었습니다. 그러나 이 방법대로 하면 여러 패턴들이 잘 나오니 상당히 유용하다는 것은 분명합니다.

  1. v=v+0.5*(0.04*v.^2+5*v+140-u+I); % step 0.5 ms v=v+0.5*(0.04*v.^2+5*v+140-u+I); % for numerical u=u+a.*(b.*v-u); % stability

위의 코드는 http://www.izhikevich.org/publications/net.m 에서 보실 수 있으며 MATLAB으로 만들어졌습니다. C로 코딩하면서 이와 같은 방법으로 미분방정식을 풀었으며 논문과 비슷한 결과를 얻을 수 있었습니다.


neuron_paper_1.jpg

 

위의 그림은 제가 C언어로 다시 만들어서 얻은 결과이고, 아래 그림은 논문에 있는 결과입니다.  모두 raster plot 이며 세로축은 각 뉴런의 number, 가로축은 시간축을 나타냅니다. 발화(firing)할 때마다 점을 찍으면 위의 그림처럼 나타나게 되지요. 논문의 저자는 이 raster plot 에서 처음 보이는 진한 라인이 알파파(10Hz)이고 뒤에 감마파(40Hz)가 만들어지는 것을 볼 수 있다면서 포유류의 뇌파도 이 모델을 통해 만들 수 있다고 이야기를 합니다. 

 

자세한 내용은 그의 홈페이지(http://www.izhikevich.org )에서 확인하실 수 있습니다.

 

 

이 글은 스프링노트에서 작성되었습니다.



표랑 일부 서식이 깨져서 나오네요.. 스프링노트에서 더 깔끔하게 보실 수 있습니다.

'Study > research' 카테고리의 다른 글

스크랩-한겨레 선거 분석  (0) 2014.07.17
연구실에서 여러 일을 해보다가 배운 쉽고 놀라운 Gnuplot의 스킬들을 노트해봅니다.

우선 multiaxis 사용하기입니다. 이를 이용하면 한 화면에 그래프를 2개 그리고 축도 2개로 같이 그릴 수 있습니다.
방법은 매우 간단하며 두 개의 데이터를 나란히 비교해볼 때 아주 좋습니다.

간단히! ㅋㅋ

아래 코드에서 주의할 점은 nomirror 설정을 안할 경우 두 번째 y축의 눈금이 거울에 반사된 것 처럼 보인다는 것이 있구요.
꼭 plot 할 때 축을 정해주어야 한다는 점입니다. 축을 정해주지 않으면 x1y1으로 그려지니까 모든게 허당~

x1은 아래 방향의 x축을, x2는 윗 방향의 x축을 의미하고
y1은 왼쪽의 y축을, y2는 오른쪽의 y축을 의미합니다.


gnuplot> set y2tics
gnuplot> set tics nomirror
gnuplot> p './a.dat' u 1:2 w lp, './b.dat' u 1:3 axes x1y2 w lp


글쓰다가 알게된 사실...
axis 는 축을 말하는데요. 복수형이 axes이더군요... http://gnuplot.sourceforge.net/ 에서는 multiaxis라고 쓰니 저도 따라서 axis로 고쳤습니다.
전산물리 숙제로 프랙탈을 그렸습니다. 음...ㅋㅋ 방법은 다음과 같습니다.

복소평면에서 Newton's Method를 이용해 Z^3-1=0의 해를 찾는 건데요. 임의의 점(x,y)에서 뉴턴 메서드를 사용해 해를 찾을 때 세가지 해 중 한가지 해를 찾게 됩니다. 물론 복소평면에서 말이지요. 세가지 해를 각각 R, G, B로 점을 정해놓고 복소평면의 구간의 점들에 대해 모두 해를 찾아줍니다.

그럼 프랙탈 모양이 나온다고 합니다. 물론 메스메티카나 매트랩으로 그리는 방법은 찾기가 쉬우니... 그리고 그리기도 쉽죠? ㅋㅋ(그러나 전 안그려봤음...)

전산물리 숙제이기에 C로 만들어 보았습니다.

코딩하기 전에 복소평면을 실평면에서 그릴 수 있게 허수부와 실수부를 나누는 작업도 해야 합니다. 아래에 뉴턴 메서드에 맞게 계산한 결과가 있습니다.

이제 코딩을 열라 하면 됩니다. 제가 고치고 고쳐서 만든 프로그램은 다음과 같습니다.

./fractal.out x1 y1 x2 y2

이렇게 순서대로 인수를 입력합니다. 그럼 (x1, y1)에서부터 (x2, y2)까지의 범위에서 적절한 해상도로 점을 찍어가며 계산합니다. 이렇게 입력하고 난 뒤에는 di, 즉 해상도가 나옵니다. 

그리고 데이터파일 3개에 각각의 근에 해당하는 좌표들을 저장합니다.

여기서 문제가 생기는데.... 허수부가 0이고 실수가 1인 해의 처리입니다. 해를 코드에서 판별할 때 허수부가 0인지 0보다 큰지 또는 작은지로 판단하는데 1의 근에서 허수부가 정확한 0이 아니라 0.00000000001 이런 값을 가질 수도 있더군요.. 컴퓨터로 계산하다보니 그런 것 같습니다... 그래서 작은 범위를 주어 0 근처의 값을 가지면 무조건 0으로 분기시킵니다.

이외에는 코드를 차근차근 보면 이해하기 쉽습니다. 그림은 Gnuplot으로 그렸습니다.

코드를 보시려면 아래를 눌러주세요.


프로그램을 만들고 돌려서 점을 찍으면... 두둥!! (데이터 파일 용량이... 메가 단위네요.. 쩔ㅋㅋ)


규칙적으로 점을 찍어서 plot해보니 하얀 줄무늬가 나오더라구요.. 에이...ㅋㅋ
구글에서 찾아보니 이런 그림을 Basins of attraction이라고 하더군요. 이게 무엇인지는 나중에 공부하게 되면 올려야지....

수리물리에서 자주 등장하는 Symbol 중 가장 기초적인 것은 Kroneker-Delta(크로네커-델타)와 Levi-Civita Symbol(레비 시비타 심볼)이 있습니다.

우선 약속부터 보면,

 

(1) Kroneker-Delta

\delta_{ij} = \left\{ \begin{array}{ll} 0 & \ i \not= j\ 1 & \ i=j \ \end{array} \right.

크로네커 델타의 경우 인덱스의 두개가 같으면 1이고 다르면 0이 됩니다.

 

(2) Levi-Civita

\epsilon_{ijk} = \left\{ \begin{array}{ll} 1 & \textrm{permutation}\ -1 & \textrm{anti-permutation}\ 0 & \textrm{all other cases} \end{array} \right.

 

레비-시비타의 경우 permutation이라는 단어가 나옵니다. 순열이라는 뜻인데요. 이는 1,2,3 이 순서대로 나오는 것을 의미합니다.

따라서 123 혹은 231, 312를 의미합니다. 숫자의 순서가 바뀌지 않으면서 배열되어야 하지요.

이와 반대의 경우는 permutation이 아닌 경우(반대의 경우) 입니다. 즉 213, 213, 321 인 경우이지요.

\epsilon_{123}=-\epsilon_{132}

 

3개의 숫자를 세 번 써서 만들 수 있는 경우의 수 중에 이 6가지를 제외한 다른 방법은 모두 같은 숫자가 2개 이상 들어가게 됩니다.

따라서 이런 경우에는 값이 0이 됩니다.

 

이런 약속은 왜 쓰냐구요? 크로네커 델타의 경우는 다양하게 쓰입니다. 예를 들자면 직교성을 살펴볼 때 사용할 수 있습니다.

\hat x \cdot \hat y = \delta_{xy} = 0 \ \hat x \cdot \hat x = \delta_{xx} = 1

레비-시비타는 벡터의 외적(corss product)의 계산을 빠르게 하기 위해 쓰입니다. 외적은 다음과같이 계산될 수 있습니다.

C_{i}=\sum_{jk}^3 \epsilon_{ijk} A_{j} B_{k}

 

이 식을 천천히 뜯어보도록 하겠습니다. 우선 i=1 일 때는 x축 성분값을 구할 수 있습니다. 그럼 j와 k는 2, 3 또는 3,2 가 되겠지요. 숫자가 서로 2,2 또는 3,3일 경우 입실론은 0이 됩니다. 그럼 계산은 다음처럼 됩니다.

\epsilon_{123}A_{2}B_{3}+\epsilon_{132}A_{3}B_{2} \ \ 1\cdot A_{2}B_{3}+(-1)\cdot A_{3}B_{2} \ A_{2}B_{3} - A_{3}B_{2}

마찬가지로 계산을 따라가면 다음과 같은 계산을 얻을 수 있습니다. 이는 외적의 계산과 똑같지요.

\hat x (A_{y}B_{z}-A_{z}B_{y}) + \hat y (A_{x}B_{z}-A_{z}B_{x}) + \hat z(A_{x}B_{y}-A_{y}B_{x})

이외에 응용으로는 다음과 같은 방법이 있으며 계산이 복잡한 문제를 푸는데 큰 도움을 줍니다.

 

\sum_{k} \epsilon_{ijk}\epsilon_{lmk}=(\delta_{il}\delta_{jm}-\delta_{im}\delta_{jl})

 

이상입니다.

 

이 글은 스프링노트에서 작성되었습니다.

'Study > Mathematics' 카테고리의 다른 글

WolframAlpha에서 vector plot 그리기  (0) 2012.10.18

+ Recent posts