GNU Octave, öncelikle sayısal hesaplamalar için tasarlanmış olan yüksek seviye bir programlama dili içeren bir yazılımdır. Octave; doğrusal ve doğrusal olmayan problemleri sayısal olarak çözmede ve çoğunlukla MATLAB ile uyumlu bir dil kullanarak diğer sayısal deneyleri gerçekleştirmede yardımcı olur. Toplu iş odaklı bir dil olarak da kullanılabilir. GNU Projesi’nin bir parçası olduğu için GNU Genel Kamu Lisansı koşulları altında özgür bir yazılımdır.

Octave; MATLAB’in en büyük özgür alternatiflerinden biridir, diğerleri Scilab ve FreeMat’tır. Ancak Scilab, MATLAB ile (çift yönlü) söz dizimsel uyumluluğa Octave’den daha az önem vermektedir.

Tarihçe

Proje 1988 yılında tasarlandı. İlk başta bir kimyasal reaktör tasarım kursuna eşlik etmesi amaçlandı. Gerçek gelişme 1992’de John W. Eaton tarafından başlatıldı. İlk alfa sürümü 4 Ocak 1993’e kadar uzanıyor ve 17 Şubat 1994’te sürüm 1.0’da piyasaya sürüldü. Sürüm 4.0.0, 29 Mayıs 2015 tarihinde yayımlandı.

Program, asıl yazarın eski profesörü olan Octave Levenspiel’in adını almıştır. Levenspiel, hızlı yuvarlak hesaplar yapabilme yeteneğiyle tanınırdı.

Gelişim Tarihçesi

Zaman Aksiyon
1988 / 1989 1. tartışmalar (Kitap ve Yazılım)
Şubat 1992 Geliştirilmeye Başlanması
Ocak 1993 Web’de Haberler (Sürüm 0.60)
Şubat 1994 1. Yayın (Sürüm 1.0.0 ila 1.1.1)
Aralık 1996 2. Yayın (Sürüm 2.0.x), Windows Port (Cygwin) ile
Mart 1998 Sürüm 2.1
Kasım 2004 Sürüm 2.9 (DEV 3.0 sürümü)
Aralık 2007 Sürüm 3.0 Yayını (Dönüm Noktası)
Haziran 2009 Sürüm 3.2 (Dönüm Noktasaı)
8 Şubat 2011 Sürüm 3.4.0 (Dönüm Noktası)
22 ubat 2012 Octave 3.6.1 (Dönüm Noktası)
31 Aralık 2013 Octave 3.8.0 Yayını (deneysel GUI)
29 Mayıs 2015 Sürüm 4.0.0 (stabil GUI ve OOP için yeni Söz Dizimi)
14 Kasım 2016 Sürüm 4.2.0 (gnuplot 4.4+)
30 Nisan 2018 Sürüm 4.4.0 (GUI QT Toolkit için yeni hedef, gelecekte kullanımdan kaldırılan FLTK)
1 Mart 2019 Octave Yayınları 5.1.0 (QT5 tercih edildi)

Gelişmeler

Masaüstlerinde kişisel bilimsel bilgi işlem için kullanılmasına ek olarak Octave akademi ve endüstride kullanılır. Örneğin; Octave, Pittsburgh Supercomputing Center’deki devasa bir paralel bilgisayarda sosyal güvenlik rakamlarını tahmin etmeyle ilgili zayıf noktaları bulmak için kullanıldı.

GPU’ların kullanımıyla OpenCL veya CUDA ile dramatik hızlanma da mümkündür.

Teknik Detaylar

  • Octave C++ standart kütüphane kullanılarak C++ dilinde yazılmıştır.
  • Octave, Octave kodlama dilini çalıştırmak için bir tercüman kullanır.
  • Octave, dinamik olarak yüklenebilen modüller kullanılarak genişletilebilir.
  • Octave tercümanı çizit, grafik ve çizelge oluşturmak ve bunları kaydetmek veya yazdırmak için OpenGL tabanlı bir grafik motoruna sahiptir. Alternatif olarak gnuplot aynı amaç için kullanılabilir.
  • Octave, geleneksel Komut Satırı Arayüzüne (CLI [Command Line Interface]) ek olarak bir Grafik Kullanıcı Arabirimi (GUI [Graphical User Interface]) içerir: Detaylar için #Kullanıcı Arayüzleri bölümüne bakınız.

