Differenze tra Octave e MATLAB? [chiuso]


272

Sono un programmatore che conosce Python, Ruby e alcuni C che sta cercando di decidere se imparare GNU Octave o Matlab. So che hanno molto in comune , ma non mi è chiaro quanto sia simile la sintassi o anche le strutture dei dati. Tutti dicono di essere "simili", ma nessuno dice quanto siano realmente simili. Il link sopra mostra diversi esempi in cui sono sintatticamente simili o identici, è vero per l'intera lingua?

Sto cercando di imparare la lingua in generale per fare più elaborazioni scientifiche, possibilmente usando alcune librerie di analisi delle immagini. So che ci sono molte altre lingue in cui posso programmare, ma i miei consulenti affermano che conoscere MATLAB o Octave è cruciale nelle scienze.

Inoltre, Matlab vale il costo? Non ho molti soldi, ma se ci sono differenze importanti nelle biblioteche o altrove, sono sicuro che potrei trovare i soldi.


8
Dato che sei uno studente, vale la pena verificare se la tua scuola fornisce matlab agli studenti gratuitamente / a buon mercato; sia le mie scuole universitarie che quelle universitarie lo fanno, il che rende un po 'più facile decidere di andare con Matlab.
Dougal,

23
Sì, ma quando lascia l'università e va in qualche centro di ricerca, dovrà comprarlo e per allora conoscerà solo Matlab e non alternative. Quindi, pensando a lungo termine, se vuoi fare una scienza nella scienza che sembra volerlo, non dovresti ignorarlo. Per non parlare del fatto che tali licenze di solito non possono essere utilizzate nemmeno per i cluster.
carandraug,

2
Mentre sei uno studente dovresti essere in grado di ottenere una licenza matlab per circa 100 dollari (USD). Concesso se si desidera che alcune delle altre cassette degli strumenti siano 29 USD in più per cassetta degli attrezzi. Quindi, non sapendo quali toolbox potresti desiderare / avere bisogno, è difficile giustificare il costo.
Ben A.

23
+1 Ho appena iniziato a studiare Octave oggi perché attualmente sto studiando Machine Learning e l'insegnante mi ha consigliato di imparare Octave (perché è gratuito, perché METLAB è costoso e perché lo studente sarà molto più produttivo facendo funzionare l'algoritmo della macchina prima usando prima Octave o METLAB, poi una volta funzionante, poi passa a Java o C ++)
Anthony,

7
Ti consiglierei di usare python + opencv
gukoff il

Risposte:


235

Invece di fornirti un elenco completo delle differenze, ti darò la mia opinione in merito.

Se leggi attentamente la pagina wiki che fornisci, vedrai spesso frasi come "Octave supporta entrambi, mentre MATLAB richiede il primo" ecc. Ciò dimostra che gli sviluppatori di Octave cercano di rendere la sintassi di Octave "superiore" a quella di MATLAB.

Questo atteggiamento fa perdere completamente lo scopo a Octave. L'idea alla base di Octave è (o è diventata , dovrei dire, vedere i commenti qui sotto) di avere un'alternativa open source per eseguire m-code. Se cerca di essere "migliore", cerca quindi di essere diverso , il che non è in linea con i motivi per cui la maggior parte delle persone lo usa. Nella mia esperienza, eseguire cose sviluppate in MATLAB non funziona mai in una sola volta, tranne per le cose davvero semplici, davvero brevi - Per qualsiasi funzione considerevole, devo sempre tradurre molte cose prima che funzioni in Octave, se non riscriverlo da zero. Come sia meglio , davvero non vedo ...

Inoltre, se impari Octave, in Octave è consentita molta sintassi non consentita in MATLAB. Significato: il codice scritto in Octave spesso non funziona in MATLAB senza numerose conversioni. Inoltre, non è compatibile al contrario!

Potrei andare avanti: MathWorks ha molti toolbox per MATLAB, c'è Simulink e i suoi prodotti correlati per i quali non esiste un equivalente in Octave (sì, dovresti pagare per tutto ciò. Ma spesso il tuo datore di lavoro / scuola lo fa comunque e, almeno, esiste almeno ), comprovata conformità a numerosi standard di settore, strumenti di test, strumenti di convalida, sistemi di gestione dei requisiti, generazione di report, una comunità e una base di utenti molto più ampia, ecc. ecc. ecc. MATLAB è solo una piccola parte di qualcosa di molto più grande. Octave è ... solo Octave.

