많은 공학도 분들이 MATLAB 의 사용법에 대해서 공부하실 거라고 생각합니다. MATLAB 은 아시는 바와 같이 매우 비싼 툴이고 업데이트를 위한 라이센스 유지비용 역시도 1년에 20~30 % 정도를 내는 걸로 알고 있습니다. 저는 학교에서 MATLAB 수업 과목의 조교를 했었고~ 이런 경험을 바탕으로 MATLAB 사용 방법을 소개하기 위해서 본 블로그를 만들었습니다. 개인적으로도 회사에서 MATLAB 을 사용한 업무를 하지만, 일반적으로 학생들이 학교에서 배우는 MATLAB 을 사용한 알고리즘 개발까지는 사실 MATLAB을 사용할 필요가 없다고 생각합니다.

제 블로그에서 소개했었던 Python, Scilab, Octave 를 비롯해서 매틀랩을 대신하여 알고리즘을 개발해 볼 수 있는 오픈소스 또는 프리웨어 소프트웨어들은 정말 많이 있습니다. 그렇다면 매틀랩을 쓸 수 밖에 없는 경우는 무엇이냐라고 한다면 제가 경험한 바로는 C, RTL 등의 코드 생성 분야와 Simulink 나 Stateflow 를 사용한 MBD(Model Based Design) 분야라고 볼 수 있을 것 같습니다. 학교에서는 Python, Octave 를 비롯한 오픈소스 소프트웨어들을 주로 사용하다가 회사에 와서 MATLAB 을 사용해도 늦지 않다고 생각합니다. 또한 MATLAB 만 잘하는 것 보다는 Python 과 같은 언어를 먼저 잘하는게 범용성과 실용주의적인 관점에서 더 낫다고도 생각합니다.

저는 요즘 아래 주소의 인프런(inflearn) 이라는 사이트에서 딥러닝 관련된 강좌를 보고 있는데 최근에 들어가보니 MATLAB 강좌도 있더군요.

https://www.inflearn.com

‘MATLAB으로 시작하는 프로그래밍’ 이라는 강좌이고 MATLAB 을 처음 접하시는 분들에게 유용할 강좌인것 같습니다. 비용도 무료이므로 부담없이 수강하실 수 있을 것 같습니다.

https://www.inflearn.com/course/matlab-%EC%8B%9C%EC%9E%91-programming/

다음으로 아래 주소의 tutorialspoint 사이트에서도 MATLAB 관련 Tutorial 들이 있더군요.

https://www.tutorialspoint.com/matlab/index.htm

영어 자료이긴 하지만 예제들도 굉장히 잘 정리가 되어 있어서 MATLAB 공부하는데 굉장히 좋은 자료로 보입니다. 공부하시는데 참조하시기 바랍니다.



인간은 도구를 사용하는 존재이고  적재적소에 적절한 도구를 사용하는  것이야말로 현대 사회를  살아감에 있어서 큰 경쟁력이 될 것입니다. 요즘 사람들은 굉장히 다양한 소프트웨어들을 사용하고 있습니다.  이런 소프트웨어들 중에는  상용 소프트웨어도 있고 오픈소스 또는 프리웨어 소프트웨어도 있습니다.

그런데 많은 사람들이 어떤 소프트웨어가 있는지를 모르다보니 기존에 알고 있는 상용 소프트웨어를 불법으로 사용하는 경우가 굉장히 많이 있는 거 같습니다. 그래서 오늘은 상용 소프트웨어에 대하여 대체가능한 오픈소스  또는  프리웨어 소프트웨어를 찾는 방법에 대해서 소개해 보려 합니다.

비슷한 기능을 하는 소프트웨어를 추천해주는 사이트로 alternativeTo 라는 사이트가 있습니다.  해당 사이트의 주소는 아래와 같습니다.

https://alternativeto.net

alternative 는 “대안, 선택 가능한 것” 이라는 뜻입니다. 사용하는 소프트웨어에 대하여 대안이 될 수 있는 소프트웨어를 추천해 주는 사이트입니다.

사용방법은 너무나 간단합니다.  아래의 포스팅에서도 소개한 바와 같이 저는 복사 붙여넣기 프로그램로 ditto 를 사용하고 있습니다. 

http://iamaman.tistory.com/737


alternativeTo 에서 아래와 같이 ditto 라고 검색을 해 보면 해당 프로그램이 나옵니다.  


해당 프로그램을 클릭 하고 들어가 보면 위쪽에는 해당 프로그램의 상용/ 오픈소스/ 프리웨어  여부와 사용가능한 OS 또는  플랫폼이 나오고  아래로 스크롤 해 보면 대체 가능한 소프트웨어들의 목록을 보여 줍니다.

ditto 의 대체 가능한 소프트웨어로 CopyQ, FastKeys, 1clipboard 등이 나오는군요. ditto 는  윈도우  전용 소프트웨어이므로  리눅스 또는 맥을 사용하시는 분들은 CopyQ 라는 소프트웨어를 설치해서 사용하시면 될 것 같습니다.


제 블로그에서 자주 소개하는 프로그램인 MATLAB 의 경우 GNU Octave, R (programming language), Sage, Mathematica, Scilab, SciPy & Numpy, Julia, fxSolver, Maxima, wxMaxima 와 같은 소프트웨어들을 추천해 주는군요.


아무 생각 없이 학교에서 알려준다라는 이유로  불법 소프트웨어를 사용하지 마시고 alternativeTo  와 같은 사이트를 통하여 훌륭한 오픈소스 또는 프리웨어 소프트웨어들을 사용하는 습관을 들여 보시기 바랍니다.


요즘 MATLAB 많이들 사용하시나요?

 

산업계뿐만 아니라 학교에서도 이 비싼 MATLAB 을 가르치니 학생들도 MATLAB 을 많이들 사용하는 것 같네요.

 

아래 tiobe 사이트에서도 비싼 툴임에도 불구하고 MATLAB 이 14위에 랭크 되어 있는 걸 보면 MATLAB 이 요즘 잘 나가고 있다는 건 확실 한 듯 하네요.

 

 

