GNU Octave è un progetto di software da riga di comando open source e liberamente distribuito che mira a fornire un linguaggio di alto livello potente, facile da usare ed estensibile che può essere usato per gestire calcoli numerici .
Può essere utilizzato per risolvere numericamente problemi lineari e non lineari
Il software può essere utilizzato per risolvere numericamente problemi lineari e non lineari, nonché per eseguire vari esperimenti numerici. È compatibile con Matlab, un ambiente di calcolo numerico multi-paradigma e può essere utilizzato come linguaggio orientato ai batch.
Inoltre, GNU Octave offre varie utilità che consentono di risolvere problemi di algebra numerica di base, manipolare polinomi, integrare funzioni ordinarie, scoprire le radici di equazioni non lineari e integrare equazioni differenziali algebriche e differenziali ordinarie.
È possibile utilizzare moduli caricati dinamicamente o funzioni definite dall'utente per estendere GNU Octave. Questi possono essere scritti nel linguaggio di programmazione di Octave o in C, C ++, Fortran, ecc.
Introduzione a GNU Octave
Sono disponibili due metodi per installare GNU Octave su un sistema operativo GNU / Linux. Il primo è il più semplice e prevede la ricerca di & ldquo; ottava & rdquo; pacchetto nell'app Software Center (ad esempio Synaptic Package Manager) della distribuzione.
Il secondo metodo ti aiuterà a installare l'ultima versione del prodotto, ma implica l'esecuzione di comandi in un emulatore di terminale. Se non ti piace, scarica l'ultimo pacchetto sorgente da Softoware o dall'homepage ufficiale del progetto (vedi il link alla fine dell'articolo), salvalo sul tuo PC e scompattalo.
Apri un'app emulatore di terminale, esegui il & lsquo; cd & rsquo; comando seguito dal percorso della posizione dei file di archivio estratti (ad es. cd /home/softoware/octave-3.8.2), esegui & lsquo; ./ configure & amp; & amp; fare & rsquo; comando per configurare e compilare il programma, quindi eseguire il comando sudo make install & rsquo; comando per installarlo. Usalo dall'interfaccia della riga di comando eseguendo l'& lsquo; ottava & rsquo; comando.
Sotto il cofano
Dando uno sguardo sotto il cofano del programma GNU Octave, possiamo notare che è scritto interamente nel linguaggio di programmazione C ++. L'abbiamo installato in diverse distribuzioni di GNU / Linux, tra cui Arch Linux e Ubuntu utilizzando le istruzioni fornite nella sezione precedente. Il software è compatibile con piattaforme per computer a 32 e 64 bit.
Novità in questa versione:
- One delle più grandi novità della serie di versioni di Octave 3.8.x è un'interfaccia grafica utente. È l'unica cosa che gli utenti hanno richiesto più spesso negli ultimi anni e ora è quasi pronta. Ma poiché non è così lucido come vorremmo, abbiamo deciso di aspettare fino alla serie di versioni 4.0.x prima di rendere la GUI l'interfaccia predefinita (fino ad allora, puoi usare l'opzione --force-gui per avviare la GUI ).
Novità della versione nella versione:
- Una delle più grandi nuove funzionalità della serie di versioni di Octave 3.8.x è un'interfaccia utente grafica. È l'unica cosa che gli utenti hanno richiesto più spesso negli ultimi anni e ora è quasi pronta. Ma poiché non è così lucido come vorremmo, abbiamo deciso di aspettare fino alla serie di versioni 4.0.x prima di rendere la GUI l'interfaccia predefinita (fino ad allora, puoi usare l'opzione --force-gui per avviare la GUI ).
Novità in nella versione 4.2.0:
- Una delle più grandi novità della serie di versioni di Octave 3.8.x è un'interfaccia utente grafica. È l'unica cosa che gli utenti hanno richiesto più spesso negli ultimi anni e ora è quasi pronta. Ma poiché non è così lucido come vorremmo, abbiamo deciso di aspettare fino alla serie di versioni 4.0.x prima di rendere la GUI l'interfaccia predefinita (fino ad allora, puoi usare l'opzione --force-gui per avviare la GUI ).
Novità della versione 4.0.3:
- Una delle più grandi novità della serie di versioni di Octave 3.8.x è un'interfaccia utente grafica. È l'unica cosa che gli utenti hanno richiesto più spesso negli ultimi anni e ora è quasi pronta. Ma poiché non è così lucido come vorremmo, abbiamo deciso di aspettare fino alla serie di versioni 4.0.x prima di rendere la GUI l'interfaccia predefinita (fino ad allora, puoi usare l'opzione --force-gui per avviare la GUI ).
Novità della versione 4.0.1:
- Una delle più grandi novità della serie di versioni di Octave 3.8.x è un'interfaccia utente grafica. È l'unica cosa che gli utenti hanno richiesto più spesso negli ultimi anni e ora è quasi pronta. Ma poiché non è così lucido come vorremmo, abbiamo deciso di aspettare fino alla serie di versioni 4.0.x prima di rendere la GUI l'interfaccia predefinita (fino ad allora, puoi usare l'opzione --force-gui per avviare la GUI ).
Novità della versione 4.0.0:
- Una delle più grandi novità della serie di versioni di Octave 3.8.x è un'interfaccia utente grafica. È l'unica cosa che gli utenti hanno richiesto più spesso negli ultimi anni e ora è quasi pronta. Ma poiché non è così lucido come vorremmo, abbiamo deciso di aspettare fino alla serie di versioni 4.0.x prima di rendere la GUI l'interfaccia predefinita (fino ad allora, puoi usare l'opzione --force-gui per avviare la GUI ).
Novità nella versione 3.8.2:
- Una delle più grandi novità della serie di versioni di Octave 3.8.x è un'interfaccia utente grafica. È l'unica cosa che gli utenti hanno richiesto più spesso negli ultimi anni e ora è quasi pronta. Ma poiché non è così lucido come vorremmo, abbiamo deciso di aspettare fino alla serie di versioni 4.0.x prima di rendere la GUI l'interfaccia predefinita (fino ad allora, puoi usare l'opzione --force-gui per avviare la GUI ).
Novità della versione 3.8.0:
- Una delle più grandi nuove funzionalità di Octave 3.8 è un'interfaccia utente grafica. È l'unica cosa che gli utenti hanno richiesto più spesso negli ultimi anni e ora è quasi pronta. Ma poiché non è così lucido come vorremmo, abbiamo deciso di aspettare fino alla serie di versioni 4.0.x prima di rendere la GUI l'interfaccia predefinita (fino ad allora, puoi usare l'opzione --force-gui per avviare la GUI ).
- Data la lunghezza del tempo e del numero di correzioni di bug e miglioramenti rispetto all'ultima ottava versione principale, abbiamo anche deciso di non ritardare il rilascio di tutti questi nuovi miglioramenti più solo per perfezionare l'interfaccia grafica. Quindi, per favore, goditi la versione 3.8 di Octave e l'anteprima della nuova interfaccia grafica. Riteniamo che funzioni ragionevolmente bene, ma sappiamo anche che ci sono alcuni ovvi punti critici e molte cose che potrebbero essere migliorate.
Novità della versione 3.4.0:
- Le librerie BLAS e LAPACK sono ora necessarie per costruire Octave. Il sottoinsieme delle librerie BLAS e LAPACK di riferimento è stato rimosso dai sorgenti Octave.
- La funzione `lookup 'è stata estesa per essere più utile per la ricerca binaria generica. Usando questo miglioramento, la funzione ismember è stata riscritta per prestazioni significativamente migliori.
- Le matrici reali, intere e logiche, se utilizzate nell'indicizzazione, memorizzeranno nella cache il valore index_vector interno (indici a base zero) se utilizzate correttamente come indici, eliminando la penalità di conversione per l'indicizzazione successiva da parte della stessa matrice. In particolare, ciò significa che non è più necessario evitare l'indicizzazione ripetuta da parte di array logici che utilizzano find per motivi di prestazioni.
- Le matrici logiche vengono ora trattate in modo più efficiente se utilizzate come indici. Octave manterrà l'indice come una maschera logica a meno che il rapporto di elementi reali sia abbastanza piccolo, utilizzando un codice specializzato. In precedenza, tutte le matrici logiche venivano sempre prima convertite in vettori di indice. Ciò si traduce in un risparmio sia di memoria che di tempo di calcolo.
- Le funzioni `sub2ind 'e` ind2sub' sono state reimplementate come funzioni compilate per prestazioni migliori. Queste funzioni sono ora più veloci, possono fornire risultati più economici per gli intervalli e possono riutilizzare il meccanismo della cache dell'indice descritto nel paragrafo precedente.
- Gli equivalenti di funzione incorporati agli operatori associativi (`plus ',` times', `mtimes ',` and' e `or ') sono stati estesi per accettare più argomenti. Ciò è particolarmente utile per sommare (moltiplicare, ecc.) Elenchi di oggetti (di tipi possibilmente distinti):
- matrix_sum = plus (matrice_list {:});
- È stato implementato un tipo di oggetto FTP basato su libcurl. Questi oggetti consentono di gestire connessioni ftp, download e upload. Ad esempio,
- fp = ftp ("ftp.octave.org); cd (fp," gnu / octave "); mget (fp," octave-3.2.3.tar.bz2 "); close (fp);
- Il comportamento predefinito di "assert (osservato, atteso)" è stato allentato per utilizzare un controllo meno rigoroso che non richiede che i valori interni corrispondano. Ciò evita che i test precedentemente validi si interrompano a causa delle nuove classi interne introdotte nelle future versioni di Octave.
- Ad esempio, tutte queste asserzioni erano vere in Octave 3.0.x ma false in 3.2.x a causa di nuove ottimizzazioni e miglioramenti:
- assert (2 * linspace (1, 5, 5), 2 * (1: 5)) assert (zero (0, 0), []) assert (2 * uno (1, 5), (2) (quelli (1,5)))
- Il comportamento delle funzioni di libreria `ismatrix ',` issquare' e `issymmetric 'è stato modificato per una migliore coerenza. La funzione `ismatrix 'ora restituisce true per tutte le matrici numeriche, logiche e di carattere 2-D o N-D. In precedenza, `ismatrix 'restituiva false se la prima o la seconda dimensione era zero. Quindi, `ismatrix ([]) 'era falso, mentre` ismatrix (zeri (1,2,0))' era vero.
- La funzione `issquare 'ora restituisce uno scalare logico ed è equivalente all'espressione
- ismatrix (x) & amp; & amp; ndims (x) == 2 & amp; & amp; righe (x) == colonne (x)
- La dimensione non viene più restituita. Di conseguenza, `issquare ([]) 'ora risulta vero. La funzione `issymmetric 'ora controlla la simmetria invece di Hermitianness. Per quest'ultimo, è stato creato ishermitian. Inoltre, viene restituito lo scalare logico anziché la dimensione, quindi "issymmetric ([])" è ora vero. Le maniglie delle funzioni sono ora a conoscenza delle funzioni sovraccaricate. Se una funzione è sovraccaricata, la maniglia determina al momento del suo riferimento quale funzione chiamare. Non è necessario che esista una versione non sovraccaricata.
- Le funzioni di overloading per le classi integrate (double, int8, cell, ecc.) sono ora compatibili con Matlab.
- Le maniglie delle funzioni possono ora essere confrontate con gli operatori == e! =, così come la funzione `isequal '.
- Le prestazioni di concatenazione (usando []) e le funzioni `cat ',` horzcat' e `vertcat 'sono state migliorate per gli array multidimensionali.
- Gli operatori di assegnazione delle operazioni + =, - =, * = e / = ora si comportano in modo più efficiente in alcuni casi. Ad esempio, se M è una matrice e S uno scalare, quindi l'istruzione
- M + = S;
- opererà sui dati di M sul posto se non è condiviso da un'altra variabile, di solito aumentando sia l'efficienza di tempo che di memoria. Sono interessate solo le combinazioni comuni selezionate, ovvero: matrice + = matrice matrice - = matrice matrice. * = Matrice matrice ./= matrice
- matrice + = matrice scalare - = matrice scalare * = matrice scalare / = scalare
- matrice logica | = matrice logica logica matrice & amp; = matrice logica
- dove matrice e scalare appartengono alla stessa classe. Il lato sinistro deve essere un semplice riferimento di variabile.
- Inoltre, quando gli operatori unari si verificano nelle espressioni, Octave tenterà anche di eseguire l'operazione sul posto se si tratta di un argomento temporaneo.
- L'effetto degli operatori di confronto (, =) applicati ai numeri complessi è cambiato per essere coerente con l'ordinamento rigoroso definito dalle funzioni "max", "min" e "sort". Più in particolare, i numeri complessi vengono confrontati mediante il confronto lessicografico delle coppie `[abs (z), arg (z)] '. In precedenza, venivano confrontate solo le parti reali; questo può essere banalmente ottenuto avvolgendo gli operandi in real ().
- La semplificazione automatica dei risultati complessi del calcolo è cambiata. Ora Octave semplificherà qualsiasi numero complesso con una parte immaginaria pari a zero o una qualsiasi matrice complessa con tutti gli elementi che hanno zero parti immaginarie in un valore reale. In precedenza, questo era fatto solo per zeri positivi. Nota che il comportamento della funzione complessa è invariato e produce ancora un valore complesso anche se la parte immaginaria è zero.
- Come effetto collaterale del refactoring del codice in liboctave, le operazioni logiche binarie sono ora più facilmente riconducibili alle ottimizzazioni del compilatore e sono quindi significativamente più veloci.
- Octave ora consente i metodi "subsasgn" definiti dall'utente per ottimizzare le copie ridondanti. Per ulteriori informazioni, consultare il manuale.
- Gestione della divisione della matrice più efficiente. Octave è ora in grado di gestire le espressioni M 'V M.' V V / M
- (M è una matrice e V è un vettore) in modo più efficiente in determinati casi. In particolare, se M è triangolare, tutte e tre le espressioni saranno gestite da una singola chiamata a xTRTRS (da LAPACK), con i flag appropriati. In precedenza, tutte e tre le espressioni richiedevano una trasposizione fisica di M.
- Gestione più efficiente di determinate operazioni miste a matrice reale complessa. Ad esempio, se RM è una matrice reale e CM una matrice complessa, RM CM
- può ora essere valutato come
- complesso (RM real (CM), RM imag (CM))
- o come
- complex (RM) CM,
- a seconda delle dimensioni. Il primo modulo richiede più tempo e copia, ma dimezza il conteggio FLOP, che normalmente offre prestazioni migliori se RM ha abbastanza righe. In precedenza, veniva sempre utilizzato il secondo modulo.
- La divisione della matrice è influenzata allo stesso modo.
- Gestione più efficiente dei fattori di matrice triangolare restituiti dalle fatture. Le funzioni per calcolare fatture QR, LU e Cholesky ora restituiranno automaticamente i fattori della matrice triangolare con il set matrix_type interno appropriato, in modo che non debba essere calcolato quando la matrice viene utilizzata per la divisione.
- La funzione built-in `sum 'ora gestisce la somma non nativa (cioè la somma a doppia precisione degli ingressi singoli o interi) in modo più efficiente, evitando una conversione temporanea dell'intero array di input in doppio. Inoltre, `sum 'può ora accettare un argomento di opzione extra, usando un algoritmo di sommatoria compensato piuttosto che una somma semplice, che migliora significativamente la precisione se si verifica un sacco di cancellazione nella sommatoria.
- La funzione built-in `bsxfun 'ora usa il codice ottimizzato per alcuni casi in cui i manici dell'operatore incorporati sono passati. Vale a dire, le ottimizzazioni riguardano gli operatori` plus', `minus ',` times', `ldivide ' , `rdivide ',` power', `and ',` or' (per gli array logici), gli operatori relazionali `eq ',` ne', `lt ',` le', `gt ',` ge', e le funzioni `min 'e` max'. Le ottimizzazioni si applicano solo quando entrambi gli operandi sono della stessa classe built-in. Le operazioni miste reali / complesse e singole / doppie dapprima convertiranno entrambi gli operandi in un tipo comune.
- Le funzioni `strfind 'e` strrep' ora hanno implementazioni compilate, facilitando una ricerca e una sostituzione significativamente più efficienti nelle stringhe, specialmente con pattern più lunghi. Il codice di `strcat 'è stato vettorializzato e ora è molto più efficiente quando molte stringhe sono concatenate. Le funzioni `strcmpi 'e` strncmpi' sono ora funzioni integrate, che offrono prestazioni migliori.
- Lo stile Matlab che ignora gli argomenti delle funzioni di input e output usando tilde (~) ora è supportato. Gli argomenti di output ignorati possono essere rilevati da una funzione usando la funzione built-in `isargout '. Per maggiori dettagli, consultare il manuale.
- Il tipo di dati dell'elenco, deprecato dall'introduzione delle celle, è stato rimosso.
- La funzione accumarray è stata ottimizzata e ora è notevolmente più veloce in alcuni casi importanti.
- Il comportamento delle funzioni isreal e isnumeric è stato modificato per essere più compatibile con Matlab.
- Il numero intero di matematica e amp; avvisi di conversione (Octave: int-convert-nan, Octave: int-convert-non-int-val, Octave: int-convert-overflow, Octave: int-math-overflow) sono stati rimossi.
- rem e mod sono ora funzioni integrate. Gestiscono anche i tipi interi in modo efficiente utilizzando l'aritmetica dei numeri interi.
- L'indicizzazione sparsa e l'assegnazione indicizzata sono state in gran parte riscritte. Poiché Octave utilizza la memorizzazione di colonne compresse per matrici sparse, l'attenzione principale è dedicata alle operazioni che manipolano intere colonne. Tali operazioni sono ora significativamente più veloci, così come altri casi importanti.
- Inoltre, è ora possibile pre-allocare una matrice sparsa e successivamente riempirla per incarichi, a condizione che soddisfino determinate condizioni. Per ulteriori informazioni, consultare la funzione `spalloc ', che non è più un semplice manichino. Di conseguenza, nzmax e nnz non sono più sempre uguali in Octave. Octave può anche produrre una matrice con nnz & lt; nzmax come risultato di altre operazioni, quindi dovresti usare coerentemente nnz a meno che tu non voglia usare nzmax (cioè lo spazio allocato per gli elementi non nulli).
- Anche la concatenazione sparsa viene influenzata e la concatenazione di matrici sparse, in particolare di raccolte più grandi, è ora significativamente più efficiente. Questo vale sia per l'operatore [] che per le funzioni cat / vertcat / horzcat.
- Ora è possibile utilizzare opzionalmente i driver xGESDD LAPACK per calcolare la scomposizione del valore singolare usando svd (), invece del default xGESVD, usando la configurazione pseudo-variabile svd_driver. Il driver xGESDD può essere fino a 6 volte più veloce quando vengono richiesti vettori singoli, ma si dice che sia un po 'meno robusto su matrici altamente mal condizionate.
- Le pseudo-variabili di configurazione, come page_screen_output o confirm_recursive_rmdir (o il sopraindicato svd_driver), ora accettano un'opzione "local" come secondo argomento, richiedendo la modifica da annullare quando viene restituita la funzione corrente: function [status, msg] = rm_rf (dir) confirm_recursive_rmdir (false, "local"); [status, msg] = rmdir (dir, "s"); ... endfunction Al ritorno, confirm_recursive_rmdir verrà ripristinato sul valore che aveva in ingresso alla funzione, anche se ci sono state successive modifiche alla variabile nella funzione rm_rf o in una qualsiasi delle funzioni che chiama.
- pkg ora accetta l'opzione -forge per il download e l'installazione automatica dei pacchetti da Octave Forge. Ad esempio, pkg install -forge general scaricherà automaticamente l'ultima versione del pacchetto generale e tenterà di installarlo. Non viene fornita alcuna risoluzione automatica delle dipendenze. Inoltre,
- lista pkg -forge può essere usato per elencare tutti i pacchetti disponibili.
- ** La rappresentazione interna dei dati delle strutture è stata completamente riscritta per rendere possibili determinate ottimizzazioni. I dati del campo possono ora essere condivisi tra le strutture con chiavi uguali ma diverse dimensioni o valori, rendendo le operazioni che preservano i campi più velocemente. Lo storage economico è ora utilizzato per le strutture scalari (proprio come la maggior parte degli altri scalari), rendendo il loro utilizzo più efficiente in termini di memoria. Alcune operazioni di tipo array su strutture (concatenazione, cellfun uniforme, num2cell) hanno ottenuto una significativa accelerazione. Inoltre, la classe octave_scalar_map ora fornisce un'interfaccia più semplice per lavorare con strutture scalari all'interno di una funzione C ++ DLD.
- ** Sono disponibili due nuovi formati per la visualizzazione dei numeri:
- formato short eng format long eng
- Entrambi mostrano numeri in notazione tecnica, ovvero mantissa + esponente in cui l'esponente è un multiplo di 3.
- ** Le seguenti funzioni sono nuove in Octave 3.4:
- accumdim erfcx nfields pqpnonneg uigetdir bitpack fileread nth_element quadcc uigetfile bitunpack fminbnd onCleanup randi uiputfile blkmm fskipl pbaspect repelems uimenu cbrt ifelse pie3 reset whitebg curl ishermitian powerset rsf2csf chop isindex ppder saveas daspect luupdate ppint spread divergenza unione ppjumps textread
- ** L'uso della funzione immagine per visualizzare immagini con programmi esterni come display, xv e xloadimage non è più supportato. Anche la funzione image_viewer è stata rimossa.
- ** Il comportamento delle assegnazioni della struct ai valori non-struct è stato modificato. In precedenza, era possibile sovrascrivere un valore arbitrario: a = 1; a.x = 2;
- Questo non è più possibile a meno che a sia una matrice vuota o un array di celle.
- ** La funzione dlmread è stata estesa per consentire la specifica di un valore personalizzato per i campi vuoti.
- ** Le funzioni dlmread e dlmwrite sono state modificate per accettare gli ID dei file (come restituiti da fopen) oltre ai nomi dei file.
- ** Octave ora può ottimizzare il sovraccarico dell'interprete di un handle di funzione anonimo, se la funzione chiama semplicemente un'altra funzione o gestisce con alcuni dei suoi parametri associati a determinati valori. Esempio: f = @ (x) sum (x, 1);
- Quando viene chiamato f, la chiamata viene inoltrata a @sum con la costante 1 aggiunta e la chiamata alla funzione anonima non si verifica nello stack di chiamate.
- Funzioni obsolete.
- Le seguenti funzioni sono state deprecate in Octave 3.2 e verranno rimosse da Octave 3.6 (o qualunque versione sia la seconda versione principale dopo la 3.2):
- create_set spcholinv splu dmult spcumprod spmax iscommand spcumsum spmin israwcommand spdet spprod lchol spdiag spqr loadimage spfind spsum mark_as_command sphums spsumsq mark_as_rawcommand spinv spvcat spatan2 spkron str2mat spchol splchol unmark_command spchol2inv split unmark_rawcommand
- Le seguenti funzioni sono state deprecate in Octave 3.4 e verranno rimosse da Octave 3.8 (o qualunque versione sia la seconda versione principale dopo 3.4):
- autocor cellidx gammai krylovb valori autocov dispatch glpkmex replot betai fstat is_global saveimage
- Per compatibilità con Matlab, mu2lin (x) è ora equivalente a mu2lin (x, 0).
- La libreria ARPACK è ora distribuita con Octave in modo che non debba più essere disponibile come dipendenza esterna durante la creazione di Octave.
Novità nella versione 3.2.3:
- Octave 3.2.3 è una versione di bug-fixing
Novità della versione 3.0.4:
- Octave 3.0.4 è una versione di bug-fixing. La maggior parte dei bug segnalati dal rilascio della versione 3.0.3 sono stati risolti. Si noti che Octave 3.0 è significativamente diverso da Octave 2.1.x, in particolare per quanto riguarda la grafica, la gestione dei percorsi e le variabili incorporate.
I commenti non trovato