2016년 6월 27일 월요일

GNU Octave

GNU Octave

GNU Octave
Gnu-octave-logo.svg
Octave Sombrero.svg
개발원 John W. Eaton
초판 1988년(1988)[1]
최신판 4.0. 1 / 2016년 3월 23일(2개월 전) (2016-03-23)
프로그램 언어 C++
대응 OS 크로스 플랫폼
종별 수치 해석 소프트웨어
라이센스 GNU General Public License
공식 사이트 www.gnu.org/software/octave/
템플릿을 표시

GNU Octave는, 주로 수치 해석을 목적으로 한 고레벨 프로그램 언어이다.Octave는 선형 및 비선형 문제를 수치적으로 풀기 위한 커멘드 라인·인터페이스를 제공한다.또, MATLAB과 거의 호환성이 있는, 수치 실험을 행하기 위한 프로그램 언어로서 사용할 수 있다. Octave는, GNU 프로젝트의 하나로 GNU General Public License의 조건아래의 프리 소프트웨어이다. GNU Octave와 Scilab은, MATLAB의 오픈 소스 대체품의 하나이다. 다만, Octave는, Scilab보다 MATLAB과의 호환성 유지에 중점을 두고 있는[2] [3] [4] [5] [6] [7].

목차

개발의 경위

개발이 시작된 것은 1988년즈음이다.당초는 화학반응기 설계의 수업으로 사용하기 위해서 만들어졌지만, 그 앞으로 1992년부터, 존・이튼(John W. Eaton)이 개발을 시작했다.그에 의한 최초의 알파판의 릴리스는 1993년 1월 4일로, 정식판(ver. 1.0)은 다음 해, 1994년 2월 17일에 릴리스 되었다.2007년 12월 21일에 버전 3.0이, 2015년 5월 29일에는 버전 4.0이 릴리스 되었다.

Octave라는 이름은, 이튼의 지도교관이며, 리지라도 가볍게 써 주는 개산의 계산(back-of-the-envelope calculation)이 빨랐던 원오리건 주립 대학 교수의 옥타브・레베슈피르(Octave Levenspiel, 반응 공학)에 연관되는[8].

당초의 목적인 개인적인 계산기로서의 이용에 가세해 Octave는 학술적 및 공업적인 용도에도 사용되고 있다.예를 들면 미국 피츠버그・스파콘퓨팅・센터(Pittsburgh supercomputing center)에서는 대규모 병렬 계산에 의한 사회 보장 번호의 공격에 대한 취약성 검증에, Octave를 사용하고 있는[9].

유저 인터페이스는 오랫동안 CUI뿐이었지만, 3.8. 0에서는 GUI가 탑재된[10].

특징

  • MATLAB 호환의 프로그램 언어의 interpreter를 실장하고 있어, 또 GUI의 개발 환경이 갖추어져 있다.
  • C++STL를 이용하고 있다.
  • Mex-file 및 Oct-file이라고 불리는 구조를 이용하고, C/C++언어로 기술된 자작 함수에 의해 Octave를 확장 가능하다.
  • Octave 4.0으로부터 그래픽은 gnuplot로부터 OpenGL graphics with Qt widgets에 변경되었다.
  • Octave는 행렬 계산으로 BLAS를 호출하고 있기 때문에 고속이고 신뢰성이 높다.
  • Octave 4.0으로부터 OpenMP가 디폴트로 유효하게 되어 있어 시스템에 OpenMP가 실장되고 있는 경우, 계산의 고속화를 기대할 수 있다.

계산기 언어로서의 Octave

Octave를 조작하기 위한 명령 계통은, 계산기 언어이기도 하다.Octave는 C언어와 같은 구조화 언어이며, C언어의 표준 라이브러리에 포함되는 많은 함수가 Octave에서도 실장되고 있다.또 UNIX시스템 콜도 몇개인가 이용할 수 있는[11].그러나 함수 호출때의, 당겨 수치의 참조 인도는 서포트되어 있지 않은[12].

Octave 언어로 쓰여진 프로그램은, 함수 호출의 줄로 구성되는 스크립트이다.그 문법은 행렬 계산이 기본이며, 스크립트에 대하고는 행렬 계산의 연산자가 다수 이용할 수 있다.다종 다양한 데이터 구조를 이용할 수 있는 것 외, 3.2이후의 버전으로는, 객체 지향 프로그래밍 기능이 부가되었다.

