2010년 6월 26일 토요일

LaTeX 수식을 그림으로 만드는 방법

본격적으로 LaTeX을 사용하고 싶으면 한글 Tex 사용자 그룹에서 제공하는 TnXTeX을 사용하면 된다. 아래는 간단한 설치방법과 사용법이다.

[TnXTeX]
- TnXTeX 페이지에 들어가서 "Current Version -> 파일묶음"에서 최근 파일을 내려받는다.
- 내려받은 것은 압축파일이기 때문에 더블클릭하면 원하는 위치에 압축을 풀 수 있다.
- 압축을 푼 위치로 가서 'TnXTeX12.exe'을 실행해서 글꼴을 생성시킨다.
- 다시 압축 푼 위치로 가면 폴더를 찾아들어가서 "TnXTeXLive -> TeXworks -> TeXworks.exe"를 실행한다.
- 'TeXworks.exe'를 이용해서 LaTeX 파일을 열거나 새로 생성한 후 'Ctrl+T'를 눌러 '조판'하면 된다. 

중요한 것은 이 모든 것이 무료이다.

[PS: Postscript 보기]
- 먼저 [여기]로 들어가서 Ghostscript를 깔아아 한다.
- 그 다음에 [여기]를 내려받기 해서 GS view를 깔아서 쓰면 된다.

[인터넷용 LaTeX]
그냥 단순히 수식 그림이 필요하면 아래 사이트를 활용해 만들면 된다.


- 블로거에 설치하는 방법: [여기1] [여기2]
- tex2jax Preprocessor: [여기]
- 스크립트를 헤더에 넣을 때는 템플릿 -> HTML 편집을 누른후 '계속' 단추를 눌러 편집모드로 들어가면 된다.
- 위 방법에 따라 설치하면 본문과 댓글에도 수식을 쓸 수 있음
- 한줄 수식(inline math)은 \$...\$로 쓰고, 여러줄 수식(display math)은 \$\$...\$\$로 쓴다.

[사용법]
1. 묶음 괄호: overbrace or underbrace

$\frac{x^n}{n!} = \underbrace{ \int_0^x \cdots \int_0^x }_{n~\text{times}}~dx$

2. 행렬: matrix(괄호 없음), pmatrix('()'), bmatrix('[]'), vmatrix('| |'), Vmatrix('|| ||')

$\begin{bmatrix}
x_2 \\ y_2
\end{bmatrix}
=
\begin{bmatrix}
x_1 & -y_1 \\ y_1 & x_1
\end{bmatrix}
\begin{bmatrix}
x_w \\ y_w
\end{bmatrix}$

행렬 중간에 선을 넣는 방법

$\left[ \begin{array}{ccc|c}
a_{11} & a_{12} & a_{13} & b_1 \\
a_{21} & a_{22} & a_{23} & b_2 \\
a_{31} & a_{32} & a_{33} & b_3
\end{array} \right]$

3. 경우: cases

$X = \begin{cases}
1,\text{ when head}\\
0,\text{ when tail}
 \end{cases}$

[다음 읽을거리]
1. LaTeX 사용법: http://limemoon.tistory.com/57
2. Wikipedia에서 수식 사용법: http://en.wikipedia.org/wiki/Help:Formula

2010년 6월 14일 월요일

미분법(微分法, Differentiation)의 의미

[그림 1] 미분법은 기울기 구하기(출처: wikipedia.org)

고등학교 시절이면 어김없이 배우는 미분법(微分法, differentiation). 깊은 고민없이 수학 공식만 암기하면 미분법의 참맛을 느낄 수 없다. 미분을 하는 이유는 해당 곡선의 기울기(slope)를 알기 위해서이다. [그림 1]을 보면 기울기가 (+)이면 녹색이 되고 (-)이면 빨간색이 된다. 기울기가 0이면 검정색이 된다. 이런 특성은 미분법을 통해 쉽게 알 수 있다. 따라서, 미분법을 이해하려면 먼저 기울기부터 정의해야 한다. 기울기는 1차 함수인 $y$ = $ax + b$와 같이 변화율을 이용하여 식 (1)과 같이 정의한다.

                                  (1)

식 (1)에서 $x_1$이 $x_2$로 가까이 가면 식 (1)은 미분 혹은 미분값으로 정의할 수 있다.

                                   (2)

다만 심각하게 주의해야 할 용어가 있다. 미분소(微分素, differential)와 미분법이다. 미분소를 생각하기 전에 먼저 차분(差分, difference)을 생각하자. 차분은 두값을 뺀 차이를 뜻한다. 즉, $x_2$와 $x_1$ 사이의 간격을 의미하므로 식 (3)으로 정의한다.

                                    (3)