그래서 일까~ 아래 포스팅에도 소개 했지만 MATLAB 과 유사한 오픈 소스 프로그램들도 굉장히 많이 있습니다. 사실 스크립트만 활용한다면 MATLAB 을 굳이 살 필요는 없다는 생각이 드네요.

 

http://iamaman.tistory.com/639

http://iamaman.tistory.com/1427

 

그런데 요즘은 MBD(Model Based Design) 과 같은 이슈들로 Simulink 를 많이 활용하면서 다시 인기가 높아지는 게 아닐까요?

 

MATLAB 을 대체 할만한 툴은 많은 것 같은데 Simulink 를 대체할 만한 좋은 툴은 아직 보이지 않는 것 같네요. Scilab 에 Scicos 가 있긴 한데 아직은 우리나라에서 그리 많이 활용되고 있진 않은 것 같습니다.

 

아무튼 오늘은 또 다른 MATLAB 프로그램을 소개하려 하는데요. 이건 설치 프로그램이 아니라 cloud 프로그램 입니다. Freematlab 이라 해야 할지 mathclouds 라고 해야 할지 잘 모르겠네요.

 

홈페이지는 아래와 같고 두 사이트가 동일한 사이트 입니다.

 

http://www.freematlab.com

http://www.mathclouds.org

 

홈페이지는 아래와 같이 생겼는데~

 

Getting Started 페이지에 들어가면 Example 들도 잘 되어 있고 기존 MATLAB 사용자들은 바로 사용 가능 할 것 같습니다.

Help 페이지를 확인하니 대부분의 함수들이 MATLAB 과 동일 하네요.

 

또 하나의 좋은 툴을 알게 돼서 기분이 좋네요.


  1. jaegimania 2018.01.17 17:19

    기계관련 엔지니어 업무를 하고 있는 1人입니다.
    우연찮게 홈페이지 글 잘 읽었습니다. 감사합니다.
    Test 수치를 도식화 할 필요가 있어 깔끔한 프로그램을 찾던중 여기까지 오게됬는데요
    위 본문에서 말씀하신 freematlab의 경우 회사에서 사용시 무료가 아니네요...

    그래도 다른 본문에서 언급하신 FreeMat을 알게되어 기쁩니다.
    주인장님 아니였음 이런 프로그램이 있는줄도 몰랐을겁니다ㅎㅎ

    • 남성 2018.01.17 17:25 신고

      포스팅 시점에는 위 캡쳐 화면과 같이 그냥 쓸수 있었는데 오늘 님 댓글 보고 사이트 방문해 보니 사용료가 생긴것 같군요. freemat 이나 octave 를 사용해 보시길 추천 합니다. 파이썬을 사용하면 더욱 더 좋구요.
      아님 요즘 개발되는 언어로 julia 라는 언어가 있습니다. MATLAB 처럼 공학용 언어인데 속도도 빠르다고 하네요.

      http://iamaman.tistory.com/1479

오늘은 Scilab 에서 figure 창을 닫는 명령어에 대해 소개 하려 합니다.

 

MATLAB 에서는 간단하게 close 를 하면 현재 figure 창이 닫히고 close all 을 하면 현재 열려진 모든 figure 창이 닫힙니다.

 

하지만 Scilab 에서는 그렇지 않더군요. 어떻게 해야 MATLAB 의 close all 과 같은 기능을 할 수 있을 까 찾아보니~

 

아래 주소의 글이 있더군요.

 

http://help.scilab.org/docs/5.3.3/en_US/m2sci_close.html

 

scilab 에서 MATLAB 의 Close all 과 같은 기능은 xdel(winsid()) 라고 명령해야 합니다.

 

여기서 xdel 은 graphics window 를 닫는 함수이고~ winsid 함수는 graphics windows 의 리스트를 반환하는 함수라고 합니다.

 

그래서 xdel(winsid()) 의 뜻은 graphics windows 의 리스트를 반환하고~ 그 반환 값들을 다 닫으라는 뜻이 됩니다.


아래 포스팅에서 MATLAB 을 이용한 logscale 그래프 그리는 방법에 대해 설명 드렸습니다.

  

2013/01/29 - [programming language/MATLAB] - MATLAB 로그 스케일 그래프 그리기 semilogx(),semilogy(), loglog()

MATLAB 에서는 semilogx, semilogy, loglog 와 같은 함수를 사용하여 x, y 축에 대해 로그 스케일 그래프를 그리게 되는데요~

 

Scilab을 이용하여 2차원 평면에서 로그 스케일 그래프를 그릴때는 plot2d 함수를 사용합니다.

 

plot2d([logflag,][x,],y[,style[,strf[,leg[,rect[,nax]]]]])

 

위 plot2d 함수의 원형에서 logflagn 으로 설정하면 normal scale, l (소문자 L) 로 설정하면 log scale 입니다.

 

그래서 xy 축을 둘다 로그 스케일로 설정하고 싶다면 logflag 값을 ll 로 설정하고~

 

X 축은 log 스케일로 y 축은 normal scale 로 설정하고 싶다면 ln, x축은 normal scale, y 축은 log scale 로 설정하고 싶다면 nl 로 설정하면 됩니다.

 

그럼 간단하게 예제를 하나 그려 볼까요?

 

다음과 같은 데이터에 대해~

 

x= 0:0.1:10;

x_10=10.^x;

 

semilogx 예제는 다음과 같습니다.

 

figure()

subplot(211)

plot2d("nn",x_10, x)

xtitle("Normal scale", "x axis", "y axis");

 

subplot(212)

plot2d("ln",x_10, x)

xtitle("Semilogx", "x axis", "y axis");

 

 

semilogy 예제는 다음과 같습니다.

 

figure(1)

subplot(211)

plot2d("nn",x,x_10)

xtitle("Normal scale", "x axis", "y axis");

 

subplot(212)

