Davies-Bouldin Index(DBI)

공대생의 팁 2018. 12. 20. 00:29


 Davies-Bouldin Index(DBI)는 Group 내에서의 Distribution과 비교하여 다른 Group간의 분리 정도의 비율로 계산되는 값으로 모든 두 개의 Group 쌍에 대해 각 Group의 크기의 합을 각 Group의 중심 간 거리로 나눈 값으로서 표현되는 함수입니다.


 DBI는 계산이 빠르고 쉬우며 일관성 있는 값을 제시해주는 장점을 가지고 있어 K-means++ 알고리즘과 같이 특정 Group를 분류하는 것을 목적으로 하는 알고리즘의 성능을 정량적으로 비교하는 방식으로 주로 사용됩니다.


 해당 알고리즘을 사용하여 얻은 Group의 결과가 유효할수록 같은 Group 내의 Distribution은 작아져 Group의 크기는 작아지고, 서로 다른 Group간의 거리가 커지므로 DBI값이 작을수록 해당 알고리즘은 유효한 결과를 갖는다고 판단할 수 있겠습니다.


 다음으로 DBI의 수식에 대해 설명해보도록 하겠습니다.



 위 식은 Davies-Bouldin index의 정의입니다. 여기서 Ri는 다음과 같이 정의됩니다.



 즉, Rij의 최대값을 의미하며 i 와 j는 다른 값이어야 한다는 의미입니다. 여기서 Rij는 다음과 같이 정의됩니다


 여기서 Si는 i번째 scatter로 하나의 Group을 의미하며 M은 Si와 Sj의 distance를 나타냅니다. S는 다음과 같이 정의됩니다.

 


 이때 Ti는 cluster i의 벡터 갯수를 나타냅니다 쉽게 말해 하나의 Group에 속해있는 점들의 갯수를 말합니다. 그리고 Ai는 cluster i의 중심 좌표값을 의미합니다. q=1의 경우 Si는 유클리드 거리, q=2의 경우, 각 cluster의 중심에서의 각 샘플 사이의 거리를 표준편차로 나타낸 것이라 할 수 있겠습니다.



 다음으로 M값에 대해 알아보도록 하겠습니다. aki는 n차원 벡터인 ai의 k번째 요소입니다. 이 때 ai는 i번째 cluster의 중심값이라 할 수 있습니다. 즉 이 식안 i번째와 j번째 cluster의 중심 사이의 거리를 나타낸다 할 수 있겠습니다. p = 1일 때, city block 거리(맨하탄 거리)로 표현되며, p = 2일 때, 유클리드 거리로 나타내집니다.


 cluster인 C가 다음과 같은 조건을 만족한다고 가정해봅니다.



 이 때 S는 다음 조건을 만족합니다.


 

 다음으로 R은 다음 조건을 만족합니다.



 다음으로 간단한 예제를 통해 Davies-Bouldin Index에 대해 이해해보도록 합니다.

 



 다음과 같이 점 4개가 주어졌다고 가정하였을 때 점 (1,1)과 점 (1,3)을 중심으로 하였을 때, 각 Group의 중심은 (1,3)과 (3,3)으로 나타낼 수 있겠습니다.





 반면, 점(1,1)과 점(5,1)이 중심이 되었을 때 각 Group의 중심은 (1,2)와 (5,2)로 나타내어집니다.



 위에서 구한  두 가지의 경우들에 대해 각각 DBI값을 구해보겠습니다. p = q = 2라 가정하였을 때, 첫 번째의 경우에서 DBI는 2가 되며 두 번째의 경우에서 DBI는 0.5가 됩니다. 이 결과를 보았을 때 DBI의 값이 작은 두 번째의 경우가 cluster를 좀 더 자세히 구분했다고 말할 수 있겠습니다.




  






출저 : https://ieeexplore.ieee.org/abstract/document/4766909

300x250

cflags와 libs의 정보를 보는 방법 - pkg-config

공대생의 팁 2018. 12. 11. 00:14


 종종 gcc 혹은 g++를 사용하여 빌드를 할 때, 이러한 옵션을 사용하는 경우가 있습니다.


$ g++ -o result example.cc -Llibs


 위와 같이 자신의 환경에서 사용된 라이브러리를 사용하기 위해서는 위의 -Llibs를 알아야 할 필요가 있습니다. 이를 알아낼 수 있는 방법으로 pkg-config를 사용하는 방법이 있습니다.

 pkg-config를 사용하여 자신의 컴퓨터에 설치된 라이브러리들을 확인할 수 있습니다. 다음과 같은 명령어를 입력해주시면 되겠습니다.


