Loading AI tools
software di matematica Da Wikipedia, l'enciclopedia libera
GNU Octave è un'applicazione software per l'analisi numerica in gran parte[1] compatibile con MATLAB.
GNU Octave software | |
---|---|
GNU Octave in esecuzione su un sistema Linux | |
Genere | Analisi numerica |
Sviluppatore | James B. Rawlings, John W. Eaton |
Data prima versione | 1988 |
Ultima versione | 9.2.0 (7 giugno 2024) |
Sistema operativo | GNU Multipiattaforma |
Linguaggio | C++ |
Toolkit | Qt |
Licenza | GNU GPL v3+ (licenza libera) |
Lingua | Multilingua |
Sito web | octave.org |
Ha un insieme di funzionalità fornite per il calcolo matriciale come rango e determinante o specialistiche come decomposizione ai valori singolari (SVD), fattorizzazione LU; sebbene consenta di trovare la soluzione numerica di sistemi lineari non svolge calcolo simbolico o altre attività tipiche di un sistema di algebra computazionale.
Il progetto fu concepito nel 1988 da John W. Eaton (primo manutentore) e da James B. Rawlings presso l'Università del Texas come strumento di calcolo per l'ingegneria chimica.
Il suo sviluppo vero e proprio partì da John W. Eaton nel 1992. La prima alpha pubblicata è datata 4 gennaio 1993 e il 17 febbraio 1994 fu distribuita la versione 1.0. La versione 3.0 è stata distribuita il 21 dicembre 2007.
Il linguaggio è così chiamato in onore di Octave Levenspiel (†2017), ingegnere chimico e professore alla Oregon State University, noto per la sua abilità nell'eseguire rapidi calcoli.
Il linguaggio di scripting di Octave supporta svariate librerie del C, e supporta inoltre diverse system calls e funzioni UNIX.
I programmi scritti con Octave sono degli script o liste di chiamate a funzioni. Il linguaggio dispone di diversi tipi di dati, oltre quello numerico esistono anche un tipo logico (true, false), uno di tipo stringa e strutture dati analoghe alle struct del linguaggio C. Esiste anche un altro tipo di dato molto potente ed è la matrice che consente molte operazioni di tipo matriciale. Il linguaggio di Octave non è un linguaggio orientato agli oggetti ma supporta le strutture dati, inoltre mette a disposizione varie strutture per il controllo del flusso, come i test logici if-else e switch ed i cicli while e do-until.
La sintassi è molto simile a quella di MATLAB, ed è possibile scrivere script che girano sia sotto Octave che su MATLAB.
Octave è distribuito sotto licenza GPL, e quindi può essere liberamente copiato e usato. Il programma gira sotto sistemi Unix e Linux, oltre che su Windows e macOS.
Digitare un carattere TAB nella riga di comando attiva in GNU Octave la ricerca di possibili completamenti della parte di comando già parzialmente digitata (in modo analogo al completamento automatico della shell Bash).
Quando avviato in modalità interattiva, GNU Octave salva i comandi già eseguiti in un buffer interno così che essi possono essere richiamati ed editati.
GNU Octave include un limitato supporto per organizzare i dati in strutture. Ad esempio:
octave:1> x.a = 1; x.b = [1, 2; 3, 4]; x.c = "stringa"; octave:2> x.a ans = 1 octave:3> x.b ans = 1 2 3 4 octave:4> x.c ans = stringa octave:5> x x = { a = 1 b = 1 2 3 4 c = stringa }
Gli operatori logici '&&' e '||' di GNU Octave sono valutati in modalità a corto circuito (come i corrispondenti operatori in linguaggio C), a differenza degli operatori '&' e '|', che agiscono elemento per elemento in vettori, matrici e array multi-dimensionali.
GNU Octave include gli operatori C-like di incremento '++' e decremento '--', sia nella loro forma prefissa che in quella suffissale.
GNU Octave supporta una forma basilare di gestione delle eccezioni, modellata sul costrutto unwind-protect del Lisp. La forma generale di un blocco unwind_protect ha questo aspetto:
unwind_protect
body
unwind_protect_cleanup
cleanup
end_unwind_protect
Come regola generale, GNU Octave riconosce come terminazione di un dato blocco di codice 'block
' sia la parola chiave 'end
' (che è compatibile con il linguaggio MATLAB) che l'altra più specifica 'end_block
'. Di conseguenza, un blocco 'unwind_protect
' può essere terminato sia con la parola chiave 'end_unwind_protect
' - come nell'esempio - sia in modo più portabile, con la parola chiave 'end
'.
Nell'esempio, la parte cleanup del blocco è sempre eseguita. In caso la parte body sollevasse un'eccezione, cleanup sarebbe eseguita immediatamente prima della propagazione dell'eccezione al di fuori del blocco 'unwind_protect
'.
GNU Octave supporta anche un'altra forma di gestione delle eccezioni (compatibile con il linguaggio MATLAB):
try
body
catch
exception_handling
end
Quest'ultima forma differisce da un blocco 'unwind_protect
' per due motivi. Primo, la parte exception_handling viene eseguita soltanto nel caso in cui la parte body sollevi un'eccezione. In secondo luogo, dopo l'esecuzione di exception_handling, l'eccezione è considerata intercettata e gestita, e non viene propagata all'esterno del blocco (a meno che un comando 'rethrow( lasterror )
' sia di proposito stato inserito all'interno del codice exception_handling).
GNU Octave ha un meccanismo efficace per gestire funzioni che devono ricevere un numero arbitrario (non noto a priori) di argomenti, senza un limite superiore. Per indicare una lista di zero o più argomenti entranti in una funzione, si usa lo speciale argomento varargin
, posizionato come ultimo (o solo) argomento nella lista:
function s = plus (varargin)
if (nargin==0)
s = 0;
else
s = varargin{1} + plus (varargin{2:nargin});
end
end
Una funzione può essere implementata in modo che ritorni al codice chiamante un qualsiasi numero di valori, usando come argomento di uscita la variabile speciale varargout
. Ad esempio:
function varargout = multiassign (data)
for k=1:nargout
varargout{k} = data(:,k);
end
end
È anche possibile eseguire codice GNU Octave direttamente all'interno di un programma C++. Per esempio, di seguito è riportato un frammento di codice che chiama la funzione rand([10,1])
da C++, facendola interpretare da GNU Octave:
#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());
GNU Octave è stato progettato avendo tra gli obiettivi la compatibilità con il linguaggio MATLAB, e infatti esso condivide con MATLAB molte funzionalità:
Rispetto al linguaggio MATLAB, esiste di proposito un insieme ristretto di differenze :
#
che con il carattere %
(quest'ultimo compatibile col linguaggio MATLAB).++
, --
, +=
, *=
, /=
.[1:10](3)
."
che con il carattere '
(quest'ultimo compatibile col linguaggio MATLAB).Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.