Octave의 문법은 MATLAB의 것과 매우 잘 닮아 있어 조금 주의해 프로그래밍 하는 것으로 Octave와 MATLAB의 양쪽 모두로 실행할 수 있는 스크립트를 쓸 수 있는[13].

Octave는 GNU General Public License에 의해서 공개되고 있기 때문에, 그 개변, 복제, 이용은 자유로운[8].Octave는 많은 UNIXUnix계플랫폼, Mac OS X, Windows로 실행할 수 있는[14].

함수명, 변수명의 보완

대화적으로 실행중의 Octave의 커멘드 라인으로 탭을 입력하면, 함수명, 변수명, 파일명의 입력을 보완하는(Bash탭 보완(en)과 같은 기능).그 시점에서 커서의 직전에 입력되고 있는 텍스트를 보완한다.

역사 기능

대화적으로 실행중의 Octave로는, 그때까지 입력된 커멘드 라인이 보존되고 있어 필요에 따라서 수정해 재실행할 수 있다.

데이터 구조

Octave로는 유저가 데이터 구조를 어느 정도 정의할 수 있다.예를 들어 스칼라, 행렬, 문자열의 변수를 가지는 구조체를 이하와 같이 해 정의할 수 있다.

 octave:1> x.a = 1; x.b = [1, 2; 3, 4]; x.c = "string"; octave:2> x.a ans =  1 octave:3> x.b ans =     1   2    3   4  octave:4> x.c ans = string octave:5> x x = {   a =  1   b =       1   2      3   4    c = string } 

조건 판정의 쇼트 컷

Octave로 조건 판정에 사용되는 논리 연산의 2항연산자, '&&' 및'||'가 평가될 때는, 합선 평가를 한다(C언어의 경우와 같이).한편, 조건 판정에'&' 및'|'연산자를 사용했을 경우는 합선 평가는 행해지지 않는다.

인크리먼트 및 감소 연산자

Octave에는 C언어와 같은'++' 및'--'연산자가 있어, 역시 C언어와 같게 변수의 전 및 뒤로 둘 수 있다.변수치의 증감 후에 대입을 실시하는'+=' 및'-='연산자도 있다.

Unwind-protect

Octave로는 LISP의'unwind_protect'[15]를 실장하고 있어, 거기에 따른 예외 처리를 기술할 수 있다.unwind_protect 블록은 Octave로는 이하와 같이 쓰여진다.

 unwind_protect    body unwind_protect_cleanup    cleanup end_unwind_protect 

Octave로는 일반적으로, 블록의 종단은'end'키워드로 나타나는(MATLAB과 호환이다)가, 'end_block'에서도 나타내 보일 수 있다.'unwind_protect'블록에서도'end'에 가세해'end_unwind_protect'를 사용할 수 있다.

unwind_protect의 cleanup부는, 항상 실행된다.body부에서 예외가 발생했을 경우는, 그 시점에서 cleanup이 실행되어'unwind_protect'블록의 나머지의 부분이 평가될 것은 없다.

Octave로는 다른 예외 처리도 사용할 수 있다(MATLAB과의 호환성을 갖게하기 위해).

 try    body catch    exception_handling end 

이'try'와'catch'를 사용하는 예로는'unwind_protect'블록과 달라, 예외가 body부에서 발생했을 때에 마셔 exception_handling이 실행된다.또 exception_handling의 실행 후는, 'rethrow( lasterror )'문장이 exception_handling부에 기술되어 있지 않은 한은, 'try'블록의 예외 발생 장소 이후의 부분이 평가될 것은 없다.

개수가 가변의 인수

Octave로는 함수의 인수에 대해서, 그 개수의 상한을 지정하는 일 없이 가변으로 해둘 수 있다.인수가 0개 이상인 것을 지정하려면 , varargin를 인수로서 지정한다.varargin는, 인수 리스트의 마지막에 두는지, 또는 유일한 인수로서 지정한다.

 function s = plus (varargin)    if (nargin==0)       s = 0;    else       s = varargin{1} + plus (varargin{2:nargin});    end end 

개수가 가변의 돌아가 값

Octave의 함수는, varargout을 사용하는 것으로 돌아가 값의 수가 실행시에 정해지도록(듯이) 기술할 수 있다.

 function varargout = multiassign (data)    for k=1:nargout       varargout{k} = data(:,k);    end end 

C++와의 통합

