2012년 12월 12일 수요일

매쓰매티카 대체품 - SAGE 깔아서 써보기 (초보자용)

매쓰매티카 대체품 - SAGE 깔아서 써보기 (초보자용)(원래글 : http://www.ubuntu.or.kr/viewtopic.php?f=25&t=23406 )


매틀랩 대체품으로 쓸만한 걸로는 Octave 같은게 전통적으로 있는데
매쓰매티카에 대응할 만한 것으로는 확실히 Sage를 말할 수 있을 것 같아요.

뭐 요즘은 매틀랩이든 매쓰매티카든 간에 어느정도는 다 서로 다 커버가 되지만...
(예를 들면 매틀랩에도 심볼릭 툴박스가 있으므로, 이것을 장착하면 심볼릭 계산이 됨)

아무튼 Sage는 '수학용'으로 처음부터 개발된 것이므로 
공학용 매틀랩 보다는 
수학용 매쓰매티카에 좀 더 잘 대응이 되는 오픈소스라고 할 수 있을 것 같아요.

사실 Sage를 굳이 내 컴퓨터에 깔아서 구동시키지 않아도,
웹서비스로 Sage 서비스를 하는 곳들이 있기 때문에
이곳에 접속해서 그냥 하면 되긴 합니다.

(1) http://sagenb.org : 공식 온라인 서비스
(2) http://sagenb.kaist.ac.kr : 카이스트에서 서비스 (댄 드레이크 교수가 운영)
(3) http://math1.skku.ac.kr : 성균관대 수학과에서 서비스 (공개 계정으로 로그인)
(4) http://math2.skku.ac.kr : 성균관대 수학과에서 서비스 (개인 계정 만들어서 로그인)

특히 성균관대 수학과에서 서비스해 주는 곳은, 한글화를 잘 해놓고 또 쉽게 따라배울 수 있는
강의와 동영상, 그리고 성균관대 학생들이 과제로 올린 풍부한 예제들을 많이 볼 수 있어서
정말 감사하더군요. 
주로 선형대수학을 중심으로 하는 듯 합니다.
Sage를 가지고 놀면서 선형대수학 공부도 하면 학습효과가 500% 향상될 것 같습니다.

무료로 제공해주는 이런 온라인 서비스만 가지고 놀아도 사실은 충분합니다.
내 컴퓨터에 굳이 Sage를 깔지 않아도 됩니다.
하지만 몇가지 이유로, 
직접 깔아서 내 컴퓨터에서 이걸 구동시켜서 사용하겠다고 하는 분이 있다면 
쉽게 깔아서 쓸 수도 있습니다.


---------------------------------------------------------------------------

이제부터 Sage를 Ubuntu 12.10 (정확히 말하면 민트 14 나디아)에 까는 과정과
간단히 구동시킨 사례를 보여드리고자 합니다.

일단 Sage를 깔아보니 몇가지 특징이 눈에 띕니다.



(1) 외부의 의존성이 없도록 전부 자체적으로 합쳐서 패키징을 해 놨습니다.
덕분에 용량이 수백MB 정도로 좀 덩치가 큽니다. 그 대신에, 의존성있는 라이브러리를 먼저 깔아주고 환경을 만들어주기 위해 삽질할 필요가 없습니다. 그냥 다운 받아서 원하는 장소에 압축 풀고 실행시키면 됩니다.

(2) 파이썬 기반으로 개발되었습니다.
때문에 Sage 문법은 파이썬 문법과 거의 유사하며, 심지어 파이썬을 그대로 Sage 안에서 돌려도 됩니다. 파이썬 중에서 iPython 쉘을 사용하여 그 위에서 올라타서 구동됩니다.
사실 파이썬도 매우 쉽지만, 그보다 더 쉽게 해 놨기 때문에 
파이썬 프로그래밍조차 부담을 느끼는 분이 있다면 Sage를 가지고 노시는게 더 좋을 듯 합니다.

(3) 기존의 라이브러리를 최대한 이용하여 만들어져 있습니다.
예를 들어 심볼릭 처리를 위해 Sympy 라이브러리를 이용하고 있습니다.
선형대수 계산을 위해 Scipy,Numpy 라이브러리를 사용하고 있습니다.
2D 플랏팅을 위해 MatPlotLib 라이브러리를 사용하고 있습니다.
3D 플랏팅을 위해 JMOL 이라는 Java 프로그램을 갖다 쓰고 있습니다.
헌데 이런 외부 패키지를 전부 자기 패키지 안에 싹 다 집어넣어 놨기 때문에, 
라이브러리 찾아 삼만리 안 해 줘도 됩니다.
심지어 파이썬 자체도 시스템의 것을 사용하지 않고, 자기 안에 집어 넣어 놓은 것을 씁니다.
때문에 버전 문제로 작동이 안되거나 하는 등의 문제로 골치아프지도 않습니다.

(4) 생각보다 엄청나게 강력합니다.
기존 라이브러리를 Sage 안에 집어넣은 규모가 굉장히 큽니다.
한 200가지 정도 되는 것 같아요.
때문에 필요한 기능은 왠만하면 이미 다 있다고 보시면 될 것 같습니다.

(5) 속도가 그렇게 느린 편은 아닙니다.
Sage 자체 벤치마킹 결과에 따르면, 매틀랩이나 매쓰메티카와 일부 항목에서 비슷하거나
대체로 좀 더 빠른 편입니다.


---------------------------------------------------------------------------


이제 까는 과정을 설명드려 보겠습니다.


(1) 공식 홈페이지 방문 http://sagemath.org

(2) 다운로드 페이지 들어감 http://sagemath.org/download-linux.html

(3) 적당한 서버를 골라서, 내 시스템에 맞는 버전을 골라서 다운로드 받습니다.
저는 카이스트 서버에서 
sage-5.4.1-linux-64bit-ubuntu_12.04.1_lts-x86_64-Linux.tar.lzma
이것을 다운로드 받았습니다.
압축파일 이름을 보면, 우분투 12.04 버전용이라고 되어 있지만
12.10 버전에서도 아무 문제 없습니다.
왠만한 것들은 전부 안에 집어넣어서 독립적으로 만들어놨기 때문에 
시스템 특성을 잘 안타는 것 같아요.

(4) 설치할 위치에 압축을 풉니다.
슈퍼유저 권한이 없으면 쓸 수 없는 시스템 영역의 디렉토리에 자리를 잡아도 되지만
제 경우에는 개인용 데스크탑이기 때문에 /home/kim 디렉토리 밑에 
Softwares 디렉토리를 만들고 거기에 풀어넣었습니다.
(kim은 사용자 계정의 홈 디렉토리)
슈퍼유저 권한이 없이, 사용자 권한만으로 Sage를 완전히 관리할 수 있도록 하기 위해서죠.
결과적으로 
/home/kim/Softwares/sage-5.4.1-linux-64bit-ubuntu_12.04.1_lts-x86_64-Linux
이런 디렉토리 안에 들어가 있게 되겠죠.
세이지 디렉토리 이름이 너무 지저분하다고 생각되면, 이름을 지금 미리 바꿔놓읍시다.

(5) 디렉토리 안에 들어가면 Makefile 도 보이는데, 컴파일할 필요가 없으므로 무시하고
그냥 바로 여기서 터미널 띄워서 ./sage 라고 쳐 주시면 준비과정을 혼자 좀 거친 다음에 
sage 콘솔 상태로 들어갑니다.
프롬프트로 sage: 라고 뜨므로, 여기서 sage 명령을 때려주고 하면 됩니다.

(6) 종료하려면 quit 명령을 타이핑 해 주면 됩니다.



이제 다 깔고 실행이 된 거죠.


---------------------------------------------------------------------------


그런데 덜렁 콘솔 상태에서 뭔가를 하려니까 너무 허접해 보인다 이런 느낌이 듭니다.
Sage를 웹 서비스해주는 곳들의 웹서버는 어떻게 만들었나 싶었는데
그것도 이미 다 설치되어 있으므로 그냥 웹서비스를 실행시키면 됩니다.

웹서비스를 실행시키려면

./sage -n

으로 -n 옵션을 줘서 실행시켜도 되고, 또는 

./sage 로 그냥 실행시킨 다음에 sage: 프롬프트 상태에서 notebook() 명령을 줘서 해도 됩니다.

그러면 파이썬으로 작성된 웹서버가 로컬로 구동이 되면서 자동으로 웹브라우저가 뜨고
Sage 노트북 페이지로 들어갑니다.
비번은 뭐 적당히...


요컨데, QT,GTK 같은 GUI 환경으로 애써 만들어봤자 쓸데 없으니 
처음부터 웹기반으로 사용자 인터페이스를 만들어놓은 건데, 현명한 것 같습니다.
서버 만들어서 여러 사람이 협업하기 좋게 해 주는 등의 
어려운 개발 부분들이 그냥 아주 쉽게 해결되쟎아요.

헌데, 제 경우에는 서버로 돌리는게 목적이 아니고 그냥 나혼자 쓰는게 목적이므로
웹서버를 구동해서 오랫동안 돌리는게 아니고, 쓸 때마다 잠깐 실행시켜서 놀다가
지겨우면 종료를 간편하게 시키는게 중요합니다.

웹서버 구동은 되는데 종료하는게 없으니 캐난감.
웹서버를 끝낼 때는 kill 명령으로 강제로 서비스를 죽여야 됩니다.

PID가 뭔지 알기 위해서

/home/kim/.sage/sage_notebook.sagenb/sagenb.pid

파일을 gedit로 열어보면 그 안에 PID가 적혀 있습니다.
(/home/kim/.sage 디렉토리는 보통 안보이기 때문에, 탐색기 메뉴에서 '보기'->'숨긴파일 보이기'를 체크해 주시면 됩니다.)

예를 들어 4782라고 되어 있으면, 터미널 하나 띄워서 kill 4782 라고 명령을 주면 되죠.

(sagenb.pid 파일은, 웹서버가 실행될 때만 생성되는 임시 파일이므로
웹서버를 kill 하고 나면 저절로 사라집니다.)


---------------------------------------------------------------------------


근데 매번 PID를 알아내서 kill 명령을 타이핑 해 주기 귀챦으므로,
gedit를 이용해서 스크립트 파일을 만들어서 그것을 이용하기로 하였습니다.

2가지를 만들었는데요.


(1) start-sage-server.sh

#!/bin/bash
/home/kim/Softwares/sage-5.4.1-linux-64bit-ubuntu_12.04.1_lts-x86_64-Linux/sage -n

이렇게 내용을 써 주고 저장한 다음에 파일 속성->권한->파일을 프로그램으로 실행 허용 권한을 줬습니다. 


(2) kill-sage-server.sh

#!/bin/bash
kill $(cat /home/kim/.sage/sage_notebook.sagenb/sagenb.pid)

이렇게 역시 내용을 써 주고 동일하게 해 주었습니다.


하나는 Sage 실행하는 거고, 또 하나는 종료하는 거고요.
좀 무식한 방법이긴 해도 유용한 것 같습니다.
이 파일을 아무데나 갖다 넣어두고 더블클릭만 해 주면 되니... 


---------------------------------------------------------------------------

아래 캡쳐 그림은 3가지 인데,

(1) 콘솔 상태에서 명령 2개 준 것
(2) 그 결과로 창이 하나 떠서 3D 플랏팅이 된 것
(3) 콘솔이 아닌 웹브라우저 상태에서 동일한 명령 2개를 준 것

(위) Sage 콘솔 상태





























(위) Sage 콘솔에서 plot3d 명령을 줬을 때 뜨는 3D 플랏 화면


(위) Sage Notebook 웹서버로 실행했을 때의 브라우저 화면











































여기서 사용된 명령은 2줄인데

var('x,y')
plot3d(sin(x)*cos(y),(x,-3,3),(y,-3,3))


var() 함수는 Sympy 라이브러리에서 가져온 심볼릭 함수입니다.
x,y라는 문자를 심볼로 취급하라는거죠.

plot 명령은 2D 그래프를 그리는 MatPlotLib 라이브러리에서 온 것이고
plot3d 명령은 3D 그래프를 좀 더 빵빵하게 하기 위해 JMOL 프로그램을 불러오도록 한 것 같습니다.

JMOL화면이 띄워진 상태에서 보니깐 이게 원래 분자구조를 보여주기 위한 목적으로 만들어진 모양인지
분자관련한 쓸데없는(?) 메뉴들이 들어가 있더군요. 그냥 무시하면 될 듯 하고...


플랏된 그림은 나름대로 봐줄만 합니다.
옵션을 더 주면 더 이쁘게 할 수도 있겠지만, 이건 아무 옵션 없이 간단히 띄운 것이므로
대충 이정도 그림이 나온다 하고 감을 잡으면 될 듯 합니다.

매쓰매티카에서 그린 것 보다 조금은 소박한(?) 느낌은 듭니다만 .. ㅋㅋ

아무튼 http://sagemath.org/ 여기랑 http://math1.skku.ac.kr/ 같은 곳들에서 제공해주는 튜토리얼을 따라하면서 재미있는 수학 놀이 해 보면 정말 재미있을 듯 합니다.

3차 4차 방정식의 근이 함수 하나로 똻!! 구해지고 
복잡한 수식을 심볼릭 기능으로 한 줄만에 간단히 정리해 버리고
소인수분해 자동으로 막 해주고
100x100 행렬 곱셈도 시켜보고요.

그러다가 좀 익숙해지면
http://mathnet.or.kr/new_sub05/sub05_03.php
여기서 소개되는 '유명한 곡선 목록'에 나오는 곡선 공식들을 하나씩 넣어서 그려보고
옵션 더 넣어서 이쁘게 치장도 해 보고...

그러다가 이제 정말 잘 하게 되면
실무적으로 마음대로 쓸 수 있게 되겠죠!

수학선생님이라면 학생들한테 이걸로 그래프 똻! 그려서 보여주면
학생들이 '오오오 우리 선생님 짱' 할 것이고

회사원이라면 시장조사 데이타를 이걸로 그래프 3차원으로 이쁘게 그려서 
똻! 내놓고 이리저리 돌려가면서 동적으로 프리젠테이션 하면 
중역 진급은 따논 당상

과학도, 엔지니어라면 이것의 효용성은 따로 설명 드릴 필요가 없을 듯 하고요.


찜찜하게 매틀랩, 매쓰메티카 불법 크랙해서 쓰지 말고
이걸로 하면 최소 10년 이상 안정적으로 유용하게 쓰일 수 있는 동반자가 될 것 같습니다.

댓글 없음:

댓글 쓰기