$ pkg-config  --list-all


 다음으로 자신이 확인해보고자 하는 cflag와 lib를 확인해보도록 하겠습니다. Vision 라이브러리로 가장 많이 사용되는 OpenCV를 기준으로 설명해보도록 하겠습니다.


$ pkg-config opencv --cflags


>> -I/usr/include/opencv


$ pkg-config opencv --libs



위에서 나오는 출력결과를 이용하여 gcc 혹은 g++의 컴파일 옵션으로 위의 libs를 추가해주신다면 컴파일이 정상적으로 동작하는 것을 확인하실 수 있습니다.

300x250

[SLAM] Odometry의 정의

공대생의 팁 2018. 11. 23. 15:58


 Odometry란 단어 그대로 주행기록계라는 의미로서 엔코더를 통한 회전수와 IMU(관성 측정 장비)로 기울기 등을 측정함으로서 움직이고 있는 사물의 위치를 측정하는 방법을 의미합니다.


 Odometry는 ROS에서 odom frame으로 구현되며 위에서 설명한 엔코더 혹은 IMU를 사용하여 위치를 추정할 수 있습니다. 부득이하게 Visual SLAM을 사용하여 위의 센서를 사용하지 못할 경우 카메라를 통해 관측한 값을 토대로 Odom을 추정하는 방법을 사용할 수도 있습니다.




 Odom frame을 설계함에 있에 일반적으로 위와 같은 구조로 Frame을 설계합니다. map 은 여러 개의 odom을 가질 수 있으나 odom은 단 하나의 map을 가질 수 있습니다. 즉 1 개의 map 위에 다수의 로봇이 존재할 경우 odom은 로봇의 개수 만큼 존재한다고 할 수 있겠습니다.


earth

 earth frame은 여러 대의 로봇들이 서로 다른 map 위에서 존재할 수 있도록 해줍니다. 로봇들이 한 빌딩의 각 층에 위치하여 서로 다른 map을 가지고 있을 경우 earth frame은 모든 map frame을 통해 각 층의 정보를 가질 수 있게 해줍니다.


map

 map frame은 world fixed frame으로서 earth frame에 고정된 프레임이라 할 수 있습니다.  odom frame이 움직일 때 drift가 발생하여 로봇의 위치가 미세하게 바뀌는 경우가 발생합니다. map frame은 연속적이지 않기 때문에 시뮬레이션을 돌릴 때 마치 로봇이 갑자기 순간이동 한 듯 움직이는 경우를 볼 수 있습니다. 이러한 단점이 있지만 map frame은 장기간 global reference에는 매우 유용한 frame입니다.


odom

 odom frame은 world fixed frame으로서 또한 earth frame에 고정된 프레임이라 할 수 있습니다. 로봇의 위치가 drift로 인해 odom frame이 장기간 global reference에서는 사용에 있어 의미가 없을 수 있으나 odom frame은 로봇의 위치를 연속적으로 나타낼 수 있어 로봇이 갑자기 순간이동을 하는 듯한 모습을 보이지 않고 부드럽게 움직일 수 있도록 해줍니다.

 즉 odom frame은 단기간 local reference에서 로봇의 위치를 정확하게 파악하는데는 매우 유용한 frame이라 할 수 있겠습니다.


base_link

 base_link frame은 로봇 자체의 위치를 나타내는 frame이라 할 수 있습니다. base_link frame의 위치를 odom 혹은 map frame을 사용하여 위치를 추정하는 방법으로 로봇의 위치를 파악할 수 있습니다.

300x250

Stability-Plasticity dilemma(안정성-가소성 딜레마)

공대생의 팁 2018. 11. 22. 01:46


 인공지능의 방식 중 하나인 Neural Network에 대해 공부하다 보니 종종 자세히 알아보고자 하는 용어들이 나와 나올 때 마다 조금씩 정리를 해두고자 합니다.

 Neural Network에서 흔히 쓰는 용어들 중 하나인 Stability-Plasticity dilemma(안정성-가소성 딜레마)란 인공신경망이 기존에 학습된 내용을 유지하면서도 새로운 내용을 학습해야할 때 발생하는 딜레마라 할 수 있겠습니다. 먼저 아래의 그림을 통해 간단히 설명해 보도록 하겠습니다.



