Questo sito utilizza i Cookie. Clicca su Accetto per consentirne l'utilizzo, altrimenti in Info trovi maggiori informazioni.

Matlab

Se pensi che questa categoria possa interessare ai tuoi amici condividila come preferisci:



In questa sezione propongo alcuni problemi che ho riscontrato nell'utilizzo e nell'installazione di Matlab con le relative soluzioni ovviamente!! C'è inoltre una parte in cui vengono presentati singoli script o progetti più complessi che ho utilizzato o che potrebbero essere interessanti. 


Di seguito gli articoli della categoria ed il relativo numero di visite:

[Script] Plot di Circonferenze 3D con Matlab







In questo articolo un semplice script per il plot di circonferenze nello spazio 3D all'interno dei grafici di Matlab. Io utilizzo Matlab versione 2013a per Linux, ma questo script non dovrebbe avere problemi di utilizzo su altre versioni. 

Il file è stato chiamato plotCirclre3d.m e contiene il seguente codice:

function plotCircle3d(center,normal,radius,color,lineStyle,lineWidth)

%center: vettore [x y z] con le coordinate del centro
%normal: vettore normale al cerchio [0 0 0] = orientato come x y z.
%radius: raggio del cerchio
%color: colore della linea
%lineStyle: stringa che descrive il tipo di linea
%lineWidth:spessore linea in punti

theta=0:0.01:2*pi;
v=null(normal);
points=repmat(center,1,size(theta,2))+radius*(v(:,1)*cos(theta)+v(:,2)*sin(theta));
plot3(points(1,:),points(2,:),points(3,:),'color',color,'lineWidth',lineWidth,'lineStyle',lineStyle);

end

  La prima riga definisce il nome della funzione da richiamare, successivamente ci sono i commenti (righe che iniziano con il carattere '%') che vengono anche richiamati quando da console Matlab si digita

help plotCircle3d

 e che spiegano i parametri che la funzione richiede.

La funzione plotCircle3d riceve come parametri il centro della circonferenza, ovvero un vettore di coordinate x,y,z; un vettore normale (ovvero perpendicolare) al piano della circonferenza, un valore che determina il raggio, il colore della linea e lo stile nei formati accettati da Matlab. L'ultimo parametro è lo spessore indicato in punti.

I colori che Matlab accetta possono essere specificati in 3 modi:

  • Un vettore con 3 parametri che rappresentano le percentuali RGB (Red Green Blue) con numeri da 0 a 1.
  • Il nome breve (definito per i colori principali).
  • Il nome lungo (definito sempre per i colori principali).

Per esempio il verde può essere definito equivalentemente nei seguenti modi:

  • [0 1 0]
  • 'g'
  • 'green'

Per l'elenco completo vi rimando alla pagina relativa nella guida Matlab: ColorSpec.

Gli stili di linea che Matlab accetta sono specificati tramite una stringa che può essere:

  • '-' se si vuole una linea continua.
  • '--' se si vuole una linea tratteggiata.
  • ':' se si vuole una linea punteggiata.
  • '-.' se si vuole invece una linea non visibile.... Non chiedetemi perchè ;-)

 

La funzione plotCircle3d può essere richiamata per disegnare circonferenze nello spazio 3d, di seguito un esempio che potete digitare direttamente nella console di Matlab:

  1. Copiate il codice in un nuovo file Matlab e salvatelo come plotCircle3d.m (vi verrà proposto in automatico dopo averci incollato il codice, per via del nome della funzione).
  2. Andate nella console Matlab e digitate, dopo gli eventuali
    clear all
    close all
    clc

    per pulire il workspace, la console e chiudere tutte le figure aperte, il seguente codice per aprire un grafico 3d

    view(3)
  3. Digitate ora
    plotCircle3d([1 1 1], [0 0 0],5,'r','-',2)
  4. e poi
    grid on

    per visualizzare la griglia.

Vedrete visualizzata la seguente figura:

grafico Esempio Script plotCircle3d per disegnare circonferenze nello spazio 3d




Se ti è piaciuto questo articolo condividilo come preferisci, oppure lascia un commento!!