Quindi, il mio consiglio:

  • Scopri se la tua scuola pagherà per MATLAB. Spesso lo faranno.
  • In caso contrario, e se riesci a racimolare i soldi, acquista MATLAB e impara a usarli correttamente. A lungo termine è la decisione migliore.
  • Se davvero non riesci a ottenere i soldi, usa Octave, ma impara la sintassi di MATLAB e stai lontano dalla sintassi di Octave. (Vedi nota)

Perché questo ultimo punto? Perché nelle scienze ci sono spesso basi di codice di grandi dimensioni interamente scritte in MATLAB. Ci sono professori, ingegneri, studenti, programmatori professionisti, un sacco di persone che conoscono tutti gli intricati dettagli cruenti di MATLAB e non di Octave.

Se si ottiene un nuovo lavoro, e tutti nel tuo nuovo ufficio parla spagnolo, è una specie di arrogante per chiedere di tutti coloro che iniziano a parlare inglese da allora in poi, semplicemente perché si non si parla / come lo spagnolo. Lo stesso con MATLAB e Octave.

NB : se tutti i downvoter potessero semplicemente lasciare un commento con i loro argomenti e le ragioni per non essere d'accordo con me, sarebbe fantastico :)

Nota: Octave può essere eseguito in "modalità tradizionale" (includendo il flag --traditional all'avvio di Octave) che gli dà un errore quando viene usata una certa sintassi solo per Octave.


25
A proposito della mancanza di JIT, è già stato implementato nella versione di sviluppo di Octave. Non so quando verrà rilasciato, ma l'ho costruito e la differenza è enorme per il codice loopy. E per stare lontano dalla sintassi di Octave, c'è l'opzione --traditional di Octave. Non sto dicendo che il codice Matlab venga sempre eseguito in Octave ma questo sta migliorando molto con ogni versione e la compatibilità è una delle loro priorità (per non parlare del fatto che anche versioni diverse di Matlab hanno abbastanza incompatibilità tra di loro).
carandraug,

14
E ciò che chiami è attenersi a una sintassi superiore ... se avessi la libertà di cambiare Matlab, aggiungere una sintassi aggiuntiva o funzioni diverse, non è vero? Queste sono funzionalità implementate dagli utenti e non compromettono la compatibilità. Più spesso, le cose nuove vengono respinte per questo. L'idea è che il linguaggio Matlab è un sottoinsieme del linguaggio Octave. Se pensi che l'idea sia fantastica, allora dovresti aderire perché è un progetto della comunità e ha le caratteristiche che la comunità si preoccupa di sviluppare.
carandraug,

19
@RodyOldenhuis non dovrebbe essere un clone. Sviluppo Octave non è stato avviato in questo modo, appena ricevuto sempre più spinto in questa direzione da parte degli utenti che tengono le patch che presentano per essa sciencedirect.com/science/article/pii/S0959152412000911~~V~~3rd
carandraug

9
Il produttore di qualsiasi strumento di programmazione MAI è mai stato ritenuto responsabile di un bug?
Martin Beckett,

6
@carandraug: ah al diavolo. La correttezza è più importante di tutto ciò :)
Rody Oldenhuis,

79

Un link più completo all'elenco delle differenze è nelle FAQ di Octave . In teoria, tutto il codice che viene eseguito in Matlab dovrebbe essere eseguito in Octave e gli sviluppatori Octave trattano l'incompatibilità con Matlab come bug. Quindi la risposta alla tua prima domanda è sì in teoria. Ovviamente, tutti i software hanno bug, né Octave né Matlab (sì, anche Matlab) sono al sicuro da essi. Puoi segnalarli e qualcuno proverà a risolverli

Octave ha anche funzionalità extra , molte delle quali sono sintassi extra che a mio avviso rendono il codice più leggibile e più sensato, specialmente se sei abituato ad altri linguaggi di programmazione.