위의 차분에서 $x_1$이 $x_2$로 한없이 가까이 가는 경우를 미분소라 한다. 즉, 미분소는 차분의 극한(限, limit)으로 생각할 수 있다.

                                     (4)

차분의 극한 개념으로 위의 식 (2)를 보면 $x$와 $y$에 대한 미분소의 비율로써 미분값 $dy/dx$를 정의할 수 있다. 미분법은 이런 미분값을 얻기 위한 과정이다. 미분을 발명한 뉴턴Isaac Newton(1643–1727)은 미분 기호를 $\dot{y}$로 표기했다. 식 (2)와 같은 표현은 라이프니츠Gottfried Wilhelm Leibniz(1646–1716)가 제안했다. 미분의 또 다른 기호로 오일러Leonhard Euler(1707–1783)가 만든 $y'$도 쓰인다. 여러 번 미분하는 고계 미분 혹은 고차 미분(higher-order differentiation)은 $\ddot{y}, \dddot{y}, \cdots$, $d^2 y/dx^2, d^3 y/dx^3, d^4 y/dx^4, \cdots$, 혹은 $y'', y''', y'''', \cdots$처럼 쓴다.[고차 미분이란 용어도 쓰지만, 미분 방정식의 계층수(order)란 이름과 맞추기 위해 고계 미분을 선택] 혹은 $n$번 미분한 결과를 $y^{(n)}$으로 표시하기도 한다. 미분 연산으로 구한 함수는 도함수(導函數, derivative)라고 부르고, 주로 $f'(x)$, $f^{(1)}(x)$, $D f(x)$ 등으로 기호화한다. 여기서 $D$ 혹은 $D_x$는 $x$에 대한 미분 연산자(differential operator)이며 고계 미분은 $D^n$ 혹은 $D_x^n$이 된다.
식 (2)처럼 미분을 정의할 때, 수학적으로 민감한 혹은 애매한 부분이 있다. 한없이 가까이 간다는 극한은 수학적으로 어떻게 생각해야 하는가? 또한, 식 (4)의 값은 실상 0으로 수렴한다. 분모가 0이 되는 식 (2)의 값은 정말로 존재하는가? 한없이 가까이 감을 수학적으로 명확히 정의하기는 매우 어렵다. 코쉬Augustin-Louis Cauchy(1789–1857)가 극한을 정의하기 위해 사용한 $\epsilon$–$\delta$ 정의가 필수적이다. 론 $\epsilon$–$\delta$ 정의는 수학도에게 악명 높은 방법론이다. 하지만 다른 방법이 있는가? 명확성을 유지하면서도 더 직관적으로 극한을 정의할 수 있다면 빨리 수학 논문지에 논문을 쓰기 바란다. 쉽지 않은 일이니까! 미분값의 존재성은 평균값의 정리와 밀접히 연관되어 있다. 대부분의 고등학생들은 미적분에 대한 고등학교 수학 내용을 매우 힘들어 한다. 그 중에서도 제일 이해가 어려운 부분은 평균값의 정리이다. 학생들은 아마 이런 생각을 할 수도 있다. '내가 수학자가 될 것도 아닌데 도대체 이 개념을 왜 공부하지? 잘 모르겠다. 그냥 외우자.이런 생각이 머리속을 지배하는 순간, 미분은 매우 지겨운 수학 분야가 된다. 하지만 코쉬도 우리와 같은 평범한(?) 사람이다.[코쉬는 오일러에 이어 인류 역사상 2번째로 많은 논문을 쓴 대학자이다.] 천재라서 자고 있어났는데 $\epsilon$–$\delta$ 정의가 그냥 생각난다? 이런 상상은 그만하자. 코쉬가 수년을 고민해서 얻은 결과물이 부등식을 이용해서 극한을 정의하는 방식이기 때문이다. 다만 지금은 표준이 된 $\forall \epsilon$, $\exists \delta$, $|x - c| < \delta$ $\Rightarrow$ $|f(x) - L| < \epsilon$이라고 명확히 쓰지 못하고, 코쉬는 문장을 이용해 자신의 극한 개념을 다소 모호하게 설명했다. 이러한 이유로 미분의 역사는 뉴턴Isaac Newton(1643–1727)과 라이프니츠Gottfried Wilhelm Leibniz(1646–1716)가 시작했지만, 명확한 개념을 가지고 이 문제를 고민한 사람은 미분의 발명 후 150년 즈음 지나서 활동한 코쉬이다. 코쉬가 평생 이룬 업적을 고교 2학년생이 몇 시간 수업을 듣고 이해한다면 이 사건이 진정 기적이지 않을까? 수학이라는 학문은 겸손한 마음으로 접근해야 한다. 물론 모든 내용을 의심하면서 인내를 가지고 접근하자. 기울기를 구하기 위해 사용한 미분법은 어디에 유용하게 사용할 수 있나?

  • 첫째, 함수의 꼭대기값을 찾기 위해 사용할 수 있다.
[그림 1]에서 기울기가 증가하면 녹색이 되고 감소하면 빨간색이 된다. 이 개념을 함수값 관점으로 보자. 기울기가 녹색인 방향으로 가면 함수값이 증가하고 기울기가 빨간색인 방향으로 가면 함수값이 감소한다. 즉, [그림 1]에서 함수의 꼭대기값을 찾기 위해 기울기가 녹색인 방향으로 가면 잘 가고 있으니 계속 가면 되고, 기울기가 빨간색인 방향으로 가면 틀린 방향이므로 반대 방향으로 가야 꼭대기를 찾아갈 수 있다. 움직인 결과로서 기울기가 0[검정색]이 되면 꼭대기값에 왔으므로 정지하면 된다. 이런 방법으로 함수의 특정 근방에서 최대값을 찾는 방법이 뉴턴 최적화(最適化, Newton optimization)이다. 따라서, 함수를 미분하면 근방에 위치한 함수의 꼭대기값을 쉽게 찾아갈 수 있다. 이런 미분 개념과 벡터(vector)를 융합하면 함수의 최대값을 찾아가기 위한 방향을 미분 기반 벡터 연산(구배, 勾配, gradient)으로 결정할 수 있다.

  • 둘째, 일반적인 함수에 대한 1차 근사(一次近似, linear approximation)를 명확히 할 수 있다.
식 (1)과 (2)의 표현처럼 미분은 특정점 근방의 성질을 기울기 특성[$y$ = $ax + b$]으로 표현할 수 있기 때문에 함수 자체의 복잡한 특성을 보지 않고 선형으로 모형화해 함수의 일반적인 특성을 명확하게 기술할 수 있다. 또한, 함수가 가진 미분값의 상관 관계를 이용한 방정식이 미분 방정식(微分方程式, differential equation)이다. 대부분의 물리방정식은 미분 방정식을 이용하여 기술한다.


[알기 쉬운 미분법 소개]

극한의 성질과 식 (2)를 이용하면 미분의 규칙을 손쉽게 증명할 수 있다.

[선형 사상(線型寫像, linear mapping)]

                                     (5)

[증명]
식 (5)의 좌변을 식 (6)과 같이 차분한 후 $\Delta x \to 0$이 되게하면 식 (5)가 증명된다.

             (6)
______________________________

[곱셈의 미분: 라이프니츠 규칙(Leibniz rule)]

                                     (7)

[증명]

          (8)
______________________________

[나눗셈의 미분]

                                     (9)

[증명]

             (10)
______________________________

나눗셈의 미분은 식 (7)에 나온 곱셈의 미분과 $1/g(x)$의 미분을 이용해서 쉽게 수행할 수 있다. 함수 $g(x)$의 역수(multiplicative inverse or reciprocal)인 $1/g(x)$에 대한 미분은 통분 과정을 거쳐 $[1/g(x+\Delta x) - 1/g(x)] \mathbin{/} \Delta x$ = $[g(x) - g(x+\Delta x)] \mathbin{/} [\Delta x g(x) g(x+\Delta x)]$와 같이 쉽게 유도된다.

[합성 함수의 미분: 연쇄 법칙 혹은 규칙(chain rule)]

                                     (11)

[증명]

                                     (12)
______________________________

식 (11)의 증명에서 $f(x)$ = $C$인 상수 함수라면 다소 문제가 있다. 식 (12)의 분자[= $\Delta g[f(x)]$], 분모[= $\Delta f(x)$]가 모두 0이 되므로 식 (12)의 우변은 불능이 된다. 다만 $f(x)$ = $C$는 $x$값을 $C$로만 보내는 함수이므로 $g[f(x)]$ = $g(C)$가 된다. 이런 함수는 우리가 고려하는 합성 함수가 아니므로, $f(x)$ = $C$를 미분을 위한 합성 함수에서 제외하고 단순한 상수로 취급해서 미분값을 $0$으로 둔다. 

[역함수(逆函數, inverse function)의 미분]
함수 $y$ = $f(x)$의 역함수 $x$ = $f^{-1}(y)$를 미분할 때는 $dy/dx$의 역수를 이용한다.

                                     (13)

[증명]
식 (12)와 유사한 방식으로 차분해서 식 (13)을 증명한다.
______________________________

기본적인 미분 규칙을 이용하면, 다양한 함수의 미분 공식을 간단히 증명할 수 있다.


   1. 기본(basics)   

[초등 함수]

                  (1.1)

멱함수(冪函數, power)의 미분은 이항 정리를 이용한다.

                  (1.2)

지수 함수(exponential function)의 미분은 오일러의 수를 이용한다.

                  (1.3)
로그 함수(logarithmic function)의 미분은 오일러의 수를 이용한다.

                  (1.4)
삼각 함수(trigonometric function) 미분은 삼각 함수 합차 공식을 이용한다.

[우함수와 기함수]
함수 관계가 $f(-t)$ = $f(t)$를 만족해서 $y$축에 대해 대칭인 함수를 우함수(偶函數, even function) 혹은 짝함수라 한다. 비슷하게 원점 대칭 조건인 $f(-t)$ = $-f(t)$를 만족하는 함수를 기함수(奇函數, odd function) 혹은 홀함수라 정의한다. 일반적인 모든 함수는 다음처럼 우함수와 기함수의 합으로 분해된다.

                      (1.5)

우함수 $f_e(x)$의 미분은 기함수 특성을 가지고 기함수 $f_o(x)$의 미분은 우함수 성질이 있다.

[증명]
             (1.6)
______________________________

식 (1.5)에 나온 기함수의 정의에 따라 항상 $f_o(0)$ = $0$이며, 우함수의 미분은 $df_e(x)/dx |_{x=0}$ = $0$이 성립한다. 또한 우함수와 기함수의 성질은 테일러 급수(Taylor series)의 짝수와 홀수 차수 조건과도 연결된다.


   2. 고계 미분(higher-order differentiation)   

[1차 함수의 역수(multiplicative inverse or reciprocal)]

                 (2.1)

[2차 함수의 역수]

             (2.2)

여기서 ${}_n C_k$는 조합(combination)이다.

[증명]
복소수 영역에서 2차 함수의 역수를 부분 분수 분해(partial fraction decomposition)한다.

                 (2.3)

식 (2.3)의 결과에 식 (2.1)을 적용해서 정리한다.

                 (2.4)

마지막으로 식 (2.4)의 거듭제곱 식을 이항 정리(binomial theorem)로 전개해서 식 (2.2)를 얻는다.
______________________________

식 (2.2)는 로렌츠–코쉬 함수(Lorentz–Cauchy function) 혹은 룽에 함수(Runge function)라고 한다. 특이하게도 룽에 함수는 미분을 할수록 고계 미분이 발산한다. 고계 미분의 발산 성질은 보간법(interpolation method)의 맹점중 하나인 룽에 현상(Runge's Phenomenon)을 만든다.

[일반 라이프니츠 규칙(general Leibniz rule)]

                 (2.5)

[증명]
이항 정리(binomial theorem)에 나오는 $(f + g)^n$의 전개처럼 곱의 미분을 $n$번 적용한다.
______________________________

일반 라이프니츠 규칙의 증명에도 쓰이는 이항 정리는 정말 수학의 감초와 같다. 이항 정리를 재발견하고 첨단화시킨 파스칼Blaise Pascal(1623–1662)에게 경의를 표한다.

[다항식(polynomial)]

                 (2.6)

                 (2.7)

여기서 $n \ge 0$, $m \ge 0$, $m \le n$이다.

[증명]
식 (2.6)은 식 (1.1)을 $n$번 단순 미분해서 쉽게 구한다. 식 (2.7)은 유도가 매우 까다로워서, 보통 $(x^2 - a^2)$ = $(x-a)(x+a)$로 인수 분해해서 식 (2.5)를 적용한다.

             (2.8)
______________________________

버금 르장드르 함수(associated Legendre function)의 성질을 증명할 때에 식 (2.7)은 유용하게 쓰인다. 식 (2.6)에서 지수가 정수 $n$에서 실수 $\nu$로 바뀌면, 감마 함수(gamma function) $\Gamma (\nu)$를 도입해서 공식을 살짝 바꾼다.

                 (2.9)

더 나아가서 $\nu$를 복소수(complex number)로 취급해도 식 (2.9)는 잘 성립한다.


2010년 6월 2일 수요일

VS2008에서 CRichEditCtrl::GetSelText 버그

MBCS와 unicode를 같이 쓰게 되면 CRichEditView 혹은 CRichEditCtrl에서 문제가 발생할 수 있다. GetSelText 버그인 경우는 첨부링크를 참고하자.
첨부링크의 핵심적인 내용은
LPTSTR lpsz = strText.GetBufferSetLength((cr.cpMax - cr.cpMin + 1) * sizeof(TCHAR));
LPTSTR lpsz = strText.GetBufferSetLength((cr.cpMax - cr.cpMin + 1) * 2); 
로 바꾸는 것이다.