Ecco una soluzione pragmatica, benché temporanea, al problema di utilizzare Matlab su Mac con Intel.
Per prima cosa scaricate iTerm, da utilizzare al posto del terminale di Mac OS X, in modo da poterlo personalizzare come più si vuole.
Lanciate iTerm e dal menù Bookmark scegliete "Mange Bookmark"
aggiungete un nuovo profilo, chiamatelo ad esempio "Matlab" e come comando inserite:
/Applications/Matlab7/bin/matlab -nojvm -nodisplay
che farà partire Matlab in modalità da riga di comando, cioè senza interfaccia grafica (peraltro quasi inutile in Matlab). Al bookmark Matlab potrete associare un profilo di colori (definito in Bookmarks>Manage Profiles>Display Profiles) ed eventualmente settarlo come default: in questo modo, ogni volta che aprirete iTerm partirà Matlab.
Ok, ora bisogna far funzionare il plot e le altre funzioni che generano grafici! Come fare? Il mitico Effe ci ha messo una pezza! Ha creato una funzione, chiamata
plotta.m che trovate qui, che si occupa di prendere l'output generato nella i-esima figura, salvarlo in un file PDF (viene salvato nella directory di lavoro) e aprirlo in Anteprima. Geniale! Per usarla fate così: mettete la funzione in una cartella, io consiglio di metterla in ~/Library/Matlab (la cartella Matlab createla voi). A questo punto aprite Maltab e digitate i comandiADDPATH /percorso cartella
SAVEPATH
Bene, ora dovete modificare i vostri m-File. La modifica è molto semplice: basta aggiungere infondo ad ogni script la funzione
plotta(i), dove i è il numero della figura da plottare! Naturalmente va aggiunto un plotta(i) per ogni figura che vorrete generare. Richiamare la funzione plotta in fondo, fa sì che il codice sia più facilmente "commentabile" per utilizzarlo quando ci si sposta su un altro computer.La funzione
plotta.m, per volere dello stesso Effe, è rilasciata sotto licenza "FCCV", cioè... fatene ciò che volete! Naturalmente è gradito un feedback nel caso voi modifichiate e miglioriate la funzione, per renderlo noto a tutti coloro che ne abbiano bisogno!UPDATE: ora è possibile anche scegliere il formato con cui salvare l'immagine. Il valore di default è PDF
Here is a pragmatic solution to run Matlab 7 on Mac Intel.
First of all download iTerm: it can be used instead of OS X Terminal, so you can freely customize it.
Run iTerm, go in Bookmarks>Manage Bookmarks: add a new profile, call it "Matlab" (for example) and in Command area write:
/Applications/Matlab7/bin/matlab -nojvm -nodisplay
this command is used to run Matlab without GUI, in command line mode. You can associate a display profile to the bookmark Matlab (define it in Bookmarks>Manage Profiles>Display Profiles) end you can set Matlab Bookmark as default, so everytime you start iTerm you start also Matlab.
OK, now: how to draw graphic? Effe creates for us a function (M-file), called
plotta.m, that display the output of the command figure, save it in the working directory as pdf and display it in Prewiev.app! Greate!!How to use it? You can download plotta.m, here: put this function in a directory, for example ~/Library/Matlab (you have to create the directory Matlab). Now open Matlab and write:
ADDPATH /Users/YUOURNAMEHOME/Library/Matlab
SAVEPATH
plotta(i), where "i" is the number of figure you want to display. You mus add one plotta(i) fore each figure you want to display. Adding plotta(i) at the end of the script is usefull to quickly comment this function when you use the script on another computer.The
plotta.m is relased under "DWIWYW" licens... what does it mean? Do Whit It Whatever You Want! Feedbak will be appreciated, if you modifie the function, tell us!UPDATE: now you can choose the extesion of the image! The default is PDF
'nuff said

