GNU 옥타브
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
GNU 옥타브는 1988년 시작된 프로젝트로, 수치 해석 계산을 위한 고급 프로그래밍 언어이자, MATLAB과 높은 호환성을 갖춘 자유-오픈 소스 소프트웨어이다. 옥타브는 C++로 작성되었으며, 인터프리터를 사용하여 옥타브 스크립팅 언어를 실행하고, GUI를 포함한 다양한 사용자 인터페이스를 제공한다. MATLAB과의 문법적, 함수적 호환성을 위해 노력하며, 학술 연구 및 산업 분야에서 널리 사용된다.
옥타브 프로젝트는 1988년경에 시작되었으며, 초기에는 화학 반응기 설계 강좌의 부속물로 의도되었다.[5] 1992년에 존 W. 이튼(John W. Eaton)이 본격적인 개발을 시작하여, 1993년 1월 4일에 최초의 알파 버전을 배포했고, 1994년 2월 17일에 정식 버전 1.0을 배포했다.[6] 2024년 6월 7일, 최신 버전인 9.2.0이 출시되었다.[6]
2. 역사
옥타브는 초기 목적 외에도 학술 및 산업적 용도로도 사용되고 있다. 예를 들어 미국 피츠버그 슈퍼컴퓨팅 센터에서는 대규모 병렬 계산을 이용해 사회 보장 번호 공격에 대한 취약성 검증에 사용하고 있다.[52]
오랫동안 문자 사용자 인터페이스(CUI)만 지원했지만, 3.8.0부터 그래픽 사용자 인터페이스(GUI)가 탑재되었다.[53]
2. 1. 개발 역사
GNU 옥타브는 1988년경부터 개발이 논의되기 시작했다. 처음에는 화학 반응기 설계 강좌에서 사용할 목적으로 만들어졌다.[5] 1992년에 존 W. 이튼(John W. Eaton)이 본격적으로 개발을 시작했다. 최초의 알파 릴리스는 1993년 1월 4일에 나왔고, 1994년 2월 17일에 버전 1.0이 출시되었다.[6]
이 프로그램의 이름은 주 저자의 전 교수였던 옥타브 레벤스필(Octave Levenspiel)의 이름을 따서 지어졌다. 레벤스필은 빠른 개략적인 계산을 수행하는 능력으로 유명했다.[7]
시간 | 내용 |
---|---|
1988/1989 | 최초 논의 (책 및 소프트웨어) |
1992년 2월 | 개발 시작 |
1993년 1월 | 웹 뉴스 (버전 0.60) |
1994년 2월 | 첫 출판 (버전 1.0.0 ~ 1.1.1) |
1996년 12월 | 두 번째 출판 (버전 2.0.x) 윈도우 포트 포함 (Cygwin) |
2007년 12월 | 버전 3.0 출판 (중요한 이정표) |
2015년 5월 29일 | 버전 4.0.0 (안정적인 GUI 및 OOP를 위한 새로운 구문) |
2019년 3월 1일 | Octave 5.1.0 출판 (QT5 권장, Qt 4.8 최소), hiDpi 지원 |
2020년 11월 26일 | Octave 6.1.0 출판 (QT5 권장, Qt 4.x는 7에서 제거 예정) |
2022년 4월 6일 | Octave 7.1.0 출판 (QT5 권장), 향상된 그래픽 백엔드 및 MATLAB 호환성 |
2023년 3월 7일 | Octave 8.1.0 출판, 향상된 그래픽 백엔드 및 MATLAB 호환성 |
2024년 3월 14일 | Octave 9.1.0 출판, 일반, MATLAB 호환성, 그래픽 개선. |
2024년 6월 7일 | Octave 9.2.0 출판, 버그 및 GUI 수정. |
2. 2. 명칭의 유래
옥타브라는 이름은 주 저자의 지도교수였던 전 오리건 주립 대학교 교수 옥타브 레벤스필(반응 공학)에서 유래했다.[51]3. 기술적 특징
옥타브는 C++(C++)와 표준 템플릿 라이브러리(STL)를 사용하여 작성되었다.[1] 옥타브는 옥타브 스크립팅 언어를 실행하기 위해 인터프리터를 사용한다.[1] 동적으로 로드할 수 있는 모듈을 사용하여 확장할 수 있다.[1] 옥타브 인터프리터는 플롯, 그래프 및 차트를 생성하고 저장하거나 인쇄하기 위해 OpenGL 기반 그래픽 엔진을 갖추고 있거나, gnuplot을 사용할 수도 있다.[1] 행렬 계산에서 BLAS(BLAS)를 호출하므로 빠르고 신뢰성이 높다.[2] Octave 4.0부터 OpenMP가 기본적으로 활성화되어 있어, 시스템에 구현되어 있는 경우 계산 속도 향상을 기대할 수 있다.[2]
4. 프로그래밍 언어로서의 옥타브
옥타브 언어는 인터프리트 형식의 프로그래밍 언어이다. C 언어와 같은 구조적 프로그래밍 언어이며, 많은 일반적인 C 표준 라이브러리 함수를 지원하고, UNIX 시스템 호출 및 함수도 지원한다.[23] 함수 인수가 불필요한 중복을 피하기 위해 copy-on-write 방식으로 처리되지만, 참조에 의한 인자 전달은 지원하지 않는다.[24]
옥타브 프로그램은 함수 호출 목록 또는 스크립트로 구성된다. 구문은 행렬 기반이며 행렬 연산을 위한 다양한 기능을 제공한다. 다양한 자료 구조를 지원하며, 객체 지향 프로그래밍도 허용한다.[25]
4. 1. 문법적 특징
- 기본적으로 매트랩과 동일한 문법을 가지고 작성된다.
- 탭 완성(TAB completion)을 지원한다. 즉, 명령 라인에서 처음 몇 글자만 입력한 상태에서 탭(TAB) 문자를 입력하면 입력된 글자 시작과 일치하는 변수와 함수, 파일 이름을 완성한다.[30]
- 인터렉티브 모드로 실행할 때, 옥타브는 기존에 입력한 명령어를 내부 버퍼에 저장하고 있으며 이렇게 기록된 명령어는 나중에 편하게 불러서 다시 쓸 수 있다.
- 옥타브의 `&&` 및 `||` 논리 연산자는 단락 회로 방식으로 평가된다. 이는 C 언어의 해당 연산자와 유사하며, 요소별 연산자 `&` 및 `|`와는 대조적이다.[54]
- C와 유사한 증가 및 감소 연산자 `++` 및 `--`를 접두사 및 접미사 형태로 모두 포함하고 있다.
- 옥타브는 확장 할당을 지원한다. (예: `x += 5`)
- GNU 옥타브는 Lisp의 `unwind_protect`를 모델로 한 제한적인 형태의 예외 처리를 지원한다.[58]
- 명시적인 상한 없이, 지정되지 않은 수의 인수를 받는 함수를 처리하는 메커니즘을 가지고 있다. (특수 인수 `varargin` 사용)
- 함수는 특수 반환 값 `varargout`을 사용하여 임의의 수의 값을 반환하도록 설정할 수 있다.
4. 2. 자료 구조
옥타브는 구조체로 데이터를 구성하는 제한적인 기능을 지원한다. 다음 예제는 `a`, `b`, `c` 요소를 가진 구조체 `x`를 보여준다 (각각 정수, 배열, 문자열).[54]```octave
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
```
사용자는 데이터 구조를 어느 정도 정의할 수 있다. 예를 들어, 스칼라, 행렬, 문자열의 서로 다른 형식을 가진 하나의 구조체를 다음과 같이 정의할 수 있다.[54]
```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
}
4. 3. C++ 통합
C++ 프로그램에서 직접 옥타브 코드를 실행하는 것도 가능하다[54]. 다음은 `rand([10,1])` 함수를 호출하는 C++ 코드 예시이다.```cpp
#include
...
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());
```
C 및 C++ 코드는 oct 파일을 생성하거나 MATLAB 호환 MEX 파일을 사용하여 GNU 옥타브에 통합할 수 있다.
5. MATLAB과의 호환성
옥타브는 MATLAB과의 호환성을 염두에 두고 만들어졌으며, MATLAB의 많은 기능을 공유한다. 옥타브는 MATLAB과의 비호환성을 버그로 간주한다.
옥타브와 MATLAB은 다음과 같은 공통점을 가진다.
특징 |
---|
행렬을 기본 데이터 유형으로 사용 |
복소수 내장 지원 |
강력한 내장 수학 함수와 광범위한 함수 라이브러리 제공 |
사용자 정의 함수 형태로 확장 가능 |
대부분의 MATLAB 코드는 옥타브에서 수정 없이 실행 가능하다. MathWorks의 FileExchange 저장소에 있는 MATLAB 스크립트는 원칙적으로 옥타브와 호환된다. 그러나 FileExchange의 이용 약관은 MathWorks의 독점 MATLAB 외에는 어떠한 사용도 금지하고 있어, 사용자가 옥타브 호환 및 적절한 오픈 소스 BSD 라이선스로 제공하고 업로드하는 경우가 많다.[31][32][33]
옥타브는 GNU 일반 공중 사용 허가서에 따라 공개되므로, 수정, 복제, 사용이 자유롭다.[51]
5. 1. 문법 호환성
GNU 옥타브에는 MATLAB과 비교하여 몇 가지 의도적인 문법 추가 사항이 있다.- 주석은 % 문자뿐만 아니라 # 문자로도 시작할 수 있다.
- C 기반 연산자인 ++, --, +=, *=, /= 등을 지원한다.
- [1:10](3)과 같이 계단식 인덱싱으로 새로운 변수를 생성하지 않고도 요소를 참조할 수 있다.
- 문자열은 작은따옴표(')뿐만 아니라 큰따옴표(")로도 정의할 수 있다.
- 변수 유형이 단정밀도인 경우, 옥타브는 "평균"을 단정밀도 영역에서 계산한다. (MATLAB은 배정밀도 영역에서 계산). 이는 더 빠르지만 덜 정확한 결과를 낸다.
- 블록은 endif, endfor, endwhile 등 더 구체적인 제어 구조 키워드로 종료할 수 있다.
- 함수는 스크립트 내에서, 그리고 옥타브 프롬프트에서 정의할 수 있다.
- C의 do-until 루프가 있다.
5. 2. 함수 호환성
많은 수의 MATLAB 함수 중 일부는 GNU 옥타브에서 사용할 수 있으며, 일부는 https://octave.sourceforge.io 옥타브 포지의 패키지를 통해 접근할 수 있다.[59] 옥타브 코어 또는 포지 패키지의 일부로 제공되는 함수는 https://octave.sourceforge.io/list_functions.php?q=&sort=alphabetic 온라인에 나열되어 있다.사용할 수 없는 함수 목록은 옥타브 함수 http://hg.savannah.gnu.org/hgweb/octave/file/tip/scripts/help/__unimplemented__.m
__unimplemented.m__
에 포함되어 있다. 구현되지 않은 함수는 https://wiki.octave.org/Category:Octave_Forge 옥타브 위키의 많은 옥타브 포지 패키지에서도 나열된다.구현되지 않은 함수가 호출되면 다음과 같은 오류 메시지가 표시된다.
```octave
octave:1> guide
warning: the 'guide' function is not yet implemented in Octave
Please read
error: 'guide' undefined near line 1 column 1
```
Octave는 MATLAB과의 호환성을 중요하게 여기며, 대부분의 MATLAB 프로그램은 수정 없이 Octave에서 동작한다. 다음은 양자의 유사점이다.[59]
- 행렬을 기본 데이터 형식으로 사용
- 복소수 지원
- 강력한 내장 함수와 라이브러리
- 사용자 정의 함수로 확장 가능
다음은 양자의 차이점이다. (공식 사이트의 FAQ에 정리되어 있다.)[59]
- 행의 시작 부분에 % 외에도 #을 사용하여 해당 행을 주석 처리할 수 있다.
- ++, --, +=, *=, /= 등 C 언어의 연산자를 사용할 수 있다.
- [1:10](3) 등과 같이 변수 (인스턴스)를 생성하지 않고도 배열의 요소를 참조할 수 있다.
- ' 외에도 "를 사용하여 문자열을 정의할 수 있다.
6. 사용자 인터페이스
GNU 옥타브는 공식적인 그래픽 사용자 인터페이스(GUI)와 Qt를 기반으로 한 통합 개발 환경(IDE)을 제공한다. 이는 옥타브 3.8부터 제공되었으며,[34] 옥타브 4.0 출시와 함께 명령줄 인터페이스를 대체하는 기본 인터페이스가 되었다.[11] 2014년, EDN 기고자는 새롭게 출시된 GUI를 검토하면서 "[옥타브]는 이제 매우 실용적인 GUI를 갖추게 되었다"라고 긍정적인 반응을 보였다.[35]
옥타브는 대화 형식으로 각종 명령어를 입력하여 수치 계산을 수행한다. 입력 도중에 탭을 입력하면 함수명, 변수명, 파일명 등을 자동 완성하는 기능(Bash의 탭 완성과 유사)이 있으며, 이전에 입력된 명령줄을 저장하여 필요에 따라 수정하고 재실행할 수 있는 히스토리 기능도 있다.
옥타브 4.0부터 그래픽은 OpenGL 그래픽스와 Qt 위젯을 사용한다. 이전 버전은 gnuplot을 사용했다.
6. 1. GUI 응용 프로그램
옥타브 코드를 사용하면 사용자가 GUI 응용 프로그램을 만들 수 있다. https://octave.org/doc/v7.1.0/GUI-Development.html GUI 개발 (GNU Octave (버전 7.1.0))을 참고하라. 다음은 몇 가지 예이다.- 버튼, 편집 컨트롤, 체크박스
# figure를 생성하고 패널을 만듭니다.
f = figure;
# 버튼을 생성합니다 (기본 스타일).
b1 = uicontrol (f, "string", "A Button", "position",[10 10 150 40]);
# 편집 컨트롤을 생성합니다.
e1 = uicontrol (f, "style", "edit", "string", "editable text", "position",[10 60 300 40]);
# 체크박스를 생성합니다.
c1 = uicontrol (f, "style", "checkbox", "string", "a checkbox", "position",[10 120 150 40]);
- 텍스트 상자
prompt = {"Width", "Height", "Depth"};
defaults = {"1.10", "2.20", "3.30"};
rowscols = [1,10; 2,20; 3,30];
dims = inputdlg (prompt, "Enter Box Dimensions", rowscols, defaults);
- 메시지 상자가 있는 목록 상자
my_options = {"An item", "another", "yet another"};
[sel, ok] = listdlg ("ListString", my_options, "SelectionMode", "Multiple");
if (ok == 1)
msgbox ("You selected:");
for i = 1:numel (sel)
msgbox (sprintf ("\t%s", my_options{sel(i)}));
endfor
else
msgbox ("You cancelled.");
endif
- 라디오 버튼
# figure를 생성하고 패널을 만듭니다.
f = figure;
# 버튼 그룹을 생성합니다.
gp = uibuttongroup (f, "Position", [ 0 0.5 1 1])
# 그룹에 버튼을 생성합니다.
b1 = uicontrol (gp, "style", "radiobutton", "string", "Choice 1", "Position", [ 10 150 100 50 ]);
b2 = uicontrol (gp, "style", "radiobutton", "string", "Choice 2", "Position", [ 10 50 100 30 ]);
# 그룹에 없는 버튼을 생성합니다.
b3 = uicontrol (f, "style", "radiobutton","string", "Not in the group","Position", [ 10 50 100 50 ]);
7. 패키지
옥타브는 추가적인 기능을 제공하는 다양한 패키지를 사용할 수 있다. 이러한 패키지는 https://octave.sourceforge.io/packages.php Octave-Forge 또는 https://gnu-octave.github.io/packages/symbolic 깃허브 옥타브 패키지에 있다. 누구든지 패키지를 생성하고 유지 관리할 수 있다.[1]
8. 응용 분야
개인적인 과학 컴퓨팅을 위한 데스크톱 사용 외에도, 옥타브는 학계와 산업계에서 사용된다. 예를 들어, 옥타브는 피츠버그 슈퍼컴퓨팅 센터의 거대한 병렬 컴퓨팅 컴퓨터에서 사회보장번호 추측과 관련된 취약점을 찾는 데 사용되었다.[21]
OpenCL 또는 CUDA를 사용하여 GPU 가속도 가능하다.[22]
9. 다른 유사 소프트웨어와의 비교
오픈 소스 라이선스로 배포되는 매트랩(MATLAB)과 유사한 소프트웨어로는 사이랩(Scilab)과 프리맷(FreeMat)이 있다.[36][37][38][39] 옥타브는 사이랩보다 매트랩과 더 호환되며,[36][40][41] 프리맷은 2013년 6월 이후 업데이트되지 않았다.[42]
또한 줄리아 프로그래밍 언어와 그 플로팅 기능은 GNU 옥타브와 유사하다.
참조
[1]
웹사이트
contributors.in
http://hg.savannah.g[...]
2015-06-10
[2]
웹사이트
"Full-time development began in the Spring of 1992. The first alpha release was January 4, 1993, and version 1.0 was released February 17, 1994."
https://www.gnu.org/[...]
[3]
웹사이트
Building - Octave
https://wiki.octave.[...]
GNU
2018-05-01
[4]
웹사이트
Basque, Belarusian, Catalan, Chinese, Dutch, English, French, German, Hungarian, Italian, Japanese, Latvian, Portuguese (Brazil), Portuguese (Portugal), Russian, Spanish, Turkish, Ukrainian
https://hg.savannah.[...]
[5]
웹사이트
About GNU Octave
https://www.gnu.org/[...]
GNU
2018-05-01
[6]
웹사이트
Octave 9.2.0 Released
https://octave.org/n[...]
2024-06-07
[7]
웹사이트
About Octave
https://www.gnu.org/[...]
2009-06-28
[8]
웹사이트
GNU Octave Version 1
https://www.gnu.org/[...]
[9]
웹사이트
GNU Octave Version 2
https://www.gnu.org/[...]
[10]
웹사이트
GNU Octave Version 3
https://www.gnu.org/[...]
[11]
웹사이트
GNU Octave Version 4.0
https://www.gnu.org/[...]
[12]
웹사이트
GNU Octave 4.0.0 Released
https://www.gnu.org/[...]
2015-05-29
[13]
웹사이트
GNU Octave 4.0.1 Released
https://www.gnu.org/[...]
2016-03-23
[14]
웹사이트
GNU Octave 4.0.3 Released
https://www.gnu.org/[...]
2016-07-02
[15]
웹사이트
GNU Octave Version 5
https://www.gnu.org/[...]
[16]
웹사이트
GNU Octave 6.1.0 Released
https://www.gnu.org/[...]
2020-11-26
[17]
웹사이트
GNU Octave 7.1.0 Released
https://www.gnu.org/[...]
2022-04-06
[18]
웹사이트
GNU Octave 8.1.0 Released
https://octave.org/n[...]
2023-03-07
[19]
웹사이트
GNU Octave Version 9
https://octave.org/N[...]
2024-03-25
[20]
웹사이트
Octave 9.2.0 released
https://octave.org/n[...]
2024-06-07
[21]
웹사이트
Social Security Number Vulnerability Findings Relied on Supercomputing
http://www.hpcwire.c[...]
2009-07-08
[22]
웹사이트
Drop-in Acceleration of GNU Octave
https://developer.nv[...]
2014-06-05
[23]
웹사이트
GNU Octave - Controlling subprocesses
http://www.network-t[...]
2008-11-14
[24]
웹사이트
GNU Octave
http://www.delorie.c[...]
2009-01-28
[25]
웹사이트
Summary of important user-visible changes for version 3.2
https://www.gnu.org/[...]
2012-01-05
[26]
웹사이트
FAQ: MATLAB compatibility
http://www.octave.or[...]
2009-04-04
[27]
웹사이트
FAQ: Getting Octave
http://www.octave.or[...]
2009-04-04
[28]
웹사이트
Top (GNU Octave (version 6.3.0))
https://octave.org/d[...]
[29]
웹사이트
Octave for Android - Octave
https://wiki.octave.[...]
2021-08-23
[30]
웹사이트
Letting Readline Type For You
https://www.gnu.org/[...]
2016-07-29
[31]
웹사이트
FAQ - Octave
https://wiki.octave.[...]
2022-12-05
[32]
웹사이트
MATLAB Central Terms of Use
https://www.mathwork[...]
2022-12-05
[33]
웹사이트
File Exchange Licensing FAQ
https://www.mathwork[...]
2022-12-05
[34]
웹사이트
GNU Octave Version 3.8
https://www.gnu.org/[...]
[35]
웹사이트
GNU Octave hits a high note
http://www.edn.com/e[...]
2014-02-07
[36]
서적
Fundamentals of Computational Neuroscience
Oxford University Press
[37]
서적
Practical Scientific Computing
https://archive.org/[...]
Woodhead Publishing
[38]
서적
Computers in Fisheries Research
https://archive.org/[...]
Springer Science & Business Media
[39]
서적
Programming for Chemical Engineers Using C, C++, and MATLAB
Jones & Bartlett Publishers
[40]
서적
A Course in Mathematical Methods for Physicists
CRC Press
[41]
서적
Simulation of ODE/PDE Models with MATLAB, Octave and Scilab: Scientific and Engineering Applications
Springer
[42]
웹인용
FreeMat
http://freemat.sourc[...]
2020-02-22
[43]
웹사이트
Frequently asked questions about Octave (with answers)
http://www.gnu.org/s[...]
2011-02-14
[44]
웹사이트
GNU Octave 9.1.0 Released
https://octave.org/n[...]
2024-03-14
[45]
서적
Fundamentals of Computational Neuroscience
Oxford University Press
[46]
서적
Practical Scientific Computing
Woodhead Publishing
[47]
서적
Computers in Fisheries Research
Springer Science & Business Media
[48]
서적
Programming for Chemical Engineers Using C, C++, and MATLAB
Jones & Bartlett Publishers
[49]
서적
A Course in Mathematical Methods for Physicists
CRC Press
[50]
서적
Simulation of ODE/PDE Models with MATLAB®, OCTAVE and SCILAB: Scientific and Engineering Applications
Springer
[51]
웹사이트
About Octave
http://www.gnu.org/s[...]
2009-06-28
[52]
뉴스
Social Security Number Vulnerability Findings Relied on Supercomputing
http://www.hpcwire.c[...]
HPCwire
2009-07-08
[53]
뉴스
「GNU Octave 3.8.0」リリース、ついにGUIを搭載
http://sourceforge.j[...]
2014-02-10
[54]
웹사이트
GNU Octave - Controlling subprocesses
http://www.network-t[...]
2008-11-14
[55]
웹사이트
GNU Octave
http://www.delorie.c[...]
2009-01-28
[56]
웹사이트
FAQ: MATLAB compatibility
http://www.gnu.org/s[...]
2009-07-04
[57]
웹사이트
FAQ: Getting Octave
http://www.gnu.org/s[...]
2009-07-04
[58]
문서
CLHS: Special Operator UNWIND-PROTECT
http://www.lispworks[...]
[59]
문서
How is Octave different from Matlab? 互換性に関するFAQ
http://www.octave.or[...]
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com