Ma c'è di più in Octave oltre al semplice costo monetario. Octave è gratuito anche nel senso di libertà, è libero, ma non penso che questo sia il posto giusto per sfogare sulla libertà del software.

Faccio l'elaborazione delle immagini solo in Octave e trovo che il pacchetto di immagini soddisfi le mie esigenze. Non so, tuttavia, quale sarà il tuo. Quindi la mia risposta a se vale il costo è no, ma sicuramente altri non saranno d'accordo.


23

MATLAB è, innanzitutto, un'offerta commerciale. Pertanto, tutto in MATLAB funziona praticamente fuori dagli schemi. Tutte le funzionalità di base sono solide e se stai lavorando a un progetto speciale, MATLAB probabilmente ha un componente aggiuntivo che può venderti e aggiungere molti altri file .m specifici per il dominio. Non è economico, ma funziona e farà il lavoro senza lamentarsi.

Octave mostra sempre le sue radici open-source, le informazioni vogliono essere libere. È gratuito e ti ricorderà che è gratuito in ogni occasione. È sviluppato da volontari che odiano Windows con passione. Pertanto Octave funziona su Windows a malincuore. È abbastanza sorprendente che esistano tante funzionalità MATLAB quante ne sono.

Ma ecco il problema. Ogni volta che provi a fare qualcosa di più che banalmente complesso, Octave si rompe improvvisamente in modi sottili e difficili da capire. Spiacenti, il driver del terminale ha avuto un overflow da qualche parte in profondità nel livello OpenGL. Non puoi stampare. Oops - le trame di figure fanno cose strane con i loro caratteri. Buona fortuna a capire perché. Spiacenti, esiste una dipendenza nascosta tra Octave e qualche altro oscuro software libero, quindi non verrà compilato. Buona fortuna a capire quale sia.

E la risposta di Ottava è ehi! È un software gratuito! Hai tutto il codice sorgente, puoi correggere tu stesso tutti quei bug! Forse se avessi tempo e risorse infinite tra le mani, potrei passare tutto il mio tempo a correggere bug nel software libero, ma personalmente no. Se lavorassi nel mondo accademico, potrei.

Quindi, in sostanza, la questione se scegliere MATLAB o Octave si riduce a una domanda. È interessante notare che questa domanda è sempre la stessa, quando si sceglie tra varianti software commerciali o gratuite.

E la domanda è:

Hai più soldi del tempo?


2
Un'altra domanda è: cosa usano le aziende in cui potresti finire per lavorare? Probabilmente Matlab per gli stessi motivi.
user276648

14

Octave è fondamentalmente una versione open source di MATLAB. È stato scritto per essere proprio questo. MATLAB ha una GUI molto bella che lo rende un po 'più facile da usare ma la prossima versione stabile di OCTAVE avrà anche una GUI, che ho testato nella versione instabile, e sembra fantastica. Octave è molto più difettoso perché è stato sviluppato e gestito da un gruppo di volontari, dove lo sviluppo di MATLAB è finanziato da milioni di dollari dall'industria. Sono ancora uno studente e sto usando una versione per studenti di MATLAB, ma sto pensando di passare a Octave una volta rilasciata la versione stabile con la GUI.

MATLAB è probabilmente molto più potente di Octave e gli algoritmi funzionano più velocemente, ma per la maggior parte delle applicazioni, Octave è più che adeguata ed è, a mio avviso, uno strumento straordinario completamente gratuito, in cui Octave è completamente gratuito.

Direi che usa MATLAB mentre puoi usare la versione accademica, ma il passaggio a Octave dovrebbe essere senza soluzione di continuità poiché usano esattamente la stessa sintassi.

Infine, c'è il problema di SIMULINK. Se si desidera eseguire la progettazione di sistemi di simulazione o controllo (probabilmente ci sono un milione di altri usi) SIMULINK è fantastico e viene fornito con MATLAB. Non credo che nessun altro si avvicini a questo, sebbene Scilab sia apparentemente una "buona" alternativa open source, non l'ho provato.

Pace.


"... perché è stato sviluppato e gestito da un gruppo di volontari, in cui lo sviluppo di MATLAB è finanziato da milioni di dollari dall'industria". La quantità di denaro in un progetto non è la causalità per la qualità e senza errori. La loro forse non è nemmeno una correlazione.
Gagarine,