13 comments:
Ma non l'hai provato quindi con l'interfaccia? :P
Tanto per vedere se hanno cambiato qualcosa..........
Cmq complimenti, adesso inizi a postare anche in inglese?
Grande Effe! Mi hai dato un'ideona...
Beh innanzi tutto questa cosa può essere utile per tutti i Mac, e anche per Linux, visto che l'interfaccia di Matlab fa schifo ovunque... e io preferisco di gran lunda usarlo da terminale...
Mi permetto se Jeby me lo concede di dare il mio parere:
- Io al posto di scaricare quella schifezza di iTerm, aprirei creerei un alias che avvia Matlab con un comando corto.. con molta fantasia, matlab!
Fate così: Aprite il terminale
cd
nano .bash_profile
ora nel file scrivete:
alias matlab = '/Applications/MATLAB7/.... ..../matlab'
dove i .... indicano tutto il percorso che punta all'eseguibile che non ricordo...
fatto ciò fate ctrl+o per salvare e crtl+x per uscire.
Riavviate il terminale ed ora per avviare matlab vi basterà scrivere matlab :D
Poi che ne dite se questa funzione di Effe la facciamo diventare un vero plot sostitutivo?
Così quando si cambia computer non bisogna modificare il codice.
Io pensavo di creare appunto una funzione che si chiama plot.m la quale ha in ingresso infiniti input (con varargin) come il plot di matlab + 1 input che è il numero della figure... così passerà tutti gli argomenti meno l'ultimo al plot-builtin e poi fa il salvataggio e l'apertura su file.
Che ne pensate?
Oppure se non vi piace l'alias si può sempre utilizzare una bella iconcina nel dock che chiama uno script Automator il quale a pre il terminale e matlab direttamente... stasera allora mi diverto.. tanto non devo uscire :D
Scusate sto usando troppo linux in questo periodo... in Mac OS gli alias dovete metterli in /etc/bashrc e non in .bash_profile
sorry
io preferisco usate iTerm... l'ho colorato come smultron, mentre il terminale che uso per le cose più "serie" ha un aspetto tutto suo...
l'idea di modificare il plot mi era venuta in mente, in realtà però bisognerebbe modificare la funzione figure. Però così non si può fare perché prima bisogna generare l'output, poi con gcf si recupera e si salva. Le ultime modifiche alla funzione (quelle non commentate) le ho fatte io, ma ancora non sono state approvate dall'autore.
Comunque per chi usa Mac Intel ci sono buone nuove:
http://www.mathworks.com/academia/student_version/intelmacbeta/
Io dico che si può fare, scommettiamo? :D
Intanto ho fatto il launcher per terminale, lo trovate qui
E' un applicazione, quindi basta che la copiate nella cartella Applicazioni e poi se volete la piazzate nel dock.
L'avevo fatto anch'io il flusso/Applicazione automator, il problema è che così mi trovo 2 icone nel dock... invece con iTerm mi sembra meglio. Tra l'altro con iTerm si possono fare i profili e lanciare altre applicazioni, tipo Octave ecc, e magari utilizzare lo stesso come editor (basta aprire un nuovo tab e usare nano, o emacs o quel che l'è!)
comunque... per Matlab ecc.. provate quest'icona creata per l'occasione:
http://img353.imageshack.us/img353/3218/ocatveaguamz9.png
Hmm... io me ne trovo una, perchè tanto l'icona del Terminale ce l'ho sempre sul dock in quanto lo uso per un sacco di cose...
Poi oh... son gusti...
grazie.
sono finalmente riuscito a far partire matlab dignitosamente anche ul mac book. mi sembra di essere tornato ai primi anni di università, quando era obbligatorio lavorare con il VI e tutto era riga di comando.
Dario
Questa tua guida mi e' stata molto utile, ti ringrazio molto. La universal binary e' uscita, ma penso che sia ugualmente utile segnalare che eì possibile utilizzare matlab da terminale e plottare i grafici senza troppi incasinamenti..io ho smanettato un po' e poi ho trovato la soluzione.. ho fatto cosi':
ho creato nella directory home un file .bash_profile e ho copiato le seguenti righe:
export PATH=$PATH:/Applications/MATLAB73/bin
export PATH=$PATH:/usr/X11R6/bin
export DISPLAY=:0.0
la prima rende matlab eseguibile da terminale, le altre due rendono term.app simile a x11...
poi:
source .bash_profile
fatto questo, apro X11 e il terminale,e nel terminale digito
matlab -nojvm -nosplash
se plotto un qualsiasi grafico, viene direttamente visualizzato su x11, senza bisogno di utilizzare script aggiuntivi, un po' come fa octave con aquaterm..io lo trovo comodo, visto che anche la versione universal binary ha una gui pietosa..:\
Scusa il commento lunghetto, mi sembrava utile :D
grazie, è un tip molto interessante!!
effe io ho provato il tuo plotta.m e funziona, solo che ogni tanto crasha e mi fa "Segmentation fault" e esce da matlab, cosa abbastanza rognosa perchè bisogna rifare tutto (variabili, funzioni e grafico). Sbaglio io? O c'è qualcosa che non va?
forse ti conviene aggiornare all'ultima versione o usare il tip di Nabiki
Posta un commento