plot2d("nl",x,x_10)

xtitle("Semilogy", "x axis", "y axis");

 

 

loglog예제는 다음과 같습니다.

 

figure()

subplot(211)

plot2d("nn",x_10, x_10)

xtitle("Normal scale", "x axis", "y axis");

 

subplot(212)

plot2d("ll",x_10, x_10)

xtitle("loglog", "x axis", "y axis");

 


MATLAB 에서와 마찬가지로 Scilab 에서도 cell 타입을 지원 합니다.

 

cell 타입은 특이하게도 모든 데이터 타입들을 다 저장 할 수 있는 데이터 타입입니다.

 

MATLAB 에서는 아래 포스팅에서 소개한 적이 있습니다.

 

Scilab 에서는 cell() 은 아래와 같이 m1,m2,….mn 의 다차원으로 정의 할 수 있습니다.


 

c = cell(m1, m2, ..., mn)

 

c = cell(3) 이라고 정의 하면 3 행 3열의 cell 을 정의합니다. 3 행 1열의 cell 을 정의하고 싶다면 c = cell(3,1) 이라고 정의 해야 합니다.

 

cell 의 차원을 알기 위해서는 아래와 같이 dims를 사용하거나 size() 함수를 사용하는 방법이 있습니다.

 

c.dims or size(c)

 

dims 로 차원을 확인해 보면 그 리턴 타입이 int32 입니다. 이런 경우 index 로는 사용 할 수 없다고 합니다.

 

size() 함수로 차원을 알아보면 동일한 결과가 나오지만 그 type 을 확인해 보면 double 인 것을 확인 할 수 있습니다. (type 의 결과가 1 인 것은 double 을 의미 합니다.) 따라서 인덱스로 사용할 수 있겠죠.

 

다음으로 cell 의 각 element 에 접근 하기 위해서는 괄호() 를 사용하는데 그냥 () 만 사용해서 나온 결과는 cell 입니다.

 

따라서 각 index의 값에 접근 하고 싶을 때는 entries 라는 키워드를 사용해야 합니다.


 

괄호는 sub cell 에 접근 할 때 사용합니다. 위 그림은 X 라는 3행 2열 cell 의 모든 행 1열에 b 라는 셀을 넣는 예입니다.


텍스트 파일 등에 저장된 실험 데이터 등을 처리 할 때 MATLAB 에서는 load 라는 명령어를 통해 데이터를 읽어 들이곤 합니다.

 

abc.txt 라는 파일에 데이터가 저장되어 있을 때~~ 간단하게~~ load abc.txt 라고 MATLAB command window 에 타이핑하면 abc 라는 변수로 데이터가 로드 되는거죠~

 

Scilab 에서는 loadmatfile 라는 함수가 있습니다.

 

다음과 같이 abc.txt 파일에 숫자로 된 데이터가 저장되어 있을 때~

 

Scilab console 에 다음과 같이 타이핑하면 abc.txt 파일의 데이터를 로드 할 수 있습니다.

 

loadmatfile('abc.txt')

 


아래 글을 보니 MATLAB 소프트웨어 단속 하나 보네요~

 

http://www.clien.net/cs2/bbs/board.php?bo_table=park&wr_id=26152226

 

위 주소의 글에 따르면 특정 교수 연구실 하나 지목해서 압수수색영장 가지고 싹 잡아서 20 카피에 54억 불렀다고 하는데~

 

한 카피당 2.7억 정도 부른건데… 제가 아는 가격보다는 한 2천정도 덜 부른 거 같네요.

 

보통 MATLAB 을 크랙으로 사용할 때는 필요한 툴박스만 사용하는 게 아니라 풀패키지를 깔게 되고~

 

풀 패키지 가격이 요즘 한 2.9 억 정도 되는 것 같던데~

 

뭐 일단 저는 대학에서 MATLAB 을 배우긴 했고 지금도 MATLAB 을 좋아하긴 하지만 대학에서 MATLAB 을 가르치는 것 자체는 반대하는 입장입니다.

 

위에 밝힌 바대로 MATLAB 은 어마어마한 비용이 들어가는 툴입니다. 정말 방대한 실용적인 툴박스들이 제공되서 편리하긴 하지만 툴 박스 하나 하나의 가격이 만만치가 않습니다. 또한 1년에 한번씩 업데이트를 위한 라이선스 유지 비용도 듭니다.

 

비싼 툴박스는 2천만원이 넘는 것도 있죠~ 가격에 대해서는 아래 글 참조바랍니다.

 

2013/11/07 - [programming language/MATLAB] - MATLAB 구매 가격에 대해 질문하는 분들을 위해…


 

암튼 대학에서 알고리즘을 공부하는데 있어서 MATLAB 을 대체할만한 오픈 소스 프로그램들은 얼마든지 있습니다.

 

제 블로그에서도 종종 소개드리는 Scilab, Octave, Freemat 과 같은 툴들이 있고~ 파이썬을 사용하는 Spyder 같은 프로그램도 있습니다.


 

http://iamaman.tistory.com/category/programming%20language/Octave



http://iamaman.tistory.com/category/programming%20language/SCILAB


 

2012/08/20 - [유틸] - MATLAB 과 유사한 Open Source 프로그램 FreeMat



2013/11/13 - [유틸] - 과학 분석에 사용되는 Python IDE Spyder



2013/11/26 - [컴퓨터일반] - ipython으로 unique 하게 sorting 하기



2014/09/05 - [programming language/Octave] - Windows OCTAVE 3.8 GUI 환경


대학에서는 이런 툴들에 대해 가르쳐야지 MATLAB 을 정식과목으로 채택하면 이건 뭐 학생들한테 크랙 사용하라는 소리 밖에 안 되지 않을까요?

 

대학에서는 MATLAB 만 가르쳐서 학생들이 MATLAB 만 사용할 줄 안다면 이건 매스웍스의 마케팅 전략에 놀아나는 꼴 밖에 안 되고~ 학생들을 MATLAB 의 노예로 만드는 꼴밖에 되지 않는다고 생각되네요.

 