그림1. Strong version of the synaptic stability hypothesis

그림2. Weaker version of the synaptic stability hypothesis


 그림1과 그림2는 모두 Neural Network의 Stability(안정성)에 중점을 둔 것을 나타낸 것입니다. 그 중 첫 번째의 경우 왼쪽에서 오른쪽으로 시간이 지남에도 각 Node 사이의 Weight(가중치)가 변하지 않고 유지됨을 알 수 있습니다.

 반면 두 번째의 경우 몇몇 Node와 Weight가 약해졌다가 이후 다시 원상태로 돌아오는 모습을 보이고 있습니다. 이러한 Neural Network의 경향이 Stability라 할 수 있겠습니다.


그림3. Synaptic plasticity hypothesis


반면, Neural Network의 Plasticity(가소성)에 중점을 둔 경우 핵심 노드는 그대로 유지되고 있으나 학습이 진행되면서 기존의 Weight가 변하면서 각 Node와의 연결 weight가 변화하는 것을 볼 수 있습니다. 이 때 각 Node에 저장된 메모리는 유지되고 있으나 weight가 변화하면서 저장된 값에 변화가 생겨 기존의 값이 손상된 것을 볼 수 있습니다. 이러한 Neural Network의 경향이 Plasticity라 할 수 있겠습니다.


 이러한 Neural Network의 특징인 기억의 유지(stability)와 새로운 기억의 생성(Plasticity)은 Stability-Plasticity dilemma로 표현할 수 있겠습니다. 학습된 기억을 지속적으로 유지하는 것도 중요하지만 새로운 내용을 학습함에 있어서는 weight를 조정함으로서 약간의 변형이 불가피합니다. 즉, Stability와 Plasticity 어느 한 쪽으로만 비중이 크게 된다면 이는 좋은 인공신경망이 아니라는 의미가 되겠지요. 그렇기에 Stability-Plasticity dilemma는 인공신경망이 학습하는 대상이 무엇인가에 따라 비중을 조절하면서도 어느 한 쪽이 우월해서는 안된다는 것입니다.

300x250

ubuntu apt update 실행시 404 Not Found 에레 발생시 해결방법

공대생의 팁 2018. 11. 17. 00:27


 Ubuntu를 잘 사용하던 도중 업데이트를 하기 위해 "$sudo apt update" 명령어를 실행하였을 때 아래와 같은 에러가 발생하는 경우를 보았습니다.



 이와 같은 에러가 발생하는 이유는 크게 2가지로 생각하실 수 있습니다.


1. Ubuntu 운영체제의 지원기간이 종료되었을 때, LTS버전의 경우 5년간 지원되나 그 이외의 버전의 경우 지원기간이 짫기 때문에 지원이 종료되어 위와 같은 상황이 발생하는 경우가 있습니다.

2. ppa launchpad 사이트에 연결되었던 패키지가 지원이 종료되었을 경우


 이 경우 다음과 같은 방법으로 해결하실 수 있습니다.

1. Ubuntu 운영체제를 최신 버전으로 업그레이드하여 지속적인 업데이트를 지원받습니다.

2. ppa launchpad 사이트에서 더이상 패키지의 지원이 되지 않거나 접속 이상으로 업데이트가 되지 않는 경우 Setting을 통해 수정해줍니다.


시스템설정(Setting)→소프트웨어&업데이트(Software&Update) 메뉴에 들어가신 후 '기타 소프트웨어'탭을 선택하신 후 Terminal창의 결과에서 실행이 되지 않았던 부분에 Check를 해제한 후 다시 한 번 업데이트를 시도하면 정상적으로 소프트웨어를 업데이트 하실 수 있습니다.





300x250

우분투 16.04에서 한영키,한자키가 Alt,Ctrl로 동작할 때 해결법

공대생의 팁 2018. 11. 12. 16:43


 노트북에 우분투를 설치한 후 한글 입력을 위해 한/영키를 눌렀을 때 몇몇 노트북의 경우  Alt키를 누른 것과 같이 동작하는 경우가 있습니다. 이는 우분투가 영문판을 기준으로 해당 위치의  키가 한/영키와 한자키가 각각 Alt, Ctrl키로 인식하고 있기 때문입니다. 이를 해결하기 위해 다음과 같은 과정으로 해결하실 수 있습니다.


