Informatica per Scienze Geologiche LT a.a.2017-2018 Introduzione all’utilizzo di metodologie informatiche nella Geologia Docente: Prof. Carla Braitenberg, Dipartimento Matematica e Geoscienze, Via Weiss 1, Università di Trieste E-mail: berg@units.it Tel. 040 5582258
Funzioni create dall’utente E’ utile richiamare blocchi di programmi che vengono utilizzati frequentemente dall’esterno, senza doverli riprogrammare. Si definisce una funzione, con input e output, che svolge una certa operazione. Chiamata della funzione output input
Funzioni create dall’utente Vediamo la chiamata alla funzione in dettaglio >>function [out1,out2,out3] = nomefunz(input1,input2) Una funzione ha un output. Se piu’ di uno, le variabili vanno raggruppate in parentesi quadre. Una funzione ha uno o piu’ input Il nome della funzione e’ anche il nome dello script di matlab. Una volta chiusa la funzione, le variabili vengono cancellate dalla memoria. i nomi delle variabili in output devono avere corrispondenza nell’interno della funzione non e’ necessario richiamare tutte le variabili in output. - possiamo definire una funzione anche senza output. Una funzione che crea un plot non ha variabili in output
Esempio di funzione che non restitutisce valori in output Esempio di funzione che non restitutisce valori in output. Plot di tre sinusoidi sovrapposte. Chiamata da command line: plotsines(1/20,1/40,1/70) function plotsines(f1,f2,f3) switch nargin case 0 plotsines(1/20,1/50,1/100) otherwise x=linspace(0,100,1000); y=sin(x*pi*f1)+sin(x*pi*f2)+sin(x*pi*f3); figure plot(x,y) xlabel('x'); ylabel('y'); end
Call function from command line or from script: type on command line: plotsines(1/20,1/50,1/100) Be sure that the script plosines.m is in your working folder.
Operatori logici per controllare il flusso del programma- if/else/elseif Matlab in comune con altri programmi mette a disposizione un controllo logico. If condizione comandi end If condizione comandi elseif condizione else end If condizione comandi else end Per definire la condizione utilizziamo i simboli elencati nella pagina successiva.
Condizioni logiche in Matlab Uguale == Non uguale ~= Maggiore > Maggiore uguale >= Operatori logici: And & oppure && Or | oppure || Negazione: ~
Ripetiamo l’esempio delle tre sinusoidi Salviamo il seguente script con nome plotsines_flexible.m %plotsines_flexible % funzione mette in grafico tre sinusoidi function plotsines_flexible(f1,f2,f3) x=linspace(0,100,1000); if nargin==1 y=sin(x*pi*f1); elseif nargin==2 y=sin(x*pi*f1)+sin(x*pi*f2); elseif nargin==3 y=sin(x*pi*f1)+sin(x*pi*f2)+sin(x*pi*f3); end plot(x,y) xlabel('x'); ylabel('y');
Cicli di ripetizione For n= 1:100 comandi End La variabile del loop e’ un vettore. Nell’interno del blocco e’ uno scalare.Non e’ necessario che i valori del vettore siano conscutivi. Il blocco dei comandi: Tutti i comandi compresi fra la riga del for e la riga di end
Cicli di ripetizione - while Un loop generico e’ fattibile con while. Non necessita di conoscere il numero di iterazioni, ma poniamo una condizione logica. >> while condizione comandi >> end I comandi vengono eseguiti mentre la condizione viene soddisfatta. N=0 while N<10 N=N+1 end disp(‘finito!’)
Grafici cartesiani x=-pi:pi/100:pi; y=cos(4*x).*sin(10*x).*exp(-abs(x)); plot(x,y,'k-');
Grafico semi-logaritmico x=-pi:pi/100:pi; y=cos(4*x).*sin(10*x).*exp(-abs(x)); plot(x,y,'k-'); semilogx(x,y,'k');
Grafico semilogaritmico x=0:1:40; Y=10*exp(-abs(x)); figure plot(x,y,'k-'); semilogy(x,y,'k');
Esempio da prima: x=0:1:40; y=10*exp(-abs(x)); figure subplot(2,1,1) plot(x,y) subplot(2,1,2) semilogy(x,y,'k')