대한민국이 참~~ 크랙 많이 사용하는데~ 운영체제인 윈도우부터 크랙을 사용하다 보니 MATLAB 크랙 사용하는 거야 너무나 당연한 걸로 생각하게 되는 것 같습니다.

 

우리나라가 윈도우 위주의 세상이 된 건, 생각 없는 정부의 소프트웨어 정책을 원망해야겠지만~ MATLAB 교육에 대한 결정권자들은 대학 교수들일거라고 생각되네요. 교수님들이 위에 얘기했던 MATLAB 대체 프로그램들을 적극적으로 교육해야 한다고 생각합니다.

 

지금 위에 털린 연구실 뿐만 아니라 정말 많은 연구실들이 지금도 크랙을 많이들 사용하고 있을 겁니다. 털면 다~~ 털리는거죠 뭐….

 

이제 우리나라도 소프트웨어의 라이선스 정책에 대해 심각하게 생각해 볼 때가 되지 않았나 생각합니다.

 

일단 운영체제부터 리눅스를 주로 활용할 수 있어야 하겠고~ 운영체제를 오픈 소스로 사용하다 보면 자연스럽게 소프트웨어들도 오픈 소스 또는 프리웨어에 관심을 갖게 될 것 같습니다.

 

저도 윈도우만 사용할 때 보다 리눅스를 사용하면서 정말 다양하고 좋은 오픈 소스 또는 프리웨어들에 관심을 갖게 되었고, 지금은 알고리즘을 하는데 있어서는 MATLAB 이 아니어도 딱히 불편함이 없는 상황 입니다.


 

물론 MATLAB 이 없으면 안 되는 상황에서는 MATLAB 을 사서 사용해야겠지만~~ 간단한 알고리즘 몇 개 공부하는데 MATLAB 으로 하는 건…. 파리잡는데~ 대포쏘는 것 같은 느낌이네요. Octave, Scilab 같은 프로그램을 사용할 줄 안다면 회사에서 MATLAB 에 적응하기는 매우 쉬울 걸로 생각되네요~

 

예전에는 윈도우, 오피스, MATLAB 과 같은 프로그램에 대해 대체할만한 프로그램이 없어서 어쩔 수 없었다고 하더라도… 지금은 대체할만한 오픈 소스 또는 프리웨어 프로그램들이 많습니다.

 

과연 지금 대학의 소프트웨어 교육들이 바람직한 것인지… 대학에서의 소프트웨어 교육에 대해 교수님들이 적극적으로 고민해 주셨으면 좋겠네요.


  1. ㄴㅇㄹ 2014.09.20 16:25

    블로그주인님쿨하셔요

  2. 학생요 2014.12.17 16:01

    학생용은 5만원이에요

  3. Daniel Heo 2015.08.31 01:19

    학교에서 MathWorks와 라이센스 계약을 체결해서 무료로 제공하기도 합니다. 저희도 그렇구요. 아마 매트랩 강의가 있는 학교면 거의 다 그러지 않을까 싶네요. 블로그 둘러보니 배울 것이 많은 곳이네요 ㅎㅎ 저도 요즘 드론 프로젝트 하면서 블로그 운영하고 있는데 자주 찾아오겠습니다.

    • 남성 2015.08.31 03:11 신고

      방문해 주셔서 감사합니다. ^^ 학교 컴퓨터 실에서야 당연히 라이센스 계약을 하고 사용하겠죠. 그런데 대학 연구실에서는 그렇지 않은 곳도 많은것 같습니다. 개인도 마찮가지구요. MATLAB 툴박스를 꼭 사용해야 하는것이 아니라면 학생들은 Octave, Python 등을 사용하는게 좋을것 같고 아래 주소에서 소개한 Julia 등과 같은 언어를 사용하는것도 좋을것 같네요.

      http://iamaman.tistory.com/1479

      개인적 경험으로도 MATLAB 만 사용할 때 보다는 위에서 소개한 오픈소스를 사용하면서 실력이 더 늘었다고 생각되네요.

      드론 프로젝트 하신다고 하셨는데~ 재밌겠네요! 좋은 결과 있으시길~

  4. 맷랩사용 2015.09.16 01:08

    뜬금없이 matlab알려주고 이거 알아서 깔라고한다음 그날과제에 matlab으로 푸는걸 내줌 쓰는법도모르는데

    • 남성 2015.09.16 08:18 신고

      대책이 없네요. 학생용을 사서 사용하셔도 되는데 일단 교수한테 오픈소스 사용해서 해도 되냐 물어보는게 좋을것 같네요. 방문해 주셔서 감사합니다.

  5. ㅁㄴ 2015.09.16 17:44

    저도 수업때 내준 매트랩 과제하려고 매트랩 다운받는법 찾다가 들어왔는데요
    오픈소스가 뭔가요?? 빨리 받아서 해야하는데... 답답하네요

    • 남성 2015.09.16 18:35 신고

      오픈소스에 대한 정의는 아래 주소 참조하시기 바랍니다.

      https://ko.wikipedia.org/wiki/%EC%98%A4%ED%94%88_%EC%86%8C%EC%8A%A4

      MATLAB 이 없으시면 octave 나 freemat 을 사용해 보세요. 문법이 거의 유사합니다.

      octave : http://iamaman.tistory.com/1427
      freemat : http://iamaman.tistory.com/639

  6. 공대생 2016.11.03 21:56

    형님. 저는 기계공학과에 다니는 학생인데요. 매트랩을 하려고 합니당. 요즘 회사에서도 그렇고 실무자들이 매트랩없으면 안된다고 해서요. 아직 카티아나 오토캐드밖에 못다루는데요. 요것도 해야한다고 하네요. 그런데 행님, 매트랩 학생용 에디션으로는 안되는겁니깡? octave, freemat은 오픈소스용 수치해석 툴인가요? 일단 이거 쓰고 있으면 될까요? 아니면 돈 좀 주고서라도 학생용에디션 번들까지 55$하던데 요거 얼렁 사서 책 봐야 할까요

    • 남성 2016.11.03 22:23 신고

      음 어떤 분야, 어떤 회사냐에 따라 다를것 같은데... 카티아 오토캐드 등은 기구물 디자인 할 때 쓰지 않나요? 저는 들어는 봤지만 사용해 보지도 할줄 도 모릅니다.
      어떤 분야를 하고 싶은지를 정하고 공부하시는게 좋을 듯 하네요.
      자동차 제어기용 소프트웨어를 하고 싶다면 C 를 할 줄 알아야 하고 임베디드에 대한 지식이 있어야 합니다.
      요즘 자동차 제어기는 MBD(Model Based Design) 로 가려는 추세이므로 Simulink 로 제어기 소프트웨어를 만드는 추세 입니다. 학생용 stateflow 가 있는지 모르겠지만 stateflow 를 할줄 알면 좋습니다.
      Simulink 를 사용한다고 해도 MATLAB 이 기본입니다.

      octave, Freemat 은 MATLAB 과 문법이 굉장히 유사한 툴입니다. MATLAB 스크립트에 대해 공부한다면 그냥 octave, Freemat 을 사용해도 될것 같고 MBD를 하고 싶다면 어쩔수 없이 Simulink, Stateflow 가 들어있는 학생용 MATLAB 을 사서 공부하셔야 할 겁니다.
      대학생이시면 학교 컴터실에 MATLAB, Simulink 등이 많이들 설치되어 있으므로 사용해 보시길 추천 합니다.

  7. OnDraw 2018.10.23 11:06 신고

    이렇게 배운 인력은 나가서도 매트랩을 써야 하지요...

    연구성과를 외부의 다른사람이 전달받아 쓰게 되면 그사람도 매트랩 써야 하구요

