음...딥러닝쪽 게시글을 오래 전부터 안 올리고 있었는데, 사실 좀 귀찮았습니다(ㅋㅋㅋㅋㅋㅋ)

  뭐 정리는 해야할 거 같지만, 데이터만 쌓아두고 여러 모델 구축해서 돌리면서 재미있게 놀았죠. 최근에 Mathematica를 구매해서 내장 딥러닝 모듈을 통해 CIFAR-10을 학습하여 76%인가?(30분 학습했는데, 이정도면 대단한 거겠죠? ㅋㅋㅋ) 나오기도 했고, 방학 때는 소논문으로 날씨 예측을 주제로 삼아 새롭게 Keras를 공부하여 패턴 예측을 시도해보기도 하였습니다. 뭐, 나중에 간단하게 모델들 업로드하면서 글로 정리하기로 하고... 오늘은 제가 학수고대한 NCS가 어제 DHL로 도착해서 간단히 리뷰를 해보려고 합니다!


단촐하지만 위엄있는 USB 스틱!


  NCS(Neural Compute Stick)은 아마 인텔의 자회사?로 추정되는 Movidius에서 개발한 딥러닝 inference용(즉, 학습은 불가능합니다) 컴퓨팅 스틱으로 저전력으로 딥러닝을 할 수 있도록 만들어진 것입니다. 79달러이며 저는 Mouser에서 9만원 정도로 구매하였습니다. 다른 리셀러는 모르겠는데, Mouser는 60달러 이상 무료 배송이고 어차피 79달러에서 할인을 하진 않을테니 그냥 여기서 구매했습니다. 아마 여기가 가장 낫지 않을까 싶네요. 지금은 주문이 많이 밀려서 그런지 꽤 걸리는 거 같고, 제가 주문하고 오기까지 한 1달 정도(배송은 1주일도 안 걸렸을 거예요) 걸렸네요.

  Myriad 2를 기반으로 하며 성능은 대략 100Gflops 정도이며, 전력을 겨우 1W만 먹는다고 합니다(!) 그래서인지 Movidius에서 지금 RPI에서 돌아가도록 SDK 배포판을 만들어서 제공하고 있으며, Movidius에선 RPI3를 예시로 보여주지만 제가 가지고 있는 RPI B(1버전)에서도 잘 돌아가더라고요. 아쉽게도 현재 지원 중인 딥러닝 프레임워크는 Caffe 밖에 없습니다. 예제로 들어있는 AlexNet, GoogLeNet, Gender, SqueezeNet을 돌려보면 각각 283ms, 569ms, 237ms, 304ms 정도 걸립니다(Inference Time 기준). 이미지 크기가 크지만 않다면 대역폭 문제가 크게 작용하지 않아서 그런지, 제 컴퓨터에서 USB 3.0으로 할 때나, RPI에서 USB 2.0(정확히는 2.0보다 안 좋습니다. RPI는 젠더로 USB 대역폭을 제공해서...)으로 할 때나 걸리는 시간은 거의 같습니다. 생각보다 딜레이 시간이 커도 각 딜레이 시간에 맞게 카메라에서 frame을 받아서 inference하면 뭐 그래도 쓸만한 거 같네요(기본 제공 예제에 있습니다). 그리고 생각보다(?) 79달러라는 싼 가격 때문인지 많이 구매해서 쓸 수 있게(?) 여러 개의 USB 스틱을 사용할 수 있도록 지원하는 거 같네요.


  지금 고민 중인 RPI Zero W를 구매하게 된다면, 카메라도 같이 구매하고, Movidius랑 같이 엮어서 Multiple Object Detection을 해보려고 생각하고 있습니다. 잘만 응용하면 시각 장애인에게 음성으로 자신 앞에 어떤 물체가 있는지 알려줄 수 있기 때문에(실제품이 나온다고 들었긴 했는데, 한 번 제 손으로 만들어보고 싶네요 ㅎㅎ) 한 번 만들어볼 생각을 하고 있습니다. 크기도 작고, 전력도 작게 먹는데다가, 무려 RPI를 지원하기 때문에 응용할 곳은 무궁무진할 거 같네요. 나중에 TensorFlow랑 Keras만 지원되면 정말 좋을 거 같습니다 ㅎㅎ

  중3때 삼각비라는 부분에서 sin, cos, tan을 배웁니다. 특수각인 0°, 30°, 45°, 60°, 90°에서의 sin, cos, tan값을 배우죠. 고2에 오면 이과 과정 미적분 II에서 삼각함수 단원에서 좀 더 자세히 배웁니다. 60분법 대신에 호도법을 사용하며 정의역도 실수 전체로 확장하죠. 삼각함수 덧셈, 뺄셈정리를 통해 15°, 75° 등의 각을 삼각함수의 특수각 값을 이용하여 구하죠. 하지만 현실에서 각도는 특수각의 합, 차, 1/2만 존재하지 않습니다. 6°, 34.5° 등의 일반적인 각에서 우리는 삼각함수의 값을 구할 필요가 있을 때가 있죠. 그러나 우리가 배운 내용으로는 이러한 값을 구할 수 없습니다. 그러나 컴퓨터는 이러한 값들을 아주 손쉽게 계산해냅니다. 어떻게 계산해내는 걸까요?


  그 과정을 알아보기 위하여 C언어의 math.h에서 사용하는 삼각함수 라이브러리(glibc)를 뜯어보았습니다. C언어에서는 math.h를 include하여 sin, cos, tan 등의 삼각함수를 사용할 수 있습니다. 이 링크에서 아래 코드의 원본을 보실 수 있습니다.