Octave, Dil

Octave dili, yorumlanmış bir programlama dilidir. Yapısal bir programlama dilidir (C’ye benzer) ve birçok standart C standart kütüphane fonksiyonunu ve ayrıca belirli UNIX sistem çağrılarını ve fonksiyonlarını destekler. Ancak argümanların referans olarak geçmesini desteklemiyor.

Octave programları; fonksiyon çağrılarının veya bir komut dosyasının bir listesinden oluşur. Söz dizimi matris tabanlıdır ve matris işlemleri için çeşitli fonksiyonlar sağlar. Çeşitli veri yapılarını destekler ve nesne yönelimli programlamaya izin verir.

Söz dizimi MATLAB’a çok benzer ve bir betiğin dikkatlice programlanması, hem Octave hem de MATLAB üzerinde çalışmasına izin verecektir.

Octave; GNU Genel Kamu Lisansı altında kullanıma sunulduğundan özgürce değiştirilebilir, kopyalanabilir ve kullanılabilir. Program; Microsoft Windows ve macOS dâhil olmak üzere çoğu Unix ve Unix benzeri işletim sistemlerinde çalışır.

Önemli Özellikler

Komut ve Değişken Adı Tamamlama

Komut satırına bir TAB karakteri yazmak; Octave’nin değişken, fonksiyon ve dosya adlarını (Bash’ın sekme tamamlama işlemine benzer şekilde) tamamlamaya çalışmasına neden olur. Octave, imlecin önündeki metni tamamlamak için adın ilk kısmı olarak kullanır.

Komut Geçmişi

Etkileşimli olarak çalıştırırken Octave dâhilî bir ara bellekte yazılan komutları geri çağırmak ve düzenlemek için kaydeder.

Veri Yapıları

Octave, yapılarda veri düzenlemek için sınırlı miktarda destek içerir. Bu örnekte “a”, “b” ve “c” (sırasıyla bir tam sayı, bir dizi ve bir string) içeren bir “x” yapısını görüyoruz:

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
}

Kısa Devre Boolean Operatörleri

Octave’nin “&&” ve “||” mantıksal operatörleri, kısa devre şeklinde (C dilinde karşılık gelen operatörler gibi) eleman-eleman operatörlerinin aksine “&” ve “|” olarak değerlendirilir.

Artırma ve Azaltma Operatörleri

Octave; hem ön ek hem de son ek formlarında “++” ve “--” C benzeri artırma ve azaltma operatörlerini içerir. Octave ayrıca örneğin; “x += 5”.

Unwind-protect

Octave, Lisp’in “unwind_protect“inden sonra modellenmiş sınırlı bir istisna işleme biçimini destekler. Bir unwind_protect blokunun genel formu şöyle görünür:

unwind_protect
   body
unwind_protect_cleanup
   cleanup
end_unwind_protect

Genel bir kural olarak GNU Octave “end” anahtar sözcüğünü (MATLAB dili ile uyumlu olan) veya daha spesifik bir anahtar kelime “end_block” verilen bir “block“un sona ermesi olarak tanır. Sonuç olarak bir “unwind_protect” bloku, örnekte olduğu gibi “end_unwind_protect” anahtar kelimesiyle veya daha taşınabilir “end” anahtar kelimesiyle sonlandırılabilir.

Blokun temizleme kısmı daima yürütülür. Gövde parçası tarafından bir istisna ortaya çıkarsa istisna “unwind_protect” blokunun dışına yayılmadan hemen önce temizleme işlemi gerçekleştirilir.

GNU Octave, bir başka istisna işleme biçimini de destekler (MATLAB dili ile uyumludur):