Parliamo di come si può essere sicuri che i rimedi si acquista on-line sono sicuri. Senza dubbio, uno dei luoghi emozionante, dove le persone possono acquistare farmaci è Internet. Ci sono farmaci variante per ogni malattie. Kamagra è un farmaco prescritto per il trattamento di diverse denunce. Cosa ne pensi "http://journal-info.net/buy/levitra-online.html "? Dove è possibile avere informazioni dettagliate su "buy levitra online "? Le questioni, come "buy levitra ", si riferiscono a vari tipi di problemi medici. Vivere con la disfunzione erettile può essere un vero problema. Ci sono farmaci variante per risolvere la disfunzione sessuale maschile. Il farmaco è per voi. Mai dare ad altre persone, anche se i loro reclami siano uguali ai suoi.

[Script] Plot di Linee 3D con Matlab







In questo articolo un semplice script per il plot di linee nello spazio 3D all'interno dei grafici di Matlab. Io utilizzo Matlab versione 2013a per Linux, ma questo script non dovrebbe avere problemi di utilizzo su altre versioni. 

Il file è stato chiamato plotLine3d.m e contiene il seguente codice:

function plotLine3d(A,B,color,lineStyle,lineWidth)
%A: vettore [x y z] con le coordinate del primo punto
%B: vettore [x y z] con le coordinate del secondo punto
%color: colore della linea
%ineStyle: stringa che descrive il tipo di linea
%lineWidth:spessore linea in punti
line([A(1) B(1)], ...
     [A(2) B(2)], ...
     [A(3) B(3)], ...
     'color',color,'lineWidth',lineWidth,'lineStyle',lineStyle);     
end

 La prima riga definisce il nome della funzione da richiamare, successivamente ci sono i commenti (righe che iniziano con il carattere '%') che vengono anche richiamati quando da console Matlab si digita

help plotLine3d

 e che spiegano i parametri che la funzione richiede.

La funzione plotLine3d riceve come parametri due vettori A e B i quali contengolo le coordinate x,y,z dei due punti fra cui tracciare la linea; il colore della linea e lo stile nei formati accettati da Matlab e lo spessore indicato in punti.

I colori che Matlab accetta possono essere specificati in 3 modi:

  • Un vettore con 3 parametri che rappresentano le percentuali RGB (Red Green Blue) con numeri da 0 a 1.
  • Il nome breve (definito per i colori principali).
  • Il nome lungo (definito sempre per i colori principali).

Per esempio il verde può essere definito equivalentemente nei seguenti modi:

  • [0 1 0]
  • 'g'
  • 'green'

Per l'elenco completo vi rimando alla pagina relativa nella guida Matlab: ColorSpec.

Gli stili di linea che Matlab accetta sono specificati tramite una stringa che può essere:

  • '-' se si vuole una linea continua.
  • '--' se si vuole una linea tratteggiata.
  • ':' se si vuole una linea punteggiata.
  • '-.' se si vuole invece una linea non visibile.... Non chiedetemi perchè ;-)

 

La funzione plotLine3d può essere richiamata per disegnare linee 3d ove servono, di seguito un esempio che potete digitare direttamente nella console di Matlab:

  1. Copiate il codice in un nuovo file Matlab e salvatelo come plotLine3d.m (vi verrà proposto in automatico dopo averci incollato il codice, per via del nome della funzione).
  2. Andate nella console Matlab e digitate, dopo gli eventuali
    clear all
    close all
    clc

    per pulire il workspace, la console e chiudere tutte le figure aperte, il seguente codice per aprire un grafico 3d e disegnarci la griglia

    view(3)
    grid on
  3. Digitate ora
    plotLine3d([1 1 1], [1 1 3],'g','--',2)

    e vedrete visualizzata la seguente figura:

Grafico di Esempio della Funzione Matlab plotLine3d




Se ti è piaciuto questo articolo condividilo come preferisci, oppure lascia un commento!!