/* k_sinf.c -- float version of k_sin.c
 * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
 */

/*
 * ====================================================
 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
 *
 * Developed at SunPro, a Sun Microsystems, Inc. business.
 * Permission to use, copy, modify, and distribute this
 * software is freely granted, provided that this notice 
 * is preserved.
 * ====================================================
 */

#if defined(LIBM_SCCS) && !defined(lint)
static char rcsid[] = "$NetBSD: k_sinf.c,v 1.4 1995/05/10 20:46:33 jtc Exp $";
#endif

#include <math.h>
#include <math_private.h>

static const float 
half =  5.0000000000e-01,/* 0x3f000000 */
S1  = -1.6666667163e-01, /* 0xbe2aaaab */
S2  =  8.3333337680e-03, /* 0x3c088889 */
S3  = -1.9841270114e-04, /* 0xb9500d01 */
S4  =  2.7557314297e-06, /* 0x3638ef1b */
S5  = -2.5050759689e-08, /* 0xb2d72f34 */
S6  =  1.5896910177e-10; /* 0x2f2ec9d3 */

float __kernel_sinf(float x, float y, int iy)
{
    float z,r,v;
    int32_t ix;
    GET_FLOAT_WORD(ix,x);
    ix &= 0x7fffffff;           /* high word of x */
    if(ix<0x32000000)           /* |x| < 2**-27 */
       {if((int)x==0) return x;}        /* generate inexact */
    z   =  x*x;
    v   =  z*x;
    r   =  S2+z*(S3+z*(S4+z*(S5+z*S6)));
    if(iy==0) return x+v*(S1+z*r);
    else      return x-((z*(half*y-v*r)-y)-v*S1);
}

  이 kernel_sin을 사용하여 실제의 sin함수를 구현하는 부분인 s_sinf.c 코드를 보면 $-{\pi \over 4} < x < {\pi \over 4}$ 에서는 간단히 iy = 0으로 정의되어 있을 것을 볼 수 있으니 iy = 0일 때 알고리즘을 살펴봅시다. 크기가 크지 않으니 z, v, r을 계산하여 x + v * (S1 + z * r)을 계산하여 넘기는 것으로 볼 수 있습니다. 이를 식으로 정리해보면 아래와 같습니다.

$$ \sin x = x + S1 x^3 + S2 x^5 + S3 x^7 + S4 x^9 + S5 x^{11} + S6 x^{13} $$


  이제 위에 하드코딩된 값을 대입하여 이 그래프를 그려보겠습니다. Legend에 나와있는 것처럼 f(x)가 위의 함수고, sin(x)는 Mathmatica 기본 내장 함수입니다.


사실상 일치해서 sin(x) 값이 다 덮어씌운 것만 보입니다. 이제 정의역을 f(x)에 정의된 것보다 좀 더 늘려볼까요?