Scilab 을 사용하다 보면 변수의 size 가 커지는 경우에는 다음과 같은 메시지와 함께~ stacksize 관련 에러를 접하게 되는 경우가 많은데요~



!--error 17

stack size exceeded!

Use stacksize function to increase it. 




이런 경우에는 scialb console 에 아래 명령어를 통해 stacksize 를 최대로 설정해서 사용해야 합니다.

 

stacksize('max')

 

그런데 위 명령어를 Scilab 을 사용할 때마다 타이핑하는 건 굉장히 귀찮은 일이죠~

 

그래서 저는 MATLAB startup 파일 설정하듯이 Scilab 도 .scilab 또는 scilab.ini 라는 초기 설정 파일을 설정해서 사용합니다.

 

http://help.scilab.org/docs/5.3.3/en_US/startup.html


2013/09/30 - [programming language/MATLAB] - MATLAB 시작 폴더 변경 및 startup.m 파일 설정


 

초기 설정 파일의 위치는 Scilab console 아래 명령어를 타이핑 하여 확인 있습니다.

 

SCIHOME

 

아래 그림과 같이 소문자로 타이핑하면 에러가 납니다. 꼭!! 대문자로 하셔야 합니다.


 

SCIHOME 폴더를 확인 한 후에 저는 다음과 같이 scilab.ini 라는 파일을 하나 만들었습니다. .scilab 파일을 만들어도 상관 없습니다.


C:\Users\ADMINI~1\AppData\Roaming\Scilab\scilab-5.4.1\scilab.ini


 

다음으로~ scilab.ini 파일에 다음과 같이 타이핑했습니다.

 

stacksize('max'); // buffer maximum

cd D:\ ; // working directory to D:\

 

이제 Scilab 을 시작하면 자동으로 위 스크립트가 실행되게 됩니다.



MATLAB 을 비롯한 대부분의 프로그래밍 언어들은 함수를 만들어서 사용할 수 있는데요.

 

MATLAB 과 유사한 수치 분석 프로그램인 Scilab 역시도 함수를 만들어서 사용할 수 있습니다.

 

MATLAB 을 사용해 보셨던 분이라면 Scilab 에서 함수 만들기는 너무나 쉬운데요~

 

함수의 정의는 다음과 같습니다.

 

function [a, b] = funcTest(x)

a=length(x);

b=x.*2;

endfunction

 

함수의 시작에는 MATLAB 과 마찬가지로 function 이라는 키워드를 적어주고~ 함수의 끝에는 endfunction이라고 적어 줍니다.

 

a, b 가 출력이고~ x 가 입력 인자입니다. 인자 들은 쉼표(,) 로 구분해 줘야 합니다. 함수이름은 funcTest 이고 해당 함수를 funcTest.sci 라는 파일 이름으로 적어줬습니다.

 

Scilab 에서는 함수는 보통 sci 확장자로 만듭니다.  


2012/01/12 - [programming language/SCILAB] - SCILAB 간단 사용법


위 함수의 내용은 x 라는 입력에 대해 길이를 구해서 a 에 리턴하고~

 

X 에 2 배를 해서 b 에 출력하는 함수 입니다.




다음으로 위 함수를 이용하는 방법에 대해 설명 드립니다.

 

MATLAB 등에서는 MATLAB path 내에 함수만 있다면 그냥 바로 사용할 수 있는데 Scilab 은 그렇지 않습니다.

 

같은 디렉터리에 위 함수가 있어도 바로 사용할 수 없습니다.

 

바로 사용하려 하면 다음 그림과 같이 Undefined variable: funcTest 라는 에러를 볼 수 있는데~ funcTest () 함수는 말 그대로 정의 되지 않은 함수라는 겁니다.

 

Scilab 에서 함수는 항상 execution 을 해줘야 사용 할 수 있습니다.

 

아래 그림과 같이 세 개 중의 하나를 선택해서 실행 해주면 됩니다.

 

이제 방금 만들었던 funcTest () 라는 사용자 함수가 정상적으로 동작하는 것을 확인 할 수 있습니다.

 