try
   body
catch
   exception_handling
end

Bu ikinci form “unwind_protect” blokundan iki şekilde farklıdır. İlk olarak exception_handling yalnızca bir istisna gövde tarafından oluşturulduğunda gerçekleştirilir. İkincisi exception_handling‘in yürütülmesinden sonra istisna, blokun dışına yayılmaz (bir “rethrow (lasterror)” ifadesi exception_handling kodu içinde açıkça belirtilmediği sürece).

Değişken Uzunluklu Argüman Listeleri

Octave, açıkça belirlenmiş bir üst sınır olmadan belirtilmemiş sayıda argüman alan fonksiyonları yerine getirme mekanizmasına sahiptir. Sıfır ya da daha fazla argüman listesi belirlemek için listedeki son (veya sadece) argüman olarak varargin özel argümanını kullanın.

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

C++ Entegrasyonu

Octave kodunu doğrudan bir C++ programında çalıştırmak da mümkündür. Örneğin; rand([10,1])‘i çağırmak için bir kod parçacığı:

#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 Uyumluluğu

Octave; MATLAB uyumluluğu göz önünde bulundurularak inşa edilmiştir ve birçok özelliği MATLAB ile paylaşır:

  1. Temel veri tipi olarak matrisler.
  2. Karmaşık sayılar için dâhilî destek.
  3. Güçlü yerleşik matematik fonksiyonları ve kapsamlı fonksiyon kütüphaneleri.
  4. Kullanıcı tanımlı fonksiyonlar şeklinde genişletilebilirlik.

Octave, MATLAB ile uyumsuzluğu bir hata olarak değerlendirir; bu nedenle Lotus v. Borland davasına göre yazılımın telif hakkını ihlal etmeyen bir yazılım klonu olarak düşünülebilir.

MathWorks FileExchange deposundaki MATLAB komut dosyaları prensip olarak Octave ile uyumludur. Bununla birlikte sıklıkla Octave uyumlu ve uygun açık kaynak BSD lisansı altında kullanıcılar tarafından sağlanmakta ve yüklenirken fileexchange’nin Kullanım Koşulları, MathWorks’un sahipli MATLAB’ının yanında herhangi bir kullanımı yasaklamaktadır.

Söz Dizimi Uyumluluğu

Küçük söz dizimi eklemeleri olsa da birkaç amaçlı vardır:

  • Yorum satırlarına # karakteri ve % karakteri eklenebilir;
  • Çeşitli C tabanlı operatörler ++, –, +=, *=, /= desteklenir;
  • Ögelere kademeli endeksleme yoluyla, örn. [1:10](3);
  • String’ler, çift alıntı “ karakterinin yanı sıra tek tırnak ‘ karakteriyle tanımlanabilir;
  • Değişken tipi tek olduğunda (tek duyarlıklı bir floating-point number) Octave, tek bölgecikteki “ortalamayı” (çift bölgecikteki MATLAB) hesaplar; bu daha hızlıdır ancak daha az doğru sonuç verir;
  • Bloklar ayrıca daha spesifik Kontrol yapısı anahtar kelimeleriyle yani endif, endfor, endwhile vb. ile de sonlandırılabilir;
  • Fonksiyonlar senaryolar içinde ve Octave komut isteminde tanımlanabilir;
  • Bir do-until döngüsünün varlığı (C’deki do-while’ye benzer).

Fonksiyon Uyumluluğu

Çok sayıda MATLAB fonksiyonunun çoğu ancak hepsi değil, GNU Octave’de bulunur, bazıları Octave Forge’deki paketler yoluyla erişilebilir. Temel Octave veya Forge paketlerinin bir parçası olarak kullanılabilen fonksiyonlar çevrim içi olarak listelenir.

Kullanılamayan fonksiyonların bir listesi, __unimplemented.m__ Octave fonksiyonuna dâhil edilmiştir. Uygulanmayan fonksiyonlar ayrıca Octave Wiki’deki birçok Octave Forge paketi altında listelenmiştir.