1. 키보드 입력기를 fcitx로 변경


 시스템 설정 →언어지원에서 키보드 입력기로 fcitx와 ibus등이 있습니다. 이 중 fcitx로 설정합니다. ibus 또한 추가 설정을 통해 사용이 가능합니다.



 2. gnome-tweak-tool 설치


apt 명령어를 사용하여 gnome-tweak-tool을 설치합니다.


$sudo apt install gnome-tweak-tool


 3. gnome-tweak-tool을 실행하여 입력 방식 변경


 다음과 같이 Terminal에 명령어를 입력합니다.


$gnome-tweak-tool


 이후 아래 화면과 같은 화면이 나오면 '입력' 메뉴를 선택하신 후 '한국어 한/영, 한자 키' 메뉴를 클릭한 다음 자신의 컴퓨터의 환경에 원하는 구성을 선택해줍니다.



 위와 같은 설정을 하셨다면 이제 자신의 노트북에서도 한글 입력 및 한자 변환이 가능해졌음을 확인하실 수 있습니다.




300x250

C++ 클래스 객체를 stream으로 통신 및 전달방법 - Boost Serialization(1) [직렬화된 클래스 만들기]

공대생의 팁 2018. 10. 20. 17:36


 객체지향의 언어를 사용함에 있어 가장 큰 장점으로 class를 사용하여 Constructor나 Inheritance(상속)등을 사용할 수 있어 프로그래밍을 하는 데 있어 한결 더 편리해진다는 점입니다.


 물론 Object(객체)를 하나의 프로그래밍에서만 사용한다면 큰 어려움이 없으나 Object를 binary 파일로 저장한다던가 통신 등을 통해 다른 프로세스로 전달을 해야할 경우 이를 stream으로 전달하여야 하나 이는 int나 float와 같은 Primitive 변수만 전달될 수 있다는 단점이 있습니다.


 이를 해결한 방법으로서 Object를 Serialization(직렬화)하여 stream으로 Object의 값을 전달하거나 저장할 수 있게 된 것입니다.


https://commons.wikimedia.org/


 Serialization을 하는 이유는 자신이 가지고 있는 Object가 상대에게는 어떤 방식으로 표현되어 있는지 알 수 없기 때문에 이를 전달하기 전에 Object가 가지고 있는 값을 직렬화시켜 Object의 값을 받고자 하는 쪽에서 분별할 수 있게 만들어줍니다. 직렬화 된 값이 상대에게 도착한 후에는 이를 다시 역직렬화(Deserialization)를 거쳐 자신이 갖고 있었던 Object값으로 다시 만들어줍니다. 즉, '4'나 'c'와 같이 간단하게 구성된 값이나 글자를 받을 수 있도록 만드는 것을 직렬화(Serialization)이라 할 수 있습니다.


 C++ 라이브러리 또한 객체를 사용하기 때문에 이를 지원할 수 있는 Boost 라이브러리를 지원합니다. 이를 사용하기 위해 다음과 같이 설치합니다.


$ sudo apt install libboost-all-dev


 다음으로 아래와 같은 간단한 예제를 통해 Boost의 Serialization의 방식에 대해 이해해보도록 합니다.


class_fileio.cc

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
 
#include<iostream>
#include<fstream>
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
 
using namespace std;
 
class tst{
public:
    friend class boost::serialization::access;
 
    tst(string sName, int sage, float spi)
        :Name(sName), age(sage), pi(spi)
    {}
 
    tst(){
    }
 
    string Name;
    int age;
    float pi;
 
    template<class Archive>
    void serialize(Archive& ar, const unsigned int version){
        ar & Name;
        ar & age;
        ar & pi;
    }
 
 
};
 
 
int main(){
 
    tst T("Tab", 31, 3.1415);
    tst* pT = new tst("Bat", 13, 2.5);
 
    ofstream output("output.txt", ios::binary);
 
    boost::archive::text_oarchive oa(output);
    oa << T;
    output.close();
 
    ifstream input("output.txt", ios::binary);
    boost::archive::text_iarchive ia(input);
 
    tst TT;
    ia >> TT;
 
    cout << TT.Name << endl;
    cout << TT.age << endl;
    cout << TT.pi << endl;
 
    ofstream pout("pout.txt", ios::binary);
    boost::archive::text_oarchive poa(pout);
    poa << pT;
    pout.close();
 
    ifstream pin("pout.txt", ios::binary);
    boost::archive::text_iarchive pia(pin);
 
    tst* pTT;
    pia >> pTT;
 
    cout << pTT->Name << endl;
    cout << pTT->age << endl;
    cout << pTT->pi << endl;
 
    return 0;
}
cs