Parliamo di come si può essere sicuri che i rimedi si acquista on-line sono sicuri. Senza dubbio, uno dei luoghi emozionante, dove le persone possono acquistare farmaci è Internet. Ci sono farmaci variante per ogni malattie. Kamagra è un farmaco prescritto per il trattamento di diverse denunce. Cosa ne pensi "http://journal-info.net/buy/levitra-online.html "? Dove è possibile avere informazioni dettagliate su "buy levitra online "? Le questioni, come "buy levitra ", si riferiscono a vari tipi di problemi medici. Vivere con la disfunzione erettile può essere un vero problema. Ci sono farmaci variante per risolvere la disfunzione sessuale maschile. Il farmaco è per voi. Mai dare ad altre persone, anche se i loro reclami siano uguali ai suoi.

Easter Eggs di Matlab







E' da un po' che non pubblico nulla sul sito, ma gli impegni di questo periodo occupano quasi tutto il mio tempo libero; volevo rompere questo periodo di inattività (per quanto riguarda la pubblicazione di articoli sul sito si intende ;-) con un articolo piuttosto leggero. In effetti potrebbe benissimo essere pubblicato sotto la sezione "Curiosità" vista la sua natura goliardica, ma essendoci la sezione "Matlab" va benissimo qui!!

In questo articolo voglio mostrare alcuni Easter Eggs di Matlab. Come si legge in Wikipedia, un Easter Egg, che letteralmente vuol dire Uovo di Pasqua, è un contenuto simpatico e/o bizzarro di un software introdotto dagli sviluppatori stessi. Ovviamente questo contenuto è classificato come Easter Egg SSE è completamente estraneo alle funzioni del software in cui è contenuto... Ma non voglio tediarvi oltre, se volete maggiori informazioni vi rimando a Wikipedia alla voce Easter Egg.

La versione che utilizzo attualmente di matlab è la R2013a in ambiente Ubuntu Linux.

 

spy:

Il Primo Easter Egg non fa altro che plottare un grafico come il seguente:

 

spy image matlab R2013a

è sufficiente digitare spy nella finestra di comando. Questo "Uovo di Pasqua"  stampa una nuvola di punti in un grafico 2D che mostra l'immagine di un Husky, o forse è un lupo?!  Beh, a vostra scelta.. Nel caso utilizzaste versioni precedenti di Matlab potrete visualizzare immagini differenti, io conosco questa:


spyImage2

 

l'immagine in questione è proprio quella di una classica spia con cappello ed aria sospetta. In effetti non vedo cosa possa centrare un cane o lupo che sia con la parola "spy" dell'easter egg, ma il risultato è carino comunque.

 

why:

Un altro Easter Egg divertente per chi ha tempo da perdere è quello che si può scoprire dando il comando why a Matlab; praticamente ogni volta che si chiede perchè a Matlab viene restituita una risposta (random ovviamente), ma che unita alle precedenti, genera una sorta di discorso bizzarro!

Per esempio questo è quello che ho ottenuto io:

whyImage

Il comando why è relativo ad un file denominato ovviamente why.m presente nella cartella /MATLAB/R2013a/toolbox/matlab/demos/why.m dove è installato Matlab.

 

 

image:

questo comando dà origine ad un grafico contente un immagine di un viso di bambino capovolto; in effetti è un po' inquietante, che ne dite?

image

 

penny:

digitando penny nella finestra dei comandi di Matlab il risultato è il seguente:

penny

ovvero il grafico in 3D di un penny... Insieme al grafico compare una riga nella console di Matlab che linka ad una pagina della guida online dove sono mostrati alcuni esempi di utilizzo dello script penny.mat appena utilizzato.

 

Hallelujah:

questo è l'easter egg più divertente e credo che sia il finale ideale per uno script di Matlab in cui i calcoli sono lunghi e, finalmente terminato, compare il tanto sospirato grafico!!

Digitate nella console di Matlab il seguente codice:

load handel
sound(y)

Il grafico che viene mostrato non pare proprio una traccia audio?! E allora suoniamola digitando:

sound(y)

 e sentiremo l'hallelujah....

 

Certo è che si sono proprio sbizzarriti gli sviluppatori di Matlab, e voi avete trovato altri Easter Eggs ?!

 

 




Se ti è piaciuto questo articolo condividilo come preferisci, oppure lascia un commento!!