C++소스 프로그램중에서 직접, Octave의 함수를 부를 수 있다.이하의 예로는, rand([10,1])그렇다고 하는 Octave의 함수 호출을 C++의 프로그램중에서 가고 있다.

 #include <octave/oct.h> ... ColumnVector NumRands(2); NumRands(0) = 10; NumRands(1) = 1; octave_value_list f_arg, f_ret; f_arg(0) = octave_value(NumRands); f_ret = feval("rand",f_arg,1); Matrix unis(f_ret(0).matrix_value()); 

MATLAB과의 호환성

Octave는, MATLAB과의 호환성을 주로 목표로 하고 있어 MATLAB의 기능의 대부분을 Octave도 가지고 있다.또 MATLAB을 위해서 쓰여진 프로그램도 수정하지 않고 동작하는 것이 많다.

  1. 행렬을 기본의 데이터 형식으로 하고 있다
  2. 복소수에 대응
  3. 강력한 build-in함수와 라이브러리를 가진다
  4. 유저 정의 함수에 의해서 확장 가능

MATLAB과 Octave의 상이점에 대해서는, 오피셜・사이트의 FAQ에 정리하고 있는[16]이, 이하와 같은 것이 있다.

  1. 줄머리에%외에#를 두어도, 그 행을 코멘트로 할 수 있다
  2. ++, --, +=, *=, /=등의 C언어의 연산자를 사용할 수 있다
  3. [1:10](3)등과 같이, 변수(인스턴스)를 생성하지 않아도, 배열의 요소를 참조할 수 있다
  4. '외에,"를 사용해도 문자열을 정의할 수 있다

관련 항목

각주

  1. ^"Frequently asked questions about Octave (with answers)"(영어). 2011년 2월 14일 열람.
  2. ^ Trappenberg, Thomas (2010). Fundamentals of Computational Neuroscience. Oxford University Press. p. 361. ISBN 978-0-19-956841-3. 
  3. ^ Muhammad, A; Zalizniak, V (2011). Practical Scientific Computing. Woodhead Publishing. p. 3. ISBN 978-0-85709-226-7. 
  4. ^ Megrey, Bernard A.; Moksness, Erlend (2008). Computers in Fisheries Research. Springer Science & Business Media. p. 345. ISBN 978-1-4020-8636-6. 
  5. ^ Kapuno, Raul Raymond (2008). Programming for Chemical Engineers Using C, C++, and MATLAB. Jones & Bartlett Publishers. p. 365. ISBN 978-1-934015-09-4. 
  6. ^ Herman, Russell L. (2013). A Course in Mathematical Methods for Physicists. CRC Press. p. 42. ISBN 978-1-4665-8467-9. 
  7. ^ Wouwer, Alain Vande; Saucez, Philippe; Vilas, Carlos (2014). Simulation of ODE/PDE Models with MATLAB□, OCTAVE and SCILAB: Scientific and Engineering Applications. Springer. pp. 114□115. ISBN 978-3-319-06790-2. 
  8. ^ a b Eaton, John W. "About Octave". 2009년 6월 28일 열람.
  9. ^ Social Security Number Vulnerability Findings Relied on Supercomputing HPCwire, July 8, 2009.
  10. ^말 오카 요코(2014년 1월 6일). " 「GNU Octave 3.8. 0」릴리스, 마침내 GUI를 탑재". SourceForge.JP Magazine. http://sourceforge.jp/magazine/14/01/06/152000 2014년 2월 10일 열람. 
  11. ^"GNU Octave - Controlling subprocesses"(2008년 11월 14일). 2009년 1월 28일 열람.
  12. ^"GNU Octave". 2009년 1월 28일 열람.
  13. ^ "FAQ: MATLAB compatibility". 2009년 7월 4일 열람.
  14. ^ "FAQ: Getting Octave". 2009년 7월 4일 열람.
  15. ^ CLHS: Special Operator UNWIND-PROTECT Common Lisp Hyper Spec의 사이트에서의 해설(영어)
  16. ^ How is Octave different from Matlab?호환성에 관한 FAQ

참고 문헌

외부 링크

일부를 제외하고, 모두 영어의 사이트이다.

This article is taken from the Japanese Wikipedia GNU Octave

This article is distributed by cc-by-sa or GFDL license in accordance with the provisions of Wikipedia.

Wikipedia and Tranpedia does not guarantee the accuracy of this document. See our disclaimer for more information.

In addition, Tranpedia is simply not responsible for any show is only by translating the writings of foreign licenses that are compatible with CC-BY-SA license information.

0 개의 댓글:

댓글 쓰기