Uygulanmayan bir fonksiyon çağrıldığında aşağıdaki hata mesajı gösterilir:

  octave:1> quad2d
  warning: quad2d is not implemented. Consider using dblquad.

  Please read <http://www.octave.org/missing.html> to learn how you can
  contribute missing functionality.
  warning: called from
      __unimplemented__ at line 523 column 5
  error: 'quad2d' undefined near line 1 column 1

Kullanıcı Arayüzleri

Octave; resmî bir grafik kullanıcı arayüzü (GUI [graphical user interface]) ve Qt tabanlı bir entegre geliştirme ortamı (IDE [integrated development environment]) ile birlikte geliyor. Octave 3.8’den beri mevcuttu ve Octave 4.0’ın piyasaya sürülmesiyle varsayılan arayüz (komut satırı arayüzü üzerinden) oldu. “[Octave] artık çok kullanışlı bir GUI’ye sahip” diyen EDN katılımcısı tarafından iyi karşılandı.

Kodlama eğitimi için ToolboX gibi birkaç 3. parti grafik ön uç da geliştirilmiştir.

GUI Uygulamaları

Octave kodu ile kullanıcı GUI uygulamaları oluşturabilir. İşte bazı örnekler.

Buton, düzenleme kontrolü, onay kutusu

% create figure and panel on it
f = figure;
% create a button (default style)
b1 = uicontrol (f, "string", "A Button", "position",[10 10 150 40]);
% create an edit control
e1 = uicontrol (f, "style", "edit", "string", "editable text", "position",[10 60 300 40]);
% create a checkbox
c1 = uicontrol (f, "style", "checkbox", "string", "a checkbox", "position",[10 120 150 40]);

Metin kutusu

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);

Mesaj kutuları ile liste kutusu.

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

Seçenek düğmeleri

% create figure and panel on it
f = figure;
% create a button group
gp = uibuttongroup (f, "Position", [ 0 0.5 1 1])
% create a buttons in the group
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 ]);
% create a button not in the group
b3 = uicontrol (f, "style", "radiobutton","string", "Not in the group","Position", [ 10 50 100 50 ]);

Paketler