다음으로 console 에서 실행 시키는 게 아닌 다른 실행 파일에서 함수를 사용할 때는 C/C++ 코드에서 include 하듯이 함수 사용 전에 execution 하는 문장을 하나 넣으면 됩니다. exec () 함수를 사용하고~ 다음과 같이 정의 합니다.   

exec(path [,mode])


위 정의에서 path 는 말 그대로 execution 하고자 하는 함수의 파일 path 이고 mode 는 실행 모드를 의미 합니다.

 

같은 폴더 내에 있을 때는 full path 를 적지 않고 아래 실행 예처럼 함수 이름만 적어줘도 무방 합니다.

 

mode 는 그 실행 방법에 따라 8 가지 정도의 옵션이 있더군요.

 

Console 에 그 내용을 표시 할지 말지 --> 로 표시되는 프롬프트를 표시 할지 말지 와 같은 것에 대한 내용인데~

 

저는 주로 옵션을 안 붙이거나 -1을 붙여서 console 창에 안 나오게 하는 편입니다.

 

아래 두 가지 예를 보면 default 옵션에서는 그 내용이 console 에 표시 되지만~ -1 옵션을 붙이면 내용은 표시되지 않는 것을 확인 할 수 있습니다.

 

 

Console 에 결과가 표시 되도록 하기 위해 Ctrl+L 을 눌러서 실행 시켜보면 다음과 같이 정상적으로 실행되는 것을 확인 할 수 있습니다.


아래 주소의 이전 포스팅에서도 소개한바 있지만 SCILAB 은 MATLAB 과 유사한 수치 시뮬레이션 툴입니다.

 

 

2012/08/20 - [유틸] - MATLAB 과 유사한 Open Source 프로그램 FreeMat



2011/03/11 - [MATLAB] - SCILAB



MATLAB 은 상용임에 반해 SCILAB 은 open source 라서 구매 비용이 필요가 없다는 게 굉장한 장점이죠.

 

Scilab 은 MATLAB 과 문법이 유사하긴 하지만 세세한 부분들은 많은 부분들이 다르더군요.

 

오늘은 MATLAB 의 hist() 함수와 유사한 histplot() 함수에 대해 설명 드리려 합니다.

 

MATLAB의 hist() 함수를 사용하면 histogram 을 그릴수도 있고, 출력 변수를 사용하면 그 값들을 변수에 저장 할 수도 있습니다.

 

Scilab 의 histplot() 함수는 출력 변수를 사용할 수는 없고 그냥 histogram 그래프만 그려줍니다.

 

하지만 기본적으로 normalization 적용하기 때문에 PDF(probability density function)을 그릴 때는 더 편리하기도 하더군요. PDF 또는 PMF 를 그리려면 면적이 1이 되도록 정규화를 하는 과정이 들어가야 하는데요~

 

아래 주소에서 MATLAB 을 사용하여 PDF 를 그려본 적이 있는데요~ 정규화 과정을 참조하시길 바랍니다.

 

2011/03/23 - [MATLAB] - MATLAB PDF, CDF, CCDF


2011/03/26 - [MATLAB] - MATLAB Exponential random variable generation


2011/05/05 - [MATLAB] - MATLAB central limit theorem simulation


2011/03/23 - [MATLAB] - Rayleigh random variable 생성


2010/01/03 - [MATLAB] - PDF (Probability Density Function)


 

Scilab 에서의 histplot () 함수 문법은 다음과 같습니다.

 

histplot(n, data, <opt_args>)

histplot(x, data, <opt_args>)

 

n 은 histogram 의 축의 개수를 설정할 때 사용하고 x 는 축을 벡터로 구분할 때 사용합니다.

 

그리고 opt_args 은 선 색이나 normalization 유무와 같은 옵션을 설정할 때 사용합니다.

 

간단하게 예를 들어보죠~

 

1,2,… 10 의 정수를 10칸에 걸쳐서 histogram 을 그리는 예제 입니다.

 

x=1:10

histplot(10,x)

 

 

그림을 보면 정규화를 했기 때문에 y 축의 최고값이 0.11 정도 된다는 것을 알 수 있습니다. 이는 1~10 을 n+1 개 칸 즉 11개 칸으로 축을 나눈 후 정규화를 해서 축 간 범위는 0.9 씩이 되고 y 축 값은 1/9 = 0.1111 이 되는 것 입니다.

 

다음으로 칸을 0.5:1:10.5 로 줘보죠.

 

figure

histplot(0.5:1:10.5,x)

 

 

간격을 1 씩 줬으므로 정규화 결과 y 축 값이 정확히 0.1이 됨을 확인 할 수 있습니다.

 

마지막으로 MATLAB 의 hist() 함수와 같이 정규화를 하지 않도록 해보죠. 아래 빨간색 친 부분과 같이 normalization 옵션을 %f (False) 로 주면~

 

figure

histplot(0.5:1:10.5,x, normalization=%f)

 

아래 그림처럼 정규화 하지 않은 histogram 이 구해집니다.


 


평소 오픈 소스 프로그램을 즐겨 사용해 보곤 하는데~

 

오픈 소스 프로그램 중에는 정말 훌륭한 프로그램들이 많다는 생각을 많이 합니다.

 

아래 포스팅에서 MATLAB 과 유사한 프로그램들로 SCILAB 과 Octave 를 소개해 드린 바 있는데요. 



2011/04/17 - [유틸] - GNU Octave 를 이용해 보자


2011/03/11 - [MATLAB] - SCILAB


2012/01/12 - [컴퓨터일반] - SCILAB 간단 사용법



 

오늘은 MATLAB 과 유사한 또 다른 오픈 소스 프로그램인 FreeMat 에 대해 소개해 드리려 합니다.

 

일단 FreeMat 의 공식 홈피는 아래 주소와 같습니다.

http://freemat.sourceforge.net/

 

메인 화면에 Downloads 라고 쓰여진 바로 밑에 다운로드 링크가 있으니깐~ 다운로드 받아서 한번 사용해 보세요~

 