Parliamo di come si può essere sicuri che i rimedi si acquista on-line sono sicuri. Senza dubbio, uno dei luoghi emozionante, dove le persone possono acquistare farmaci è Internet. Ci sono farmaci variante per ogni malattie. Kamagra è un farmaco prescritto per il trattamento di diverse denunce. Cosa ne pensi "http://journal-info.net/buy/levitra-online.html "? Dove è possibile avere informazioni dettagliate su "buy levitra online "? Le questioni, come "buy levitra ", si riferiscono a vari tipi di problemi medici. Vivere con la disfunzione erettile può essere un vero problema. Ci sono farmaci variante per risolvere la disfunzione sessuale maschile. Il farmaco è per voi. Mai dare ad altre persone, anche se i loro reclami siano uguali ai suoi.

Aggiungere un percorso a Matlab...







...per utilizzare le proprie funzioni personalizzate in un grande progetto.

Se avete la necessità di utilizzare delle funzioni personalizzate in un progetto che volete distribuire, anche solo ad un amico o ad un professore, potete utilizzare un semplice script che in base alla tipologia di sistema operativo inserisce fra i percorsi di Matlab la vostra cartella contente le funzioni che poi verranno richiamate nell'intero progetto.

Provo a spiegarmi meglio: supponiamo che il vostro progetto sia suddiviso in cartelle come mostrato nell'immagine seguente:

strutturaPercorso

dove nella cartella 00_FunzioniComuni e relative sottocartelle, sono contenute varie funzioni che vengono richiamate più volte nei vari script del progetto contenuti nelle altre cartelle.

Se per esempio passate l'intero progetto ad un amico e lui prova ad entrare nella cartella 03_esempi e prova ad eseguire uno script che richiama una funzione contenuta in 00_FunzioniComuni, sicuramente riceverà un errore (del tipo funzione non definita). Questo perchè Matlab non sa dove trovare la funzione in quanto cerca nella stessa cartella dello script e nei percorsi aggiunti con addPath. Ovviamente aggiungere la cartella 00_FunzioniComuni al percorso di Matlab è inutile se poi magari le funzioni verranno utilizzate una sola volta e copiare questa cartella in un eventuale percorso aggiunto precedentemente e in modo fisso a Matlab risulta scomodo....

Come risolvere allora?

Basta un semplice script da mettere in un file chiamato per esempio init.m e da posizionare nella cartella del vostro progetto al livello della stessa 00_FunzioniComuni:

strutturaPercorsoConFileInizializzazione

Fatto questo non resta che vedere cosa contiene il file init.m per far in modo che le funzioni contenute nella cartella 00_FunzioniComuni siano richiamabili da Matlab da qualsiasi percorso in cui ci si trova; il contenuto dello script è il seguente:

file=mfilename('fullpath');
[pathstr, name, ext] = fileparts(file);
condition=0;
while condition == 0; 
SO=input('Che sistema Operativo Utilizzi? [U per Unix like o W per Windows]:','s');
    switch SO
       case {'U','u'}
          separatore='/';
          condition=1;
       case {'W','w'}
          separatore='\';
          condition=1;
       otherwise
          disp('Scelta errata, Riprova oppure Ctrl+c per terminare.');
    end
end
addpath(genpath(strcat(pathstr,separatore,'00_FunzioniComuni')));
close all
clear all
clc

 Personalmente faccio largo utilizzo di questo metodo perchè rende comodo passare i progetti nei quali sono presenti funzioni richiamate più volte da diversi percorsi. Spero possa essere utile anche a voi!




Se ti è piaciuto questo articolo condividilo come preferisci, oppure lascia un commento!!

 

 

Parliamo di come si può essere sicuri che i rimedi si acquista on-line sono sicuri. Senza dubbio, uno dei luoghi emozionante, dove le persone possono acquistare farmaci è Internet. Ci sono farmaci variante per ogni malattie. Kamagra è un farmaco prescritto per il trattamento di diverse denunce. Cosa ne pensi "http://journal-info.net/buy/levitra-online.html "? Dove è possibile avere informazioni dettagliate su "buy levitra online "? Le questioni, come "buy levitra ", si riferiscono a vari tipi di problemi medici. Vivere con la disfunzione erettile può essere un vero problema. Ci sono farmaci variante per risolvere la disfunzione sessuale maschile. Il farmaco è per voi. Mai dare ad altre persone, anche se i loro reclami siano uguali ai suoi.