Octave’de ayrıca ücretsiz paketler de vardır. Bu paketler Octave-Forge’de bulunmaktadır. Mevcut paketler:

  • bim - Package for solving Diffusion Advection Reaction (DAR) Partial Differential Equations
  • bsltl - The BSLTL package is a free collection of OCTAVE/MATLAB routines for working with the biospeckle laser technique
  • cgi - Common Gateway Interface for Octave communications - Digital Communications, Error Correcting Codes (Channel Code), Source Code functions, Modulation and Galois Fields
  • control - Computer-Aided Control System Design (CACSD) Tools for GNU Octave, based on the proven SLICOT Library
  • data-smoothing - Algorithms for smoothing noisy data
  • database - Interface to SQL databases, currently only postgresql using libpq
  • dataframe - Data manipulation toolbox similar to R data
  • dicom - Digital communications in medicine (DICOM) file io
  • divand - divand performs an n-dimensional variational analysis (interpolation) of arbitrarily located observations
  • doctest - The Octave-Forge Doctest package finds specially-formatted blocks of example code within documentation files
  • econometrics - Econometrics functions including MLE and GMM based techniques
  • fem-fenics - pkg for the resolution of partial differential equations based on fenics
  • financial - Monte Carlo simulation, options pricing routines, financial manipulation, plotting functions and additional date manipulation tools
  • fits - The Octave-FITS package provides functions for reading, and writing FITS (Flexible Image Transport System) files
  • fpl - Collection of routines to export data produced by Finite Elements or Finite Volume Simulations in formats used by some visualization programs
  • fuzzy-logic toolkit - A mostly MATLAB-compatible fuzzy logic toolkit for Octave
  • ga - Genetic optimization code
  • general - General tools for Octave
  • generate_html - This package provides functions for generating HTML pages that contain the help texts for a set of functions
  • geometry - Library for geometric computing extending MatGeom functions
  • gsl - Octave bindings to the GNU Scientific Library
  • image - The Octave-forge Image package provides functions for processing images
  • image-acquisition - The Octave-forge Image Acquisition package provides functions to capture images from connected devices
  • instrument-control - Low level I/O functions for serial, i2c, parallel, tcp, gpib, vxi11, udp and usbtmc interfaces
  • interval - The interval package for real-valued interval arithmetic allows one to evaluate functions over subsets of their domain
  • io - Input/Output in external formats e.g. Excel
  • level-set - Routines for calculating the time-evolution of the level-set equation and extracting geometric information from the level-set function
  • linear-algebra - Additional linear algebra code, including general SVD and matrix functions
  • lssa - A package implementing tools to compute spectral decompositions of irregularly-spaced time series
  • ltfat - The Large Time/Frequency Analysis Toolbox (LTFAT) is a MATLAB/Octave toolbox for working with time-frequency analysis, wavelets and signal processing
  • mapping - Simple mapping and GIS .shp and raster file functions
  • mataveid - System identification package for both MATLAB and GNU Octave
  • matavecontrol - Control toolbox for both MATLAB and GNU Octave
  • miscellaneous - Miscellaneous tools that would fit nowhere else
  • mpi - Octave bindings for basic Message Passing Interface (MPI) functions for parallel computing
  • msh - Create and manage triangular and tetrahedral meshes for Finite Element or Finite Volume PDE solvers
  • mvn - Multivariate normal distribution clustering and utility functions
  • nan - A statistics and machine learning toolbox for data with and w/o missing values
  • ncarray - Access a single or a collection of NetCDF files as a multi-dimensional array
  • netcdf - A MATLAB compatible NetCDF interface for Octave
  • nurbs - Collection of routines for the creation, and manipulation of Non-Uniform Rational B-Splines (NURBS), based on the NURBS toolbox by Mark Spink
  • ocs - Package for solving DC and transient electrical circuit equations
  • octclip - This package allows users to do boolean operations with polygons using the Greiner-Hormann algorithm
  • octproj - This package allows users to call functions of PROJ
  • optics - Functions covering various aspects of optics
  • optim - Non-linear optimization toolkit
  • optiminterp - An optimal interpolation toolbox for octave
  • parallel - Parallel execution package
  • quaternion - Quaternion package for GNU Octave, includes a quaternion class with overloaded operators
  • queueing - The queueing package provides functions for queueing networks and Markov chains analysis
  • secs1d - A Drift-Diffusion simulator for 1d semiconductor devices
  • secs2d - A Drift-Diffusion simulator for 2d semiconductor devices
  • secs3d - A Drift-Diffusion simulator for 3d semiconductor devices
  • signal - Signal processing tools, including filtering, windowing and display functions
  • sockets - Socket functions for networking from within octave
  • sparsersb - Interface to the librsb package implementing the RSB sparse matrix format for fast shared-memory sparse matrix computations
  • splines - Additional spline functions
  • statistics - Additional statistics functions for Octave
  • stk - The STK is a (not so) Small Toolbox for Kriging
  • strings - Additional functions for manipulation and analysis of strings
  • struct - Additional structure manipulation functions
  • symbolic - The Octave-Forge Symbolic package adds symbolic calculation features to GNU Octave
  • tisean - Port of TISEAN 3
  • tsa - Stochastic concepts and maximum entropy methods for time series analysis
  • vibes - The VIBes API allows one to easily display results (boxes, pavings) from interval methods
  • video - A wrapper for ffmpeg’s libavformat and libavcodec, implementing addframe, avifile, aviinfo and aviread
  • vrml - 3D graphics using VRML
  • windows - Provides COM interface and additional functionality on Windows
  • zeromq - ZeroMQ bindings for GNU Octave

Ayrıca Bakınız

Mathematics portal

Computer programming portal

Free and open-source software portal

References