윈도우, 리눅스, 맥 에서 다 돌아가는군요.

 

저는 이런 거 발견하면 일단 한번씩은 꼭 깔고 보는데요~

 

다음과 같이 생겼습니다.

 

기본적으로 생긴 건 MATLAB 과 굉장히 유사하더군요. 그리고 위에 예제와 같이 기본적인 함수라던가 복소수 처리 등도 같습니다.

 

가격으로 보나 툴박스로 보나 MATLAB 과 비교는 무리지만~ 기본적인 함수들만을 이용할 때는 쓸 만 하다고 생각합니다.

 

MATLAB 이 안 깔린 컴퓨터에서는 이런 프로그램 깔아서 써도 괜찮을 것 같군요.

 

아래는 에디터에서 코딩 한번 해 본건데요.

 

보시다시피 확장자도 .m 이더군요. MATLAB 과 약 95 프로 호환된다고 홈피에 써 있네요.

 

위의 코드를 실행해 봤습니다.

 

간단하게 1차원 곡선과 FFT 한번 해 본건데 이 정도만 볼만 하다고 생각되네요.

 

심플하고 괜찮아 보이죠?

 

써 보니깐 굉장히 가벼워서 좋은 것 같네요.

 

MATLAB 툴 박스를 주로 이용하시는 게 아니라면 이런 오픈 소스 프로그램을 써 보시는 것도 좋을 것 같군요.

 

이런 프로그램들은 중고등학생들도 많이들 이용했으면 좋겠네요.

 

수학이나 과학 공부하는데 굉장히 도움이 많이 될 거라고 생각됩니다.


  1. qubick 2012.09.13 02:23

    c언어로 직접 그래프함수 구현해서 쓰다가 머리가 너무 아파 시뮬레이션 프로그램 찾아 돌아다니길 한참... 매트랩이 너무 무거운 프로그램이라 고민하다가 우연히 좋은 프로그램 정보 얻어갑니다 설치도 금방, 가볍고 잘 돌아가고 아쉬울 게 하나 없네요! 정말 도움 많이 되는 포스팅이었습니 :)

    • 남성 2012.09.13 10:12 신고

      도움이 되었다니 다행이네요~ 방문해 주셔서 감사합니다. ^^

  2. paksungwoo@naver.com 2013.04.18 08:51

    와 이런게 있군요. C언어는 너무 골치아파서 하기 힘든데 매트랩은 너무 비싸서 엄두가 안나서 쓰지 못하고;;

    이래저래 근심이었는데 한 번 써봐야 겠습니다.

    • 남성 2013.04.18 09:00 신고

      방문해 주셔서 감사합니다. ^^
      매트랩의 툴박스를 사용해야 하는게 아니라면 이런 공짜 프로그램을 사용하는것이 좋다고 생각됩니다.

  3. 이세원 2017.03.22 23:29

    matlab을 공부하려고 하다가 프리멧을 알게되서 왔는데요 스크립트랑 펑션이 있는데 펑션을 어떻게 키는지 알려주세요 감ㄱ사합니다^^

    • 남성 2017.03.23 08:23 신고

      함수 사용은 아래 글 참조해 보시기 바랍니다.

      http://iamaman.tistory.com/122

상용인 MATLAB 을 대체할 만한open source freeware 를 찾던 중 가장 맘에 드는 프로그램이 scilab 이라고 판단된다.

 

scilab 은 MATLAB 과 마찬가지로 매트릭스 연산을 기본으로 하며 문법도 굉장히 유사하다.

 

scilab 의 실행은 두 가지 방법으로 할 수 있다. (윈도우에서 실행 시)

 

  • WScilex.exe 를 통해 실행 할 경우에는 일반적인 graphics, interactive 콘솔이 열리게 된다. (아래 그림 참조)

 

 

  • Scilex.exe 를 통해 실행 시키면 non-graphics 콘솔을 통해 실행하게 되며 윈도우 터미널에서 바로 열리게 된다. (아래 그림 참조)

 

 

MATLAB 과 마찬가지로 배치파일을 통해 스크립트를 실행 할 수도 있으며 –f 옵션을 줘서 다음 그림 예처럼 실행 할 수 있다.

 

 

위 그림에서 실행 시킨 D:\test_file.sce 파일의 내용은 아래와 같이 간단하게 곱하기를 하는 스크립트이다.

 

 

위 스크립트 화면에서 볼 수 있는 바와 같이 파일의 마지막에는 scilab을 종료 할 수 있도록 quit() 명령을 써 주곤 한다.

 

윈도우 cmd 를 통해 실행되게 하기 위해서 Scilex.exe가 들어 있는 폴더를 환경변수의 path 에 추가한 후 이용하는 것이 좋을 것 같다.

 

 

스크립트 파일은 .sce.sci라는 확장자로 저장한다.

 

.sce 에는 실행 가능한 스크립트나 함수 등을 저장하고 함수만 따로 저장하거나 라이브러리를 만들 때는 .sci 로 저장 한다.

 

 

Consol 에서 editor 나 Command history 창 등을 docking 할 때는 editor 등의 파란색 표시 부분을 클릭 후 드래그 하여 SCILAB consol 프로그램 위에 놓으면 된다.

 

 

 

un-dock 을 할 때는 아래 그림의 화살표 친 부분을 클릭하면 된다.

 

 

 

MATLAB 을 사용할 줄 아는 사람이라면 SCILAB 은 금방 사용할 수 있을 것이라고 생각된다.

 

여기서는 MATLAB 과 다른 몇몇 키워드 및 특징에 대해 소개 한다.

 

내용

MATLAB

SCILAB

pi

pi

%pi

복소수i

i

%i

자연수

exp(1)

%e

주석처리

%

// , 여러 줄 주석처리는 /* ~ */

벡터 또는 매트릭스의 마지막 인덱스

end

$

매트릭스 크기 변경 함수

reshape()

resize_matrix()

 

 