"usano esattamente la stessa sintassi" No, non lo fanno.
Cris Luengo,

8

Ho appena iniziato a usare Octave. E ho visto persone usare Matlab. E una delle principali differenze di cui sopra è che Octave ha un'interfaccia a riga di comando e Matlab ha una GUI. Secondo me avere una GUI è ottimo per il debug. In Ocatve devi eseguire i comandi per vedere qual è la lunghezza di una matrice ecc., Ma in Matlab mostra bene tutto usando una buona interfaccia. Ma Octave è gratuito e buono per i compiti di base che faccio. Se sei sicuro di fare solo cose di base o non sei sicuro di ciò di cui hai bisogno in questo momento, scegli Octave. Puoi pagare per il Matlab quando ne senti davvero il bisogno.


2
Octave ha una GUI che è attualmente in beta. Usa il comando --force-gui quando esegui ottava.
ig343,

6
... e a partire da Octave versione 4, la GUI è l'interfaccia utente predefinita.
Ruslan,

7

La cosa che rende Matlab così popolare e speciale è la sua eccellente cassetta degli attrezzi in diverse discipline. Poiché il tuo obiettivo principale è imparare Matlab, quindi non c'è nulla di diverso se lavori con Octave o Matlab!

Andare e acquistare Matlab senza alcun toolbox interessante (che dipende fondamentalmente dal tuo maggiore) non è davvero una spesa ragionevole!

Puoi sicuramente iniziare bene con Octave e seguire tonnellate di tutorial su Matlab su Internet.


4

Non c'è molto che vorrei aggiungere alla risposta di Rody Oldenhuis. Di solito seguo la strategia che tutte le funzioni che scrivo dovrebbero essere eseguite in Matlab.

Alcune funzioni specifiche che collaudo su entrambi i sistemi, per i seguenti casi d'uso:

a) ottava non ha bisogno di un server delle licenze - ad es. se il tuo istituto non supporta le licenze locali. L'ho usato una volta in una situazione in cui il sistema su cui ho usato uno script non aveva alcuna connessione a Internet e stava per funzionare per molto tempo (in un angolo del laboratorio) e utilizzato da molti utenti diversi. Nota: non si tratta del costo della licenza, ma dei problemi tecnici correlati.

b) Octave supporta altre piattaforme, ad esempio Rasberry Pi ( http://wiki.octave.org/Rasperry_Pi ), che può tornare utile.


3

Le funzioni e le chiusure nidificate sono ora supportate da molte lingue, incluso MATLAB. JavaScript promuove le chiusure come principio di design di prima classe.

Purtroppo, Octave non supporta le chiusure (funzioni nidificate con ambito lessicale).

Secondo http://osdir.com/ml/octave-bug-tracker/2013-06/msg00210.html si potrebbe anche avere l'impressione che gli sviluppatori non vogliono o non siano in grado di farlo bene.

Questo romperà molto codice, in entrambi i modi. Nessuna soluzione alternativa.


Non sono più sicuro che questo sia più accurato. Le funzioni nidificate sono implementate in Octave e le ho trovate più versatili di quelle di Matlab: ad esempio, essere in grado di dichiarare funzioni (diverse da lambdas) all'interno di uno script, cosa impossibile con Matlab l'ultima volta che l'ho provato.
MayeulC

@MayeulC La parte più versatile in realtà taglia in entrambi i modi.
Wolfgang Kuehn,

0

Octave e matlab hanno molte somiglianze. Ma Octave è un'interfaccia a riga di comando. Devi digitare ogni comando nel prompt dei comandi, mentre matlab viene fornito con la migliore GUI. Prima di tutto ti consiglio di usare la versione per studenti di Matlab; dopo aver appreso le lezioni di base usa la gnu ottava permentaly. Ora gnu octave viene fornito con gui, ma ora è una versione di sviluppo. Ci sono alcuni front-end di gui per gnu ottave, come guioctave, xoctave (non gratuito), IDE DomainMath, ecc.


2
la versione di sviluppo di ottava (3.7.5 in poi) viene fornita con una GUI nativa, che sembra piuttosto carina!
kjetil b halvorsen,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.