GNU 옥타브

위키백과, 우리 모두의 백과사전.
이동: 둘러보기, 검색
GNU 옥타브
GNU Octave
Gnu-octave-logo.svg
Octave.activities.png
GNU 옥타브 스크린샷
개발자 존 W. 이튼
발표일 1988년
프로그래밍 언어 C++
플랫폼 크로스 플랫폼
언어 19개 언어
종류 과학 연산
라이선스 GPL
웹사이트 gnu.org/software/octave

옥타브(Octave)는 수치해석용 자유 컴퓨터 소프트웨어로서, MATLAB과 호환성이 높다. 옥타브는 GNU 프로젝트의 하나이다. 옥타브는 매스매티카같은 컴퓨터 대수 체계가 아니라 과학적 계산을 위한 도구이다.

역사[편집]

1988년에 시작되었다. 처음에는 화학반응기의 설계 과목에 대한 지침서가 되길 기대했었다. 1992년 존 W. 이튼(John W. Eaton)이 실질적인 개발을 시작하였으며, 최초의 알파 배포본은 1993년 1월 4일이 나왔으며, 1994년 2월 17일에는 정식버전 1.0이 배포되었다. 2010년 5월 현재 권장버전은 3.2.4이다.

이름은 음악의 옥타브와 아무런 관련이 없다. 옥타브란 이름은 특정 수치계산 문제의 좋은 근사치를 빨리 내놓는 것으로 유명했던 초기 개발자들 가운데 한 명인 옥타브 교수의 이름에서 따온 것이다.

기술적인 상세설명[편집]

  • 기본적으로 matlab과 동일한 문법을 가지고 작성된다.
  • 옥타브는 STL 라이브러리를 사용한 C++로 쓰여졌다.
  • 옥타브는 옥타브언어를 해석하는 해석기를 갖고있다.
  • 옥타브 자신은 동적으로 로드할 수 있는 모듈을 사용해서 확장할 수 있다.
  • 옥타브 해석기는 gnuplot과 Grace software와 연계해서 표와 그래프, 차트를 만들 수 있고, 그것들을 저장하거나 인쇄할 수 있다.

프로그램언어로서의 옥타브[편집]

옥타브 언어는 인터프리트 형식의 프로그래밍 언어다. C언어처럼 구조체적 프로그래밍 언어이며 많은 일반적인 C 표준 라이브러리 구조체를 지원하고 유닉스 체계의 call과 함수를 지원하도록 확장될 수 있다. 그러나 주소를 이용한 변수참조는 불가능하다.

옥타브 프로그램은 함수요청이나 스크립트의 목록으로 구성된다. 언어는 행렬에 근거하며 행렬 연산용의 다양한 함수를 제공한다. 옥타브는 객체지향 프로그램은 아니지만, 자료 구조체를 지원한다.

문법체계는 매트랩과 매우 닮았으며 신중하게 스크립트를 프로그램하면 옥타브와 매트랩에서 함께 실행될 수 있다. 그러나 세부적인 명령어 특히 플로팅관련은 gnuplot에 전적으로 의지하기 때문에 matlab과 차이를 피할 수 없다. 실제로 octave를 이용한 그래프작성은 gnuplot의 명령에 대한 지식이 필요하며 gset 또는 __gnuplot_set__의 함수를 이용하여 gnuplot에 직접 전달하여야 한다.(버전 2.1.73에서)

옥타브가 GNU GPL 아래에서 만들어졌기 때문에, 자유롭게 복사하여 사용될 수 있다. 프로그램은 유닉스와 유닉스 계열 운영체계에서뿐 아니라 마이크로소프트 윈도 운영 체제에서도 실행된다. 현재 윈도에 설치할 수 있는 버전은 시그윈을 이용하는 것과 시그윈 없이 독립적으로 윈도 시스템에 설치하는 방법이 있는데 버전 2.1.73에서는 시그윈이 없는 상태에서는 최소한의 시그윈 시스템을 구축하는 식으로 설치한다. 두 경우 모두 한글로 된 파일이름이나 변수의 사용에 문제가 있어 영문으로 된 디렉터리에 접근하는 것이 안전한다.

주목할 만한 특징들[편집]

명령어와 변수명 완성[편집]

탭 완성(TAB completion)을 지원한다. 즉, 명령 라인에서 처음 몇 글자만 입력한 상태에서 탭(TAB) 문자를 입력하면 입력된 글자 시작이 일치하는 변수와 함수, 파일 이름을 완성한다.

명령어 기록[편집]

인터렉티브 모드로 실행할 때, 옥타브는 기존에 입력한 명령어를 내부 버퍼에 저장하고 있으며 이렇게 기록된 명령어는 나중에 편하게 불러서 다시 쓸 수 있다.

자료 구조[편집]

옥타브는 몇가지 자주 사용하는 자료구조를 지원한다. 다음은 그 예이다.

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