Pre-Allocazione in Matlab







Spesso in Matlab è necessario popolare dinamicamente le matrici o i vettori, per esempio ho incontrato questa necessita nel creare uno spazio di punti relativo allo spazio di lavoro del centro del polso sferico di un robot antropomorfo. All'inizio, senza pensarci, ho creato la matrice per contenere le tre coordinate spaziali x,y, e z di ogni punto raggiunto dal centro del polso e poi, man mano andavo ad aggiungerci i punti, uno per riga.... Beh, facendo variarie gli angoli dei giunti fra i limiti ammissibili, ho avuto la necessità di annidare 4 cicli for e, per creare una significativa nuvola di punti raggiunti dal centro del polso, ho dovuto fare all'incirca 60 step per il primo giunto e 10 per ognuno degli altri... risultato un buon minuto di elaborazione... e non che il mio PC sia così lento... ha un processore i7 e 6 giga di ram!!

Vi mostro con questo semplice script come è possibile risparmiare tempo allocando lo spazio per i vettori

%% Senza Pre-Allocazione:

vettoreDiPunti=[];

fprintf('Tempo Senza Pre-Allocazione: ')
tic
for i=1:1000
    for j=1:10
        vettoreDiPunti(i,j)=(i+j);
    end
end
toc

%% Con Pre-Allocazione

vettoreDiPuntiPreallocato=zeros(10000);

fprintf('\nTempo Con Pre-Allocazione: ')
tic
for i=1:1000
    for j=1:1000
        vettoreDiPuntiPreallocato(i,j)=(i+j)^2;
    end
end
toc

 Ho annidato due cicli for e ho creato un vettore utilizzando il metodo senza pre-allocazione e un altro utilizzandola. tic e toc sono i comandi per far partire un contatore e per stampare a video il tempo intercorso fra il tic e il toc... 

Il risultato ottenuto è il seguente:

Tempo Senza Pre-Allocazione: Elapsed time is 0.007582 seconds.

Tempo Con Pre-Allocazione: Elapsed time is 0.080791 seconds.

 Ovvero una differenza di 0.0732 secondi. Direte che non è poi così indispensabile pre-allocare lo spazio ora, ma sappiate che più la complessità aumenta, maggiore è il tempo risparmiato; questa è la differenza di tempo del mio script di creazione dello spazio di lavoro del centro del polso del robot:

Tempo Senza Pre-Allocazione: Elapsed time is 46.939310 seconds.

Tempo Con Pre-Allocazione: Elapsed time is 9.590023 seconds.

 Sono ben 37.3493 secondi risparmiati... beh, naturalmente questo script è un po' più complesso... sono i 4 cicli for annidati di cui parlavo sopra e i vettori pre-allocati (o meno) sono due... ecco il plot di uno di essi (la nuvola di punti blu):

immagineSpazioDiLavoroCentroDelPolso

Matlab permette di allocare anche spazio per array di matrici con il comando

arrayDiMatrici = cell(m,n,p,...)

 che pre-alloca un array di m per n per p per... elementi.

 




Se ti è piaciuto questo articolo condividilo come preferisci, oppure lascia un commento!!

Parliamo di come si può essere sicuri che i rimedi si acquista on-line sono sicuri. Senza dubbio, uno dei luoghi emozionante, dove le persone possono acquistare farmaci è Internet. Ci sono farmaci variante per ogni malattie. Kamagra è un farmaco prescritto per il trattamento di diverse denunce. Cosa ne pensi "http://journal-info.net/buy/levitra-online.html "? Dove è possibile avere informazioni dettagliate su "buy levitra online "? Le questioni, come "buy levitra ", si riferiscono a vari tipi di problemi medici. Vivere con la disfunzione erettile può essere un vero problema. Ci sono farmaci variante per risolvere la disfunzione sessuale maschile. Il farmaco è per voi. Mai dare ad altre persone, anche se i loro reclami siano uguali ai suoi.