정의역을 $-2\pi < x < 2\pi$ 까지 늘려봤습니다. 이제는 어느정도 차이가 두드러지게 나타나네요! 실제 sin 함수를 구현하는 s_sinf.c 코드를 보시면 $-{\pi \over 4} < x < {\pi \over 4}$ 이외에는 오류처리거나 reduction을 통해 표현하는 것을 볼 수 있습니다. 왜냐면 sin은 $0 \le x \le {\pi \over 4}$ 만 알면 정의역이 모든 실수일 때 정의할 수 있기 때문입니다.


  위와 같이 다항식으로 해석함수(고등학교 과정에서는 무한히 미분 가능한 함수 정도? 자세한 건 맨 아래에 있습니다)를 표현하는 것을 테일러 급수(Taylor series)라고 합니다. 이제 테일러 급수가 어떻게 미분 가능한 함수를 표현하는지 알아봅시다. 일단 미분 가능한 함수에 대한 n차 근사식을 $p_n(x)$ 라고 합시다. 그리고 우리는 한 점 $\left(x_0,\ f(x_0)\right)$ 과 그 점에 대한 미분계수( $f'(x)$ )가 주어졌을 때 그 점에서의 접선을 나타낼 수 있습니다 공식은 아래와 같죠.

$$ p_1(x) = f(x_0) + f'(x_0)(x - x_0)$$


이 공식에서 우리는 아래와 같은 성질을 찾을 수 있습니다.

$$ p_1(x_0) = f(x_0),\ p_1'(x_0) = f'(x_0) $$


따라서 이와 같은 성질을 이용하여 이번엔 2차 다항식에서 근사식을 만들어봅시다. 위의 성질을 사용하면 아래와 같은 조건을 만족하는 $p_2(x)$ 를 구해야겠죠.

$$ p_2(x_0) = f(x_0),\ p_2'(x_0) = f'(x_0),\ p_2''(x_0) = f''(x_0) $$


이에 대해 만족하는 식을 구하면 아래와 같습니다.

$$ p_2(x) = f(x_0) + f'(x_0)(x - x_0) + {f''(x_0) \over 2}(x - x_0)^2 $$


이와 같은 방식을 계속 반복하면 n차 미분한 식을 $f^n(x)$ 라고 했을 때 아래와 같은 n차 근사식을 구할 수 있습니다.

$$ p_n(x) = \sum^n_{k=0}{f^k(x - x_0)^k \over k!} $$


이때 아래와 같은 표현으로 $f(x)$ 를 나타내는데, 이 표현을 테일러 정리라고 하며 $R_n$ 을 나머지 항이라고 부릅니다.

$$ \begin{align*} f(x) &= p_n(x) + R_n \\&= f(x_0) + f'(x_0)(x - x_0) + {f''(x_0) \over 2}(x - x_0)^2 + \cdots + {f^{n + 1}(x_0) \over (n + 1)!}(x - x_0)^{n + 1} \end{align*} \\ R_n(x) = {f^{n + 1}(x_0) \over (n + 1)!}(x - x_0)^{n + 1}$$


나머지항은 일종의 테일러 정리의 식과 실제 $f(x)$ 의 식 간의 차이(오류)를 보여주므로, $R_n(x)$ 가 $n = \infty$ 일 때 0으로 수렴하면 테일러 정리의 식과 실제 식과 같아지므로 이때 우리는 위 무한급수를 테일러 급수라고 하며, 특별히 $x_0 = 0$ 인 경우에는 매클로린 급수라고 합니다.


이러한 방식으로 테일러 급수를 유도해낼 수 있는데, 수학적으로 엄밀하게 증명해보려면 미분법과 적분법을 사용하는 방법이 있습니다. 굳이 쓸 필요는 없어 보여서 이 링크를 참고하시기 바랍니다. 검색해도 잘 나와요.


자, 이제 대략적으로 테일러 급수에 대한 내용을 정리해보았습니다. 이제 그러면 적용을 해봅시다. 위에서 예시를 든 것처럼 $\sin x$ 에 대해서 테일러 급수를 써봅시다. 아래 그래프는 $\sin x$ 의 그래프(검정)와, $x_0 = 0$ 에서 테일러 급수의 1차(빨강), 3차(주황), 5차(노랑), 7차(초록), 9차(파랑), 11차(보라) 항까지 합한 것의 그래프입니다.

보이는 것처럼 합하는 항수가 커질수록 실제 $\sin x$ 에 다가가는 것을 볼 수 있습니다.


이제 다음으로 파데 근사(Padé approximant)에 대해 써보려고 합니다. 어떤 함수를 다항식으로 표현한 것이 테일러 급수라면, 어떤 함수를 유리식으로 표현한 것이 파데 근사입니다. 테일러 급수의 일반화이며 상위호환이라고 하는 거 같네요. 음이 아닌 정수 $m,\ n$에 대하여 파데 근사의 꼴은 아래와 같습니다. 이때 $n = 0$ 이 되면 매클로린 급수와 같게 됩니다.

$$ R(x)_{m/n} = {\sum_{j=0}^m{a_jx^j} \over 1 + \sum_{i=1}^n{b_kx^k}} $$


...파데 근사 계산을 한 번 해서 정리해보고 싶었는데 내용 이해가 잘 안 되는 관계로(쿨럭) 링크는 남겨둘테니 궁금하신 분들은 여기서 살펴보세요. 계산법을 제대로 이해하긴 힘들거 같고, 대신에 Mathematica에서 PadeApproximant를 함수로 제공하기 때문에 이것으로 $x_0=0$ 일 때 계산한 $\sin x$ 를 아래 표로 정리해보았습니다.

 m\n

1(빨강)

3(주황)

5(초록)

7(파랑)

 0(0)

$x$

$x-\frac{x^3}{6}$

 $x-\frac{x^3}{6}+\frac{x^5}{120}$

$x-\frac{x^3}{6}+\frac{x^5}{120}-\frac{x^7}{5040}$

 2(0.3)

 $\dfrac{x}{1 + \frac{x^2}{6}}$

 $\dfrac{x - \frac{7x^3}{60}}{1 + \frac{x^2}{20}}$

$\dfrac{x - \frac{x^3}{7} + \frac{11x^5}{2520}}{1 + \frac{x^2}{42}}$

 $\dfrac{x - \frac{11x^3}{72} + \frac{13x^5}{2160} - \frac{x^7}{12096}}{1 + \frac{x^2}{72}}$

 4(0.7)

  $\dfrac{x}{1 + \frac{x^2}{6} + \frac{7x^4}{360}}$

$\dfrac{x - \frac{31x^3}{294}}{1 + \frac{3x^2}{49}+\frac{11x^4}{5880}}$

 $\dfrac{x - \frac{53x^3}{396} + \frac{551x^5}{166320}}{1 + \frac{13x^2}{396} + \frac{5x^4}{11088}}$

 $\dfrac{x - \frac{241x^3}{1650} + \frac{601x^5}{118800} - \frac{121x^7}{2268000}}{1 + \frac{17x^2}{825} + \frac{19x^4}{118800}}$


그래프로 나타내면 아래와 같습니다. 조금 굵은 검정 선은 $\sin x$ 그래프이고, n 옆에 써 있는 색상에 m 옆에 써 있는 어두움을 가진 선이 그 (m, n)의 파데 근사 그래프입니다.

(무슨 그래픽 기교하는 줄)

이렇게 컴퓨터는 함수를 근사하여 계산합니다. 나중에 기회가 되면 파데 근사를 좀 더 조사해서 올려보도록 하겠습니다.


p.s 참고 자료: Introduction to Numerical Analysis - Alastair Wood, 위키백과-테일러 급수, 네이버 지식백과, 네이버캐스트, 위키백과-파데 근사, WolframMathWorld-Padé Approximant

  학교에서 본 미적분 영상에서 최단강하곡선 문제에 대한 이야기를 봐서 이번 글에선 이 내용을 다뤄보려고 합니다. 최단강하곡선은 2차원 상에 주어진 두 점을 잇는 곡선 중에서 두 점 중 높은 곳에 물체를 올려뒀을 때 가장 빨리 낮은 곳으로 내려가는 곡선입니다. 역사적으로 보면 1689년에 요한 베르누이가 유럽의 최고 수학자들에게 보냈다는 문제로 유명하죠. 사실 이 문제는 베르누이가 뉴턴을 시험해보려던 문제였는데, 뉴턴은 퇴근 후 몇 시간 끄적거려서 풀어내고 익명으로 풀이를 보냈죠. 이름 없는 풀이를 본 베르누이는 뉴턴인 것을 알아봤다고 합니다.



(이거 만드느라 2시간 쓴 건 함정) (검정: 선분, 파란색: 사이클로이드, 빨간색: 호)


  위 그림이 최단강하곡선 문제를 시각적으로 나타낸 것입니다. $(0, 1)$에서 $(1, 0)$까지 이은 여러 곡선(곡선의 정의에 따라 선분도 포함됩니다) 중에서 간단히 호, 선분, 그리고 이 글의 주인공인 사이클로이드를 그려봤습니다. 언핏 봤을 땐 직선으로 내려가는게 가장 빠르다고 생각할 수도 있습니다. 하지만 이 직관이라는 것은 생각보다 신뢰도가 떨어지고, 무엇보다 수학은 직관으로 시작할 수는 있어도 직관으로만 결과를 도출해내는 것은 대단히 위험하기 때문에 이제 과연 어떤 곡선이 최단강하곡선인지 유도해낼 것입니다.


  일단 이 최단강하곡선을 유도해내기 전에 이 문제를 통해 새롭게 탄생한 변분법이라는 것을 알아야합니다. 변분법이란 범함수(함수 집합을 정의역으로 하는 함수)의 최대 또는 최소를 구해내는 방법입니다. 이 변분법을 쓰는 예로는 여기서 소개하는 사이클로이드의 유도, 평면에 있는 두 점을 잇는 곡선 유도 등이 있습니다. 이제 저는 변분법에서 쓰이는 오일러-라그랑주 방정식을 통해 이 문제를 해결할 겁니다.




  먼저 중력의 방향을 위 이미지처럼 $+y$ 방향이라고 잡고 어떤 두 점 $A(0, 0),\ B(x_0, y_0)\ (x_0, y_0 > 0)$ (계산의 편의를 위해 간단히 잡았습니다)에서 물체를 놨을 때 최단시간으로 떨어지는 곡선을 구해야하기 때문에 결과값이 시간인 범함수를 만들어야 합니다. 이때 중학교 때부터 알고 있던 간단한 공식을 이용합니다.  $ t = {s \over v}$ 이죠. 이때 우리는 곡선을 다루기 때문에 범함수 $L$에 대해 아래와 같이 공식을 세울 수 있습니다.

$$ L = \int_0^{x_0} {ds \over v} $$


이때 이 곡선에서는 역학적 에너지가 보존되기 때문에 아래와 같이 $v$ 를 구할 수 있습니다.

$$ mgy = {1 \over 2}mv^2 \\[10pt] \therefore v = \sqrt{2gy} $$


$ds$ 는 고등학교 기하와 벡터 과정에서 구하는 곡선의 길이 공식을 통해 유도해낼 수 있습니다.

$$ ds = \sqrt{ \left(dx\right)^2 + \left(dy\right)^2 } = \sqrt{1 + x'^2 }\ dy $$


즉, 범함수 $L$은 아래와 같이 나타낼 수 있습니다.

$$ L = \int_0^{x_0} {\sqrt{1 + x'^2 \over 2gy}\ dy} = {1 \over \sqrt{2g}} \int_0^{x_0} {\sqrt{1 + x'^2 \over y}\ dy} $$


이제 오일러-라그랑주 방정식을 봅시다. 범함수 $J$에 대해서 다음과 같이 나옵니다. 이 방정식의 유도과정은 위키백과에 검색하면 잘 나오니 궁금하시면 검색하시면 됩니다.

$$ J = \int_a^b F(x, f(x), f'(x))\ dx,\ {\partial F \over \partial f} - {d \over dx} {\partial F \over \partial f'} = 0 $$


우리의 범함수 $L$에 대해 변형하면 아래와 같이 나옵니다.

$$ F(y, x, x') = \sqrt{1 + x'^2 \over y},\ {\partial F \over \partial x} - {d \over dy} {\partial F \over \partial x'} = 0 $$


이제 쭉 풀어봅시다.

$$ {\partial F \over \partial x} - {d \over dy} {\partial F \over \partial x'} = 0 \\[15pt] {d \over dy} {\partial F \over \partial x'} = 0 \left(\because {\partial F \over \partial x} = 0\right) \\[15pt] {d \over dy} \left( \sqrt{y \over 1 + x'^2} \cdot {x' \over y} \right) = 0 \\[15pt] \sqrt{y \over 1 + x'^2} \cdot {x' \over y} = C \\[15pt] x' = \pm\sqrt{C^2 y \over 1 - C^2 y} $$


$x'$ 꼴로 나왔으니 이제 적분을 해주면 됩니다. 하지만 루트 안에 $y$ 가 있기에 그냥 적분하기엔 불가능할 정도이므로 치환적분을 써줍니다. 중간에 나오는 $\sin^2 t$는 삼각함수 반각공식(삼각함수 덧셈정리 응용)을 통해 풀어줍니다.

$$ y = {1 \over C^2} \sin^2 t,\ dy = {2 \over C^2} \sin t \cos t\ dt\\[15pt] \begin{align*} x &= \pm \int \sqrt{C^2 y \over 1 - C^2 y}\ dy \\[15pt] &= \pm {2 \over C^2} \int \sin^2 t \ dt \\[15pt] &= \pm {1 \over C^2} \int 1 - \cos 2t \ dt \\[15pt] &= \pm {1 \over C^2}\left(t - {1 \over 2}\sin 2t\right) + C'\end{align*}$$


이때 위에 점 $A$ 를 대입해보면 $C' = 0$ 을 얻을 수 있으며 위에 $y$ 의 $\pm$ 은 양수이므로 사라집니다. 좀 더 깔끔하게 정리하기 위해서 $x$ , $y$ 를 정리해보면 아래와 같습니다.

$$ y = {1 \over C^2} \sin^2 t = {1 \over 2C^2} \left(1 - \cos 2t\right) \\[15pt] 2t\text{를 } \theta\text{로 변환시키면} \\[15pt] \begin{cases} \displaystyle x = {1 \over 2C^2} \left(\theta - \sin \theta\right) \\ \displaystyle y = {1 \over 2C^2} \left(1 - \cos \theta \right)\end{cases}$$


여기까지가 일반적으로 알려져있는 사이클로이드 곡선의 식이며 더 나아가 $A$ , $B$ 를 잇는 사이클로이드 곡선의 식을 유도해보겠습니다. 중력의 방향이 $+y$ 방향으로 정해져있기 때문에 $x$축 대칭을 하고 원래 좌표평면에 맞게 좌표를 바꾼 점 $B(a, b)$를 대입해서 정리하면 됩니다.

$$ \begin{cases} \displaystyle x = {1 \over 2C^2} \left(\theta - \sin \theta\right) \\ \displaystyle y = -{1 \over 2C^2} \left(1 - \cos \theta \right)\end{cases} \\[15pt] x\text{축 대칭한 점 } B(a, b) \text{를 대입하고 이때 성립하는 } \theta \text{를 } \theta_0 \text{라 두면} \\[15pt] \begin{cases} \displaystyle a = {1 \over 2C^2} \left(\theta_0 - \sin \theta_0\right) \\ \displaystyle b = -{1 \over 2C^2} \left(1 - \cos \theta _0 \right)\end{cases} \\[15pt] \text{이때의 } \theta_0\text{을 구하는 방정식은 두 식을 나눠서 정리하면 아래와 같다} \\[15pt] {\theta_0 - \sin \theta_0 \over 1 - \cos \theta_0} = -{a \over b} \quad \left(\text{단, }0 < \theta_0 < 2\pi \right) \\[15pt] \text{따라서 이를 정리하면} \\[15pt] \begin{cases} \displaystyle x = -{b \over 1 - \cos \theta_0} \left(\theta - \sin \theta\right) \\ \displaystyle y = {b \over 1 - \cos \theta_0} \left(1 - \cos \theta \right)\quad \left(\text{단, }0 \leq \theta \leq \theta_0 \right) \end{cases}$$


$\theta_0$  같은 경우엔 일반적 풀이방법이 없기 때문에 수치적으로 풀면 됩니다. 저 같은 경우엔 Mathematica 11의 FindRoot 기능을 통해 구한 후 맨 위 이미지를 그려냈습니다.


... 힘드네요 ㅠㅠ(장장 7시간 정도 걸쳐서 쓴....)


  아무튼 이렇게 사이클로이드 곡선이 유도가 됩니다. 당연히 구한대로 실제로 실험해봐도 사이클로이드 곡선에서 물체를 굴릴 때가 가장 빠르게 도착지점에 도착합니다.


참고 사이트

https://ko.wikipedia.org/wiki/%EB%B3%80%EB%B6%84%EB%B2%95

http://mathworld.wolfram.com/BrachistochroneProblem.html

http://zetablog.tistory.com/33

http://mathsci.kaist.ac.kr/~nipl/am621/lecturenotes/Euler-Lagrange_equation.pdf

'수학, 과학 > 수학 이모저모' 카테고리의 다른 글

최단강하곡선 문제(Brachistochrone Problem)  (0) 2017.06.18
피보나치 수열 일반항 유도  (0) 2017.06.04
회전변환  (0) 2017.06.03
MathJax 사용하기  (0) 2017.05.28

+ Recent posts

티스토리 툴바