Codici Matlab Scritto da ventus85 Martedì 24 Giugno 2008 23:22 Ecco un elenco di codici Matlab: dati. - Calcolo valore assoluto (modulo) Calcolo media e varianza Concatenare stringhe e conversione da numero a stringa Numero di Eulero Modificare un file fig in Matlab calcolo funzione di Eulero calcolo massimo comune divisore con l'algoritmo di Euclide creare un file e inserire dei dati Salvare un file (con la finestra che ti fa scegliere nome e dove salvarlo) e passargli dei concatenazione di matrici inserire un text-box e scrivere del testo dentro una figura creare una tabella con uitable Aggiornare dati nella uitable calcolo della distanza euclidea Per aggiungere un check box ad una figura Callback di un check box Carattere ' (apice/apostrofo) Vettore con elementi distinti errore "Array dimensions must match for binary array op" Confronto tra stringhe Si usa la funzione strcmp, che prende in ingresso le due stringhe. Restituisce 1 se sono equivalenti, 0 altrimenti. Esempio: strcmp ('.tiff', 'png') Calcolo valore assoluto (modulo) Si usa la funzione abs. Esempio: Y = abs(X) Calcolo della media e della varianza Dato un insieme di numeri X, la media si calcola con la funzione mean, mentre la varianza con la funzione var media_x=mean(x); 1 / 11 Codici Matlab Scritto da ventus85 Martedì 24 Giugno 2008 23:22 varianza_x=var(x); Concatenare stringhe e conversione da numero a stringa Basta usare la funzione strcat. Esempio: for k=1:4 name=strcat('Img',num2str(k),'.bmp') end name=strcat('Original',name) Restituirà: name = Img1.bmp name = img2.bmp name = Img3.bmp name = Img4.bmp 2 / 11 Codici Matlab Scritto da ventus85 Martedì 24 Giugno 2008 23:22 name = OriginalImg4.bmp Da notare che è stata usata anche la funzione num2str che serve a convertire un numero in una stringa. Numero di Eulero Per usare il numero di Eulero (conosciuto come e oppure come la base dei logaritmi Neperiani) in Matlab si usa exp. Esempio: exp(1) ans = 2.7183 Calcolo funzione di Eulero La funzione phi di Eulero φ(n), detta anche funzione totiente viene definita come il numero degli interi positivi minori di un intero positivo n tali che sono coprimi con n , cioè il MCD (massimo comune divisore) è 1. Codice function f_Eulero(n) phi=0; for i=1:(n-1) MCD=gcd(n,i); %calcola il massimo comune divisore if (MCD==1) phi=phi+1; end end phi=phi 3 / 11 Codici Matlab Scritto da ventus85 Martedì 24 Giugno 2008 23:22 torna su Calcolo massimo comune divisore con algoritmo di Euclide L' algoritmo di Euclide è uno degli algoritmi più antichi conosciuti: dati due numeri interi trova il massimo comune divisore (MCD). Tenendo nota dei quozienti ottenuti durante lo svolgimento dell'algoritmo, si possono determinare due interi p e q tali che ap + bq = MCD( a , b ). Questo è noto con il nome di algoritmo di Euclide esteso . Questi algoritmi possono essere usati, oltre che con i numeri interi, in ogni contesto in cui è possibile eseguire la divisione col resto, per esempio funziona anche nel caso di polinomi su un campo K. function f_Euclide(a,b) while (a ~= b) if a > b a = a - b; else b = b - a; end end display ('il massimo comun divisore è :') MCD=a torna su Creare un file ed inserire dei dati Con queste poche righe possiamo vedere come fare a creare un file ed inserirci dei dati (in questo caso degli esponenziali). 4 / 11 Codici Matlab Scritto da ventus85 Martedì 24 Giugno 2008 23:22 x = 1 : 0.1 : 2 ; A = [ x ;exp(x) ]; fileprova = fopen ( 'C:Matlab7workAIVProveprova2.txt', 'wt'); fprintf ( fileprova,'%6.2g %8.4gn' , A); fclose (fileprova); torna su Salvare un file (con la finestra che ti fa scegliere nome e dove salvarlo) e passargli dei dati. Con il comando uiputfile apro la finestra che mi farà scegliere dove salvare il file (percorso) e il nome. Poi uso save al quale gli passo percorso e nome del file (tra parentesi quadre così li concatena) e i dati. I dati passati devono avere gli apici perchè devono essere stringhe. Esempio: A=[10,2,40;35,35,11;5,7,11] [ fileName , pathName] = uiputfile( ... '*.mat' , 'Save features' ); if ischar(fileName); save([pathName fileName],'A'); end torna su Concatenazione di matrici Basta creare la prima matrice e concatenarla nella seconda aggiungendo le colonne necessarie per fare una nuova matrice. Esempio molto chiaro: 5 / 11 Codici Matlab Scritto da ventus85 Martedì 24 Giugno 2008 23:22 A=[1 2 3; 4 5 6] B=[A; 9 9 9] Viene B= 1 2 3 4 5 6 9 9 9 torna su Inserire un text-box e scrivere testo dentro una figura Si crea la figura e poi il box per il testo. E' possibile settare la posizione (devo passargli 4 parametri: posizione lungo l'asse x, lungo l'asse y, larghezza e altezza del box) e la stringa. mFigure = figure(); mTextBox = uicontrol('style','text'); set(mTextBox,'Position',[20 20 50 50]); set(mTextBox,'String','Hello World'); torna su Creare una tabella (con il comando uitable) Basta fare questi due passi: 6 / 11 Codici Matlab Scritto da ventus85 Martedì 24 Giugno 2008 23:22 1) creare una figura; 2) lanciare il comando uitable, passandogli la figura, le righe della tabella (per separare le righe usare ;) e il nome delle colonne. Nell'esempio creo una tabella di due righe e tre colonne che si chiamano A, B e C. f = figure; t = uitable(f, [0 1 2 ; 4 3 4], {'A', 'B', 'C'}); torna su Aggiornare dati nella uitable Dopo aver creato la uitable si utilizza il metodo setData. Esempio figure(); t = uitable({'a', 'b'}, {'col_1', 'col_2'}) t.setData({'c', 'd'}) 7 / 11 Codici Matlab Scritto da ventus85 Martedì 24 Giugno 2008 23:22 torna su Calcolo della distanza euclidea Calcolare la differenza Euclidea riga per riga di una matrice. Sia x=[x1 x2 x3] e sia y=[y1 y2 y3] Allora la differenza euclidea è: diff_eucl= sqrt ( (x1-y1)^2 + (x2-y2)^2 + (x3-y3)^2 ) dove con sqrt indico la radice quadrata e con ^ l'elevamento a potenza (in questo caso al quadrato). Codice Dati=[1,3,2;0,0,0;2,5,3] for i=1:3 for j=1:3 quaddiff=0; for k=1:3 quaddiff=quaddiff+(Dati(i,k)-Dati(j,k))^2; end distEucl(i,j)=sqrt(quaddiff); end end distEucl=distEucl torna su Per aggiungere un check box ad una figura 8 / 11 Codici Matlab Scritto da ventus85 Martedì 24 Giugno 2008 23:22 f= figure(); h = uicontrol('Style', 'checkbox','String', 'Selezionami',... 'Position', [430 250 100 20]); torna su Callback di un check box In questo si vuole creare una figura con un check box. Se il check box viene selezionato si stampa a video la scritta "Hello!Apollo14". f= figure(); h = uicontrol('Style', 'checkbox','String', 'Normalizzata',... 'Position', [430 250 100 20]); set(h,'Callback','display Hello!Apollo14') torna su Carattere ' (apice/apostrofo) Basta usare tre apici di seguito: ''' uno per aprire la stringa uno per il carattere ' e l'ultimo per chiudere la stringa. Se volessi scrivere {'1','2'} b=['{' '''1''' ',' '''2''' '}'] b= {'1','2'} Vettore con elementi distinti Data una matrice di elementi ottenere un vettore con tutti gli elementi distinti della matrice. 9 / 11 Codici Matlab Scritto da ventus85 Martedì 24 Giugno 2008 23:22 Esempio: => x = [10 30 23 9 15 8] unique(A(:).') Errore "Array dimensions must match for binary array op" Si verifica quando tentiamo un confronto tra due stringhe di lunghezza diversa. Esempio: st='ci' st2='ciao' st==st2 Con questo codice errore "Array dimensions must match for binary array op" perchè st un array di due, st2 è di quattro. Basta vederlo con size ( size(st), size(st2) ). 10 / 11 Codici Matlab Scritto da ventus85 Martedì 24 Giugno 2008 23:22 Questo/a opera è pubblicato sotto una Licenza Creative Commons . 11 / 11