Matlab su Mac Intel: funziona (o quasi)
Matlab on Mac Intel: it works (kind of)

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 comandi

ADDPATH /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

Well, now you have to edit your M-File function: at the end of each script, add 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

Technorati Tags :

13 comments:

Lenny ha detto...

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?

Anonimo ha detto...

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?

Anonimo ha detto...

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

Anonimo ha detto...

Scusate sto usando troppo linux in questo periodo... in Mac OS gli alias dovete metterli in /etc/bashrc e non in .bash_profile

sorry

Jeby ha detto...

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/

Anonimo ha detto...

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.

Jeby ha detto...

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

Anonimo ha detto...

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...

d_oris ha detto...

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

Nabiki ha detto...

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

Jeby ha detto...

grazie, è un tip molto interessante!!

Giacomo ha detto...

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?

Jeby ha detto...

forse ti conviene aggiornare all'ultima versione o usare il tip di Nabiki