다음으로 위의 작성된 코드를 컴파일합니다.


g++ class_fileio.cc -lboost_serialization


 실행하면 다음과 같은 결과를 확인하실 수 있습니다.



 결과를 보면 알 수 있듯이 Class의 값이 포인터인 경우에도 동작이 잘 수행되고 있음을 직접 확인하실 수 있습니다. 이제 자신이 만든 클래스로도 stream을 통해 전송할 수 있음을 확인할 수 있습니다!



300x250

Ubuntu에서 Chrome 실행할 때 마다 Keyring을 묻는 팝업창이 나타날 때 해결방법

공대생의 팁 2018. 10. 19. 10:34

 

 평소 문제 없이 써오던 중 설정을 다시 하기 위해 우분투를 다시 설치한 후 크롬을 실행하였는데 다음과 같은 팝업창이 크롬을 처음 실행할 때 마다 나타나고 있었다.

 

 

  이 현상은 우분투를 자동로그인으로 설정하였을 때 나타나는 현상으로 우분투를 비밀번호를 입력하는 식으로 설정하면 위의 팝업창이 나타나는 현상을 해결할 수 있다.

 

 만약 우분투의 자동로그인 설정을 유지하고 싶다면 gnome-keyring을 제거해준다.

 

$ sudo apt remove gnome-keyring


  Ubuntu 18.04에서 해당 과정 수행시 심각한 문제가 발생한다는 것을 확인하였습니다. 만약 해당 문제가 발생하시는 분들께서는 아래의 방법대로 수행해주시기를 부탁드립니다. 작성 이후 다른 버전에서 동작 확인되는 것을 확인하지 못해 해당 문제가 발생하는 것을 확인하지 못하였습니다. 해결 과정에서 심각한 피해를 드린점 사과드립니다.


https://greedywyatt.tistory.com/122

[Ubuntu 18.04] 부팅 시 x window로 안들어가질 때 해결 / chrome keyring 제거 방법

처음에는 chrome 실행 시, 계속해서 물어오는 keyring을 제거하기 위하여 아래와 같은 명령어를 사용해주었는데, 이 명령어 수행 이후, 재 부팅을 하니까 x window로 안들어가지고 계속 가상 커널로 접

greedywyatt.tistory.com

https://haaringa.tistory.com/164

우분투에서 크롬 실행시 keyring 묻는 팝업 창 해결?법

우분투에서 크롬 실행 시 keyring 묻는 팝업 창 해결?법 전에 작성했던 글에서 우분투 운영체제 부팅 후 크롬 실행 시 keyring 팝업이 뜨는 것을 해결했다고 글을 올렸으나 나중에 다시 뜨는 현

haaringa.tistory.com

300x250

Compiling OpenCV without QT (QT 설정을 제외하고 OpenCV 컴파일 방법)

공대생의 팁 2018. 10. 11. 21:14


 Recently there was a big problem while using LSD SLAM as ROS. When I installed LSD SLAM with ROS Kinetic, 'DebugWindow DEPTH' is not reponding with no image. I found that you must install the OpenCV library separately.


 First, download the latest version of OpenCV.


$ wget https://github.com/opencv/opencv/archive/3.4.3.zip


 Second, unzip the downloaded file.


$ unzip 3.4.3.zip


 Third, download and install cmake-gui


$ sudo apt install cmake-qt-gut


 After that, make a build folder and Prepare to use cmake-gui.


$ cd opencv-3.4.3

$ mkdir build

$ cd build

$ cmake-gui ../


 If you proceed as far as this, you will see the following screen.



 Now click the "Generate" button.



Then you can see the result above. Please uncheck "WITH_QT" and click "Generate" again. Then you finish the work.

 Finally compile and install your program!


$ make -j4 && sudo make install



300x250

Fedora Activities(현재활동) 메뉴에 프로그램 추가하기

공대생의 팁 2018. 9. 12. 11:41


 Fedora를 사용하다 보면 Super(Windows)키를 누른 후 나오는 왼쪽의 메뉴들을 통해 원하는 프로그램을 쉽게 실행할 수 있도록 설계되어 있습니다.



 그렇다면 우리가 실행하고자 하는 프로그램을 왼쪽의 메뉴에 추가하는 방법에 대해 알아보도록 하겠습니다.


1. desktop 아이콘 추가하기


 먼저 아래의 폴더로 이동합니다. 만약 없을 경우 폴더를 생성해줍니다.