향후에 Simulink 와 비슷한 Xcos 에 대해서도 공부해 볼 필요가 있을 것 같다.


  1. 김진우 2012.04.27 17:09

    안녕하세요. Scilab에 많은 관심을 가지고 계셔서 반갑습니다. 혹 scilab에 관한 교육 및 보급확산에 관심 있으시면www.equalis.com을 방문하시어 scilab의 professional 한 제품 체험을 권합니다. 방문 후 관심을 저와 나누어 주시면 더욱 고맙겠습니다. 제 연락처는 jwkim302@gmail.com, 김진우(010-5125-3614) 이며, Equalis 한국 총판을 하고 있는 데 님 같은 고수분들 모시고 얘기듣고 싶습니다. 감사합니다.

MATLAB 을 대체 할 만한 공학 프로그램으로 이전에 scilab 을 소개한 적이 있습니다.

   

2011/03/11 - [MATLAB] - SCILAB


오늘은 또 다른 오픈소스 프로그램으로서 MATLAB 과 문법이 굉장히 유사한 GNU Octave 에 대해 소개 합니다.

 

일단 다음 페이지에서 다운로드 가능 합니다.

 

http://www.gnu.org/software/octave/download.html

 

위 주소에 가 보시면 GNU 프로그램이니 만큼 source code 뿐만이 아니라 Binary 파일을 제공해 주는군요.

 

Linux , Mac OS X, Windows , Sun Solaris …. 와 같이 널리 사용되는 운영 체제에 대해서는 binary 파일을 제공해 주니깐 자신의 운영 체제에 맞게 다운로드 후

 

설치 하시면 되겠습니다. 


설치 후 실행을 해 보니 다음과 같은 창이 뜨네요. 

 

문법이야 MATLAB 이랑 너무 비슷해서 MATLAB 을 사용할 줄 아신다면 그냥 바로 이용할 수 있습니다.

 

설치를 하게 되면 pdf 및 html 로 약 700 page 에 달하는 document 가 제공되는데요.

 

document도 굉장히 잘~ 정리가 돼서 보기 좋군요. 




간단하게 sine 그래프 하나 그려 볼까요.

 

 

특이 한 점은 plot() 에 세미 콜론을 안 붙이니깐 위 코드에서 보는 바와 같이 warning 이 뜨는군요.

 

그래프는 아래 그림처럼 나오네요. 

 

MATLAB 그래프에 비해 좀 투박한 느낌이 들긴 하지만, 공짜인데 이 정도면 훌륭하다고 생각되네요.

 

document 를 쭉~ 훑어 보니…. 이거 완전 공짜 MATLAB 이잖아~~ 하는 생각이 드네요.

 

너무 좋군요.


오늘은 괜찮은 공학용 프로그램 하나 소개해 드리겠습니다.

 

바로 제목에 있는 SCILAB 이라는 프로그램인데요……


이 프로그램이 뭐냐 하면 MATLAB 하고 굉장히 유사한 공학용 프로그램 입니다.

 

MATLAB 은 뭐 툴 박스 하나만 해도 몇 백만원씩 하는 고가의 프로그램이라 학교나 회사 등에서 사주지 않는 이상은 개인들이 사기에는 부담스러운 프로그램입니다.

 

반면에 SCILAB은 완전 공짜의 프로그램 입니다. 공짜라고 해서 허접하거나 하지도 않군요.

 

익숙해 지기만 하면 MATLAB 대용으로도 써도 괜찮겠다는 생각이 듭니다.


프로그램은 http://www.scilab.org/ 에서 다운 받을 수 있습니다. 현재 5.3.1 버전까지 나와 있군요.

 

운영 체제는 Linux, Windows, MAC os X 지원하구. MATLAB 으로 작성된 M 파일을 SCILAB문법으로 변환해 주기도 합니다.

 

문법은 약간 써 본 결과 MATLAB 이랑 매우 흡사하다는 생각이 들었습니다. MATLAB 에 익숙한 사람들은 금방 익힐 수 있을 것 같네요.

 

우리나라에 그리 많은 사용자가 없어서 한글 책 등이 거의 없다는 게 약간 아쉽군요.

 

책을 찾아보니 Scilab 으로 하는


과학기술컴퓨팅 상세보기


이란 책이 한 권 나오네요.

 


목차를 보니 SCILAB 의 사용법에 대해 정리된 책 같네요. 나중에 서점에 들러서 한번 보고 살지 말지 결정 해야겠네요.

 

영어도 괜찮다면 SCILAB 홈페이지에 http://www.scilab.org/support/documentation/tutorials 튜토리얼도 있고,

 

http://www.scilab.org/support/documentation/manuals 에 매뉴얼도 있습니다.

 

필요하신 분들은 적극적으로 이용하는 것도 좋을 것 같습니다.

 

SCILAB 을 이용해서 간단하게 FFT 를 해 보면 ~

 

 

 

아!! 복소수를 나타내는 I 또는 j 는 MATLAB 과는 다르게 %i 로 표현 합니다.

 


  1. 은토 2012.04.21 17:29

    죄소합니다 한 가지 여쭈어 볼 게 있는데요 scilab에서 txt파일을 여는 게 가능한가요?
    혹시 함수는 어떻게 되는지.....찾아봐도 안나오네요ㅠㅠ 인턴십할때 MATLAB 쓰다가 끝나고 집에서 혼자 할려니까 scilab 추천받아서 다운받았는데.....

    • 남성 2012.04.21 18:13 신고

      SCILAB help 를 찾아보니깐 mgetstr() 이나 read() 같은 함수를 사용하시면 될것 같네요. 위 함수의 사용법에 대해서는 help 문을 참조 하시면 될 것 같습니다.

      그냥 숫자 형태의 매트릭스가 저장되어 있는 상태에서 읽어들일 거면 read() 함수를 사용하시는게 좋을것 같구요. 그냥 일반적인 텍스트를 읽어들이는거면 mgetstr() 를 쓰는게 좋을것 같네요.

      방문해 주셔서 감사합니다.

+ Recent posts