cd ~/.local/share/applications/


 그 다음으로 아래와 같이 desktop 아이콘을 추가해줍니다.


$ vi 프로그램명.desktop


 에디터를 사용하여 아래와 같은 내용의 파일을 만들어줍니다. 


1
2
3
4
5
6
7
[Desktop Entry]
Type=Application
Name=Eclipse                            //자신이 만들고자 하는 프로그램의 이름
Comment=Code program                    //프로그램의 목적 등에 대해 작성합니다.
Exec=/home/<User name>/eclipse/eclipse  //프로그램을 실행할 수 있는 Binary 파일의 경로를 작성냅니다.
Icon=/home/<User name>/eclipse/icon.xpm //프로그램을 알 수 있는 Icon 이미지의 파일 경로를 작성합니다.
 
cs



    2. 즐겨찾기에 추가하기


 위 과정까지 마치셨다면 아래와 같이 프로그램명을 검색하였을 때 설정한 Icon 이미지로 나타나게 됨을 확인할 수 있습니다.



 여기서 해당 Icon 이미지를 오른쪽 클릭 하신 후 '즐겨찾기에 추가(Add to Favorites)'를 선택합니다.




 이제 아래와 같이 왼쪽 메뉴에 자신이 실행하고자 하는 프로그램이 추가되어 있는 것을 확인하실 수 있습니다.





300x250

Fedora에 Eclipse CDT로 C/C++ 개발환경 만들기

공대생의 팁 2018. 9. 12. 00:47


 오랜만에 C를 사용한 프로그램을 개발하게 될 기회가 생겨 Fedora를 사용하여 프로그램을 개발하고자 하였는데 설정과정이 조금 번거로워 이참에 정리해두고자 블로그에 글을 하나 써 보게 되었습니다. Fedora를 사용하시는 분들께 조금이나마 도움이 되셨으면 합니다.


1. Eclipse CDT를 다운로드 받습니다.


http://www.eclipse.org/cdt/




 홈페이지를 참조하셔서 자신의 조건에 맞는 버전을 다운로드 받으시면 되겠습니다.


2. 압축을 해제하신 후 원하는 위치에 Eclipse CDT를 설치합니다.


3. dnf를 사용하여 아래와 같이 설치합니다.


# sudo dnf install gcc-c++ kernel-devel


4. eclipse 실행파일을 클릭하여 실행합니다.


5. File -> New -> Project를 클릭합니다.



     6. C Project를 선택합니다.



7. Executable -> Hello World ANSI C Project 선택 후 Linux GCC를 선택한 다음 Finish 버튼을 클릭합니다.


8. Project -> Build project를 선택하여 프로그램을 Build 해줍니다.


9. Run -> Run as -> Local C/C++ Application을 클릭하여 프로그램을 실행시켜주면 개발환경이 완성되었음을 확인하실 수 있습니다!



 이제 여러분들은 Fedora를 사용하여 C 프로그래밍을 하실 수 있게 되었습니다. 언제나 좋은 결과가 있기를 진심으로 바랍니다.



300x250

Exterior differentiation(외미분, Exterior derivative)

공대생의 팁 2018. 7. 25. 16:55


 Exterior derivative(외적분)이란, differential form(미분 형식) 함수의 미분 개념에서 더 높은 차원으로 표현한 것이다. 즉, k-form(k-형식)의 differential form을 (k+1)-form의 differential form으로 만드는 것을 목표로 한다.


 k-form에 대한 자세한 내용은 아래 블로그 내용에서 다루어져 있으므로 참고하자. 


k-form(k형식) - [http://elecs.tistory.com/270]


 Exterior derivative를 정의하면 다음과 같다.


 Def) 0-form 형식의 함수 A가 있다고 하자. 이 함수는 실수 R에서 열린 집합이라 할 때, exterior derivative인 dA는 1-form으로 아래와 같이 나타낼 수 있다.



 간단한 예제를 통해  exterior derivative를 이해해보자.


  


 위 수식을 exterior derivative로 나타내면 다음과 같다.


 


 위 수식의 결과로 0-form에서 1-form의 값이 나타남을 확인할 수 있다.

 이번에는 1-form에서 2-form을 구해보도록 하자.


 


 위 수식을 exterior derivative로 나타내면 다음과 같다.




출저 : Steven H. Weintraub(2014), Differential Forms Theory and Practice, Academic Press, 11-12p

300x250