Sei sulla pagina 1di 20

G.

Petrucci “Complementi di Costruzione di Macchine”

1. INTRODUZIONE AL MATLAB
La schermata
Sulla schermata iniziale del Matlab, definita desktop, sono disponibili 4 finestre (windows) principali:
• la command window dove si possono eseguire direttamente i comandi e dove appaiono i risultati e le segnalazioni del
programma (errori di esecuzione, avvisi ecc..);
• il workspace dove sono riportate le caratteristiche di tutte le variabili memorizzate dal Matlab a seguito delle elaborazioni,
cioè nomi, tipo, dimensioni, spazio di memoria occupato, ecc…;
• la current directory dove sono riportati tutti i file matlab presenti nella directory utilizzata dal Matlab in quel momento;
• la command history che contiene tutti i comandi che sono stati eseguiti durante la sessione.
Queste finestre possono essere richiamate dal menù desktop. In caso di problemi di visualizzazione delle 4 finestre, accedere
al menù desktop, selezionare il sottomenù desktop layout, selezionare l’opzione default.
Uso diretto
• Sulla command window appare il prompt del matlab, cioè il simbolo >>.
• Nell’uso diretto si digitano i comandi accanto al prompt separati da “,” (virgola) o “;” (punto e virgola)
[es: >>x=3.14;sin(x)].
• Per eseguire il comando si preme il tasto invio.
• Se si pone “;” alla fine del comando, il risultato non viene visualizzato.
• È possibile usare il tasto “↑” per visualizzare accanto al prompt le istruzioni già eseguite, modificarle ed eseguirle
nuovamente.
Uso mediante programmi, script e funzioni
• I programmi sono sequenze di istruzioni aventi lo scopo di eseguire elaborazioni matematiche complesse.
• In programmi matlab vengono scritti come file di testo e salvati assegnando un nome e l’estensione “.m”: i “file m”.
• Il nome del file deve iniziare con una lettera, non deve contenere spazi, non deve contenere vocali accentate !!!!!!.
• È opportuno assegnare un nome che ricordi la funzione svolta dal programma.
• Per scrivere i programmi è opportuno utilizzare l’apposito editor che consente anche di eseguire l’intero programma (dal
menù debug mediante il comando run) o singole righe di istruzioni (selezionandole con il mouse e premendo F9 oppure
tasto destro, evaluate selection).
• Durante e al termine della scrittura i programmi devono essere salvati in una directory creata dall’utente.
• Per eseguire il programma di solito è necessario che la current directory del Matlab sia quella nella quale il programma è
salvato. Per settare la current directory si può utizzare la finestra current directory window.
• In alternativa si può forzare il Matlab a cercare comunque in alcune directory scelte dall’utente utilizzando il sottomenù Set
Path del menù File.
• I file m sono di 2 tipi: script e functions.
• Gli script possono essere eseguiti mediante il comando run dell’editor, oppure digitando il nome dello script sulla
command window e premendo il tasto invio (se il programma è presente nella current directory), oppure scrivendone il
nome in un altro script, cosa utile per separare un programma in più script.
• Le functions servono ad aggiungere nuovi comandi al matlab e possono essere eseguite dal prompt o richiamate da uno
script esattamente come si usano i comandi già disponibili del matlab (vedi sezione Le funzioni del matlab).
Variabili
Nei problemi matematici vengono elaborati dati numerici “contenuti” nelle variabili.
• Nel matlab i nomi delle variabili:
 sono costituiti da lettere e numeri, [es: x, y, xy, x1, x2, alfa, A, B, pippo, pluto, cicciolina],
 devono iniziare con delle lettere,
 le lettere maiuscole e minuscole sono considerate differenti, [es: A ed a sono di variabili differenti],
 i nomi non devono essere uguali a funzioni del matlab (in tal caso la funzione diviene inutilizzabile nella sessione),
 è opportuno assegnare alle variabili dei nomi brevi, che richiamino la grandezza che rappresentano, ad esempio x
o x1 ad una ascissa, y o Y ad una ordinata, tau ad una tensione tangenziale, sx alla σx, ecc… .
• Prima di essere utilizzate, le variabili devono essere inizializzate, cioè deve essere fatto assumere loro un valore numerico.
L’inizializzazione viene effettuata mediante l’operatore di assegnazione “=”.
Es: >>a=1; x=2.7;y=a*x;
oppure mediante funzioni che creano variabili (ad esempio zeros che crea matrici di 0, ones che crea matrici di 1, linspace e
meshgrid, che creano matrici con numeri equispaziati, rand che crea matrici con numeri random).
• Nel Matlab si utilizzano diverse classi di variabili, le principali sono 4: 3 di tipo numerico e una di tipo stringa.
Le variabili numeriche più utilizzate appartengono alle classi double, uint8 e logical.
 I double sono i numeri in doppia precisione, utili a rappresentare i numeri reali, sui quali è possibile eseguire tutte le
operazioni matematiche.
 Gli uint8 sono numeri interi ad 8 bit unsigned (senza segno), utili a rappresentare numeri interi compresi tra 0 e 255,
sui quali non è possibile compiere operazioni matematiche, adatti alla memorizzazione di numerose immagini.
 I logical sono numeri che assumono il valore 0 o il valore 1.
Il Matlab considera le variabili introdotte dall’utente come double, carica le immagini come uint8. Le logical sono
utilizzate per accedere ad elementi di matrici. Esistono apposite funzioni per convertire le variabili nei tre formati.

1
G. Petrucci “Complementi di Costruzione di Macchine”

Le variabili stringa servono a memorizzare parole e caratteri e sono utili per la gestione dei nomi dei file di dati e
immagini da caricare e/o salvare, per scrivere messaggi sullo schermo, per scegliere le opzioni in alcune funzioni matlab
che lo prevedono. Si introducono ponendo la parola tra apici ' ' - es: >>n='nome.bmp';
Vettori, matrici, cell arrays
• Le variabili generalmente sono in forma di vettori e matrici, ovvero arrays.
• I vettori sono arrays a una sola dimensione, cioè una riga o una colonna. Le matrici possono avere più di 2 dimensioni. [es:
il tensore σ è una matrice 3x3, se si vuole valutare in 10x10x10 punti nello spazio xyz si può utilizzare una matrice a 5
dimensioni 3x3x10x10x10].
• Gli elementi di una matrice vengono introdotti ponendoli entro parentesi quadre separati da spazi o virgole, mentre le
righe vanno separate con il punto e virgola - es: >>a=[1 2 3; 4 5 6].
• Per richiamare i singoli elementi di una matrice si possono utilizzare gli usuali indici riga-colonna, detti anche indici
multipli, posti entro parentesi tonde separati da virgole - es: >>a(2,2), s(1,2,5,7,1).
• Per richiamare i singoli elementi di una matrice possono essere utilizzati anche gli indici lineari, che permettono di
identificare gli elementi della matrice con un unico numero - es: >>[a(1), a (2), a(3), a(4), a(5), a(6)]. Gli indici lineari sono
gli indici che identificano gli elementi di un vettore colonna ottenuto disponendo consecutivamente le colonne della matrice
originaria.
• Si possono creare matrici di matrici, cioè matrici ciascun elemento delle quali è, a sua volta, una matrice: i cosiddetti cell
array. Per esempio: il tensore σ è una matrice 3x3, se si vuole valutare in 10x10x10 punti nello spazio xyz si può utilizzare
un cell array costituito da 10x10x10 matrici 3x3. Gli indici multipli per individuare il singolo array devono essere posti tra
parentesi graffe, gli indici necessari ad identificare il singolo elemento vanno posti tra le consuete parentesi tonde - es.:
>>s{2,2,5}(1,1); identifica l’elemento (1,1) del tensore relativo al punto cui sono stati attribuiti gli indici {2,2,5}. I cell
array sono utili, ad esempio, per elaborare più immagini, considerando ciascuna immagine come uno degli array che
costituisce il cell array – es: >>IM{i}(y,x) permette di accedere al pixel di coordinate x,y nell’immagine contenuta
nell’elemento i del cell array IM. Una caratteristica importante del cell array è che le matrici che lo costituiscono possono
avere dimensioni diverse tra loro.
• Gli indici delle matrici e dei vettori devono essere numeri interi. Se i valori degli indici vengono determinati con
operazioni di calcolo, come accade per le coordinate degli elementi di una immagine, devono essere trasformati in interi, ad
esempio mediante l’istruzione round, prima di essere utilizzati per accedere all’elemento della matrice. Per accedere
all’ultimo elemento di un array è possibile utilizzare il termine end. Ad es. >>x=a(end) pone x uguale all’ultimo elemento
del vettore a. Per selezionare tutti gli elementi di una riga o di una colonna, si utilizza l’operatore “:” che fa scorrere gli
indici - es.: >>x=[ 1 2 3; 4 5 6; 7 8 9]; >>x(3,:) restituisce la terza riga, mentre >>x(:,2) restituisce la seconda colonna.
• In molti calcoli sugli arrays, il prodotto *, la divisione / e l’elevazione a potenza ^, devono essere eseguite elemento per
elemento e non con le regole del calcolo matriciale. Ad esempio, per calcolare la funzione y=x^2 nel campo 0<x<10, si
deve creare un array x che contiene i valori dell’ascissa e applicare l’elevazione a potenza a ciascun elemento.
Quest'operazione è differente dall’elevazione al quadrato matriciale, che consiste nella moltiplicazione della matrice per se
stessa. Per specificare che l’operazione deve essere eseguita elemento per elemento, l’operatore matematico deve essere
preceduto dal punto, cioè .*, ./, .^. La regola non è necessaria per somma e sottrazione in quanto le operazioni matriciali
stesse sono eseguite elemento per elemento.
Le funzioni del matlab
• Il Matlab comprende centinaia di funzioni che eseguono operazioni di vario tipo sulle variabili.
• Ciascuna funzione ha un nome ben preciso [es: sin esegue l’istruzione seno, max determina il massimo in un array].
• La funzione riceve uno o più dati di ingresso posti tra parentesi tonde alla fine del nome e separati da una virgola;
• i dati di ingresso di una funzione possono essere costanti o arrays di costanti, Es: >>sin(3.14); >>sin([0 1.57 3.14])
oppure variabili, Es: >>sin(x)
• La funzione restituisce uno o più dati in uscita che possono essere visualizzati o memorizzati in variabili
Es: >>y=sin(3.14), z=cos(x)
• Se le variabili in uscita sono più di una, devono essere poste tra parentesi quadre e separate da virgola
Es: >> [dx,dy]=gradient(I);
• Per utilizzare una funzione in matlab bisogna prestare attenzione a:
1. quali operazioni effettua,
2. il nome esatto,
3. quante variabili vuole in ingresso e di che tipo,
4. quante variabili restituisce e di che tipo.
Il matlab opera per colonne
• Quando una funzione del Matlab elabora l’insieme di dati contenuto un array:
 se l’array possiede più di una dimensione, l’elaborazione viene eseguita su ciascuna colonna e viene restituito un
vettore ciascun elemento del quale è il risultato dell’operazione effettuata su ciascuna colonna;
 se l’array possiede una sola dimensione, cioè è una riga o una colonna, l’elaborazione viene eseguita su tutti gli
elementi e viene restituito un solo valore.
Ad esempio, se l’array di ingresso è monodimensionale la funzione max() restituisce il massimo assoluto dell’array, se l’array
di ingresso è bidimensionale, restituisce un’array riga i cui elementi sono i massimi relativi a ciascuna colonna. Ad esempio:
>>a=[1 5; 7 2];m=max(a); restituisce [5 7]. Se si desidera che una funzione operi su tutti gli elementi dell’array, si può
utilizzare l’operatore “:”. Ad esempio >>a=[1 5; 7 2];m=max(a(:)); restituisce 7.

2
G. Petrucci “Complementi di Costruzione di Macchine”

2 REALIZZARE SCRIPT E FUNCTIONS


Gli script e le functions si scrivono come file di testo utilizzando l’apposito editor del Matlab.

La parte iniziale del programma - I dati di ingresso


Di solito è opportuno aprire un programma cancellando la memoria, lo schermo e le figure con queste istruzioni:
clear;clc;close all

Nella realizzazione di un programma è opportuno ridurre i dati di ingresso al minimo indispensabile, facendo eseguire al
programma tutti i calcoli. È opportuno che le prime istruzioni del programma siano costituite proprio dall'assegnazione dei dati
di ingresso del problema.
Tipicamente si assegnano valori a costanti e a matrici/vettori con l'operatore “=”.
beta=0.5;
pe=100;

I numeri delle matrici devono essere posti entro parentesi quadra. Gli elementi di una riga devono essere separati da spazi o
virgole, mentre le righe da punto e virgola.
s=[100 0 0; 0 -100 0; 0 0 0];

In alcuni casi è opportuno utilizzare come dati di ingresso i dati ottenuti con un altro programma. I dati elaborati dal primo
programma possono essere salvati in un file con l’istruzione “save”
save DisUnRes0 SrE SrI ht rt mu ni w

I dati possono essere poi caricati dal file mediante l’istruzione “load”
load DisUnRes0

Le variabili all'interno del programma utilizzatore assumono gli stessi nomi che avevano quando sono state salvate.

È possibile separare la parte del programma che effettua i calcoli da quella che effettua l'inizializzazione del problema. In
questo caso per ogni problema si realizza uno script con l'inizializzazione dei dati e ciascuno di essi richiama l'unico script che
esegue i calcoli. Per eseguire uno script all'interno di un altro script è sufficiente scriverne il nome in una riga.

Dati spaziati linearmente


Dopo l’introduzione dei dati, se si devono studiare funzioni, tipicamente è necessario creare vettori che contengono i valori
della variabile della funzione spaziati linearmente nel campo d'interesse utilizzando l'istruzione “linspace”, preferibile se si
vuole assegnare il numero di elementi del vettore,
ro=linspace(beta,1,101); % crea un vettore beta≤ro≤1 di 101 elementi

o l'operatore “:”, preferibile se si vuole assegnare l'incremento ∆, ad esempio:


al=0:10:180; % crea un vettore 0≤al≤180 a passi di 10
al=deg2rad(al);
oppure
al1=0;da=10;al2=180;al=deg2rad(al1:da:al2);

Nel caso delle funzioni di 2 variabili, cioè del tipo z=f(x,y), il campo di definizione è costituito da un'area rettangolare con
punti di coordinate x e y, invece che da un semplice segmento di coordinate x. In questo caso la discretizzazione del campo di
definizione della funzione deve essere effettuata mediante 2 matrici contenenti le coordinate x e y. La determinazione delle
matrici di coordinate può essere effettuata mediante la funzione “meshgrid” la quale richiede come dato di ingresso 2 vettori
contenenti la discretizzazione lungo le due coordinate, ad esempio:
a=500;b=400;xd=linspace(0,a,101); yd=linspace(0,b,81);[x,y]=meshgrid(xd,yd);
oppure
dx=5;dy=5;[x,y]=meshgrid(0:dx:a,0:dy:b);

Matrici con valori costanti


Se occorre un vettore di costanti si possono utilizzare le istruzioni “ones”, “zeros” o “repmat”
pi=100;beta=0.5;sl=pi*beta^2/(1-beta^2);

sl=ones(1,100)*sl;
sl=zeros(1,100)+sl;
sl=repmat(sl,[1 100]);
Se nel programma sono presenti matrici i cui elementi devono essere calcolati singolarmente è opportuno inizializzarle
creandole come matrici di zeri mediante l'istruzione “zeros” affinché il matlab possa organizzare lo spazio in memoria:
w=zeros(100,100); Mx=zeros(100,100); My=zeros(100,100);

3
G. Petrucci “Complementi di Costruzione di Macchine”

Modifica di elementi di matrici


Come detto, per accedere e/o modificare elementi di matrici si possono utilizzare indici multipli o lineari, l'operatore “:” e
l'operatore “end”. Ad esempio, nel caso delle reazioni vincolari delle lastre, per accedere alle prime e ultime colonne e righe
delle matrici, invertirne il segno e copiarle in altre matrici si può scrivere:
Rxy(:,1)=-Rx(:,1); Rxy(:,end)=Rx(:,end);
Rxy(1,:)=-Ry(1,:); Rxy(end,:)=Ry(end,:);

Un altro modo di accedere ad elementi di arrays è costituito dall'uso di arrays di tipo logical. Ad esempio, volendo porre a zero
i valori del vettore M minori di 0 o porre pari ad xmax i valori del vettore E che superano xmax si può scrivere:
i=M<0;M(i)=0; oppure direttamente M(M<0)=0;
i=E>xmax;E(i)=xmax; oppure direttamente E(E>xmax)=xmax

i=M<0 e i=E>xmax sono arrays delle stesse dimensioni di M ed E, con valori logical pari a 1 se la condizione è verificata e 0
dove non è verificata.
Per condizioni più complesse possono essere utilizzati diversi operatori relazionali (<,>,<=,>=,==) e logici (&,| cioè
and, or);. Ad esempio, per porre pari a 0 elementi della matrice A che si trovano al di fuori dell'intervallo 10<x<20 o
all'interno dell'intervallo 10<x<20 si può scrivere rispettivamente:
i=A<10 | A>20;A(i)=0; oppure direttamente A(A<10 | A>20)=0; (al di fuori dell'intervallo)
i=A>10 & A<20;A(i)=1; oppure direttamente A(A>10 & A<20)=1; ; (all'interno dell'intervallo)

Per cancellare gli elementi di una matrice si utilizzano i vettori vuoti "[]" con espressioni di questo tipo:
D(D==0)=[] D(D>1)=[]

Per determinare gli indici di una matrice nei quali è verificata una certa condizione, si può utilizzare la funzione “find”:
TM=max(TA); i=find(TA>.99*TM);

Da notare che i=find(A>100) restituisce un vettore i contenente i soli indici lineari dove è verificata la condizione,
mentre i=A>100 restituisce un array delle stesse dimensioni di A con valori logical 0 o 1.

I calcoli
I calcoli vengono effettuati mediante gli operatori matematici “+,−,*,/,^”, o mediante funzioni di calcolo del Matlab (sin, cos,
exp, eig, trapz ecc..), o funzioni di calcolo appositamente realizzate.
L’ordine delle operazioni elementari è: prima la potenza, poi il prodotto/diviso, poi somma/sottrazione, cioè:
1)^, 2)*/, 3)+−.
es.
x= 2*3^4*5 + 5=(2*(3^4)*5)+5

Gli operatori effettuano operazioni matriciali: ad esempio


exy=Cxy*sxy
è il prodotto riga per colonna tra la matrice Cxy e la matrice sxy, mentre
x2=x^2
è il prodotto matriciale di una matrice per se stessa. In questo caso la matrice x deve essere quadrata.

Se si vogliono effettuare operazioni sui singoli elementi di una matrice o di un vettore, agli operatori *,/,^ deve essere
anteposto il punto “.”.
Le operazioni elemento per elemento sono generalmente usate per determinare i valori delle funzioni nelle quali le variabili
indipendenti vengono rappresentate come vettori.
Ad esempio, per calcolare la funzione σr(ρ)
1− ρ 2 β2
σr = − pi (1)
ρ2 1− β 2
definita nel campo β≤ρ≤1, nel caso di β=0.625 e volendo suddividere l'intervallo in 100 punti, si può scrivere:
beta=0.625;b2=beta^2;
ro=linspace(beta,1,100);ro2=ro.^2;
sr=-(1-ro2)./ro2*b2/(1-b2)*pi

Per calcolare le tensioni equivalenti di Goodman


σa
σG = (2)
1−σ m σ r
σf per i valori di tensioni medie e alternate σa e σm contenute nei corrispondenti vettori sa ed sm si può scrivere:
sg=sa./(1-sm/sr);

Le funzioni trigonometriche di base del Matlab (sin=seno, cos, tan, cot, asin, acos, atan, ecc.) utilizzano gli
angoli espressi in radianti; è possibile utilizzare i gradi con le analoghe funzioni aventi la lettera d aggiunta alla fine (sind,
cosd, tand, ecc).

4
G. Petrucci “Complementi di Costruzione di Macchine”

Se in un’equazione compare più volte una variabile elevata a potenza o il seno di una funzione, può essere opportuno
assegnare a una nuova variabile il valore calcolato. Ad esempio, nel caso di

 cos 2 α sin 2 α −2 cos α sin α 


 
N =  sin 2 α cos 2 α 2 cos α sin α 
cos α sin α − cos α sin α cos 2 α − sin 2 α 

si può scrivere:
c=cos(a); c2=c^2;s=sin(a);s2=s^2;cs=c*s
N=[c2 s2 -2*cs;
s2 c2 2*cs;
cs -cs c2-s2]

Controllo della sequenza delle istruzioni


In generale le istruzioni del programma vengono eseguite in sequenza dalla prima all'ultima. In molti casi è necessario che il
flusso di esecuzione delle istruzioni sia differente, in particolare può essere necessario:
a) che alcune istruzioni siano eseguite nel caso in cui siano verificate certe condizioni;
b) che alcune istruzioni siano iterate un numero opportuno di volte.

L'esecuzione condizionata può essere effettuata mediante le istruzioni “if... elseif ...else....end” o mediante l'istruzione
“switch.... case... end”.

La prima istruzione è adatta per fare in modo che vengano eseguite istruzioni se sono verificate condizioni ottenute
mediante operatori relazionali (<,>,==,>=, <=) e/o logici (&, |).

L=length(ft)
if L==2
n=...
elseif L>2 & L<10
n=...
end

La seconda istruzione è adatta al caso semplice in cui devono essere eseguite alcune istruzioni in funzione del valore
assunto da una variabile.

L=length(fz)
switch (L)
case 1; istruzioni….
case 3;…istruzioni…
case 5;…istruzioni.
otherwise; istruzioni…
end

L'iterazione di un gruppo di istruzioni può essere effettuata mediante l'istruzione for... end o mediante l'istruzione while...
end.
Durante le iterazioni è solitamente necessario:
1) tenere presente il numero dell'iterazione in corso mediante una variabile contatore,
2) fare variare opportunamente le grandezze in gioco in base al numero dell'iterazione utilizzando il contatore,
3) memorizzare i risultati ottenuti durante l'iterazione in apposite matrici, utilizzando il contatore come indice
dell'elemento della matrice da aggiornare.

L'istruzione for... end è adatta al caso in cui è noto a priori il numero di iterazioni che devono essere effettuate. Ad esempio,
nel caso della determinazioni delle deformazioni di un materiale ortotropo al variare dell'angolo α tra 0 e 90 gradi, utilizzando
un passo pari ad 1 grado il numero di iterazioni è 91:

s=[100 0 0]';alfa=deg2rad(0:90);n=length(alfa);
for i=1:n;
al=alfa(i); c=cos(al); s=sin(al)
Cxy=....
e=Cxy*s;
ex(i)=e(1);ey(i)=e(2);gxy(i)=e(3);
end

Nell'esempio il ruolo di contatore è assolto dalla variabile i. L'angolo α varia tra 0 e 90 gradi e, in questo caso, è posto in
funzione del contatore scrivendo semplicemente al=alfa(i), le deformazioni εx, εy e γxy ottenute mediante il prodotto
matriciale e=Cxy*s per ogni valore di α vengono memorizzate nei vettori ex, ey e gxy, utilizzando come indice il contatore i.

5
G. Petrucci “Complementi di Costruzione di Macchine”

L' istruzione while... end è adatta al caso in cui le iterazioni devono essere effettuate mentre risultano verificate una o più
condizioni (che possono essere associate mediante gli operatori logici and e or); ad esempio, nella determinazione della durata
di un componente soggetto a sollecitazioni, le operazioni di calcolo devono essere ripetute mentre il danneggiamento risulta
minore di 1 e il numero di iterazioni è inferiore al numero di cicli di fatica da considerare, nc. In questo caso, se k è il
contatore, devono essere verificate simultaneamente le condizioni D(k)<=1 e (and) k<nc.
nc=length(a);D=zeros(1,nc);
D(1)=(a(1)^mu)/K;
k=1;
while D(k)<=1 && k<nc
k=k+1;
...D(k)=(D(k-1)^....;
end
D(D==0)=[];
Da notare come il contatore (k nell'esempio) deve essere inizializzato prima del ciclo e incrementato durante l'esecuzione.
È opportuno che all'interno dei cicli iterativi non vengano ripetute operazione che possono essere effettuate una sola volta
all'esterno del ciclo. Ad esempio, se l'operazione iterata prevede anche il prodotto per una costante, in molti casi tale prodotto
può essere effettuato all'esterno del ciclo moltiplicando la matrice con i risultati per la costante. Ad esempio, nel caso delle
lastre, è opportuno scrivere all'interno dell'iterazione l'operazione che coinvolge i termini calcolati con l'iterazione:
w=w+G*smn;
e solo alla fine dell'iterazione
w=w/D/pi^4;
Da notare che, utilizzando il linguaggio Matlab, quando le operazioni da iterare sono di tipo algebrico e non matriciale, in
molti casi è possibile inserire i dati da elaborare in matrici o vettori ed effettuare le operazioni con gli appositi operatori (.*, ./ e
.^) senza utilizzare le istruzioni iterative, con vantaggi in termini di semplicità, di scrittura del programma e velocità
d'esecuzione. Come già visto, nello studio di una funzione è possibile inserire le ascisse in vettori e calcolare i valori della
funzione senza utilizzare operazioni iterative.
Ad esempio, nel caso delle tensioni radiali nei cilindri e del danneggiamento di Miner, è opportuno scrivere
ro2=ro.^2; sr=-((1-ro2)./ro2))*b2/(1-b2)*pi
D=sum(a.^mu)/K
piuttosto che
l=length(ro);for i=1:l; sr(i)=-((1-ro(i)^2)/ro(i)^2))*b2/(1-b2)*pi;end
l=length(a); D=0; for i=1:l; D=D+a(i)^mu;end; D=D/K
Le operazioni iterative devono essere utilizzate per il calcolo:
• delle deformazioni in materiali ortotropi in quanto, per ogni angolo, devono essere determinate la matrice di cedevolezza e
il vettore delle deformazioni;
• delle sollecitazioni nelle lastre tramite la serie doppia di Fourier, in quanto, per ogni termine della serie di Fourier, devono
essere determinate le matrici con i valori delle funzioni sin(nπx/a), sin(mπx/b), ecc..;
• del danneggiamento non lineare, in quanto il danneggiamento dovuto a ciascun ciclo di fatica dipende da valore del
danneggiamento raggiunto al ciclo precedente;
• del danneggiamento nei processi aleatori in quanto, per ogni iterazione devono essere effettuate numerose operazioni.
Nei primi due casi è possibile utilizzare l'istruzione for...end, mentre negli altri è opportuno utilizzare l'istruzione while...
end, in quanto non è possibile sapere a priori quante iterazioni portano al raggiungimento del danneggiamento unitario.

Funzioni
Come detto, le funzioni (functions) servono ad aggiungere nuovi comandi al matlab e possono essere eseguite dal prompt o
richiamate da uno script esattamente come si usano i comandi già disponibili del matlab, come si è visto nella sezione Le
funzioni del matlab.
Le funzioni sono preferibili agli script nel caso in cui il numero dei dati da elaborare e dei risultati ottenuti sono limitati
(max una decina di variabili, scalari o matrici) e le elaborazioni sono di utilità generale e/o devono essere effettuate più volte.
Ad esempio, la determinazione dei 4+4 coefficienti di sicurezza del diagramma di Haigh può essere effettuata mediante una
funzione che abbia come dati di ingresso le tensioni di fatica, snervamento e rottura del materiale e i valori tensione media e
alternata e che restituisca due vettori (o una matrice) contenente gli 8 coefficienti.
Al contrario, nella soluzione del problema delle lastre non è opportuno scrivere una funzione in quanto devono essere
calcolati troppi dati (spostamenti, forze, momenti, tagli, reazioni vincolari, tensioni).
Vedere l'istruzione function a pag.17.
È opportuno che le funzioni non scrivano risultati sul desktop, in quanto potrebbero interferire con la scrittura effettuata dal
programma che le richiama. È anche opportuno che le funzioni che realizzano delle figure, abbiano come dato d'ingresso il
numero di figura che deve essere utilizzato. In generale è opportuno che la realizzazione di un grafico da parte di una funzione
sia opzionale, nel senso che deve essere possibile scegliere se la funzione deve realizzare o meno il grafico. Un modo semplice
per controllare quest'opzione utilizzando il numero di figura come variabile di ingresso, è di assegnare il valore 0 a tale
variabile e condizionare la realizzazione del grafico all'interno della funzione nel modo sotto riportato:
if nfig; figure(nfig); plot(x,y); end

6
G. Petrucci “Complementi di Costruzione di Macchine”

COMANDI DI TIPO GENERALE


HELP Aiuto in-linea help plot
CLEAR Cancella variabili e funzioni dalla memoria. clear a b c
CLC Cancella la finestra dei comandi clc
SAVE Salva le variabili in memoria sul disco. save prova a b c
LOAD Carica le variabili dal disco. load prova
WHOS Lista le variabili whos

OPERAZIONI ELEMENTARI SU MATRICI


LINSPACE Vettori spaziati linearmente. V=linspace(x1,x2,N)
MESHGRID Arrays di coordinate X e Y per funzioni 3-D. [x,y]=meshgrid(n1:n2,m1:m2)

ONES Array di “uno” u=ones(r,c)


ZEROS Array di “zero” z=zeros(r,c)
RAND Array di numeri aleatori (random) R=rand(r,c)

SIZE Dimensione di una matrice. s=size(a)


LENGTH Lunghezza di un vettore. L=length(a)

MAX Elemento più grande e indice corrispondente. [M,iM]=max(a) [M,iM]=max(a(:))


MIN Elemento più piccolo e indice corrispondente. [m,im]=min(a) [m,im]=min(a(:))

FLIPUD Inverte la posizione delle righe di una matrice. f=flipud(a)


FLIPLR Inverte la posizione delle colonne di una matrice. f=fliplr(a)
SORT Ordina in ordine ascendente o discendente. [YS,ks]=sort(a) YS=sort(a) YS=sort(a,'descend')

INV Matrice inversa. I=inv(a)

DIAG Matrici diagonali e diagonale di una matrice. d=diag(a)

FIND Trova gli indici di elementi nonzero. i=find(a<100) [y,x]=find(a<100)


IND2SUB Da indici lineari a indici multipli. [y,x]=ind2sub(size(a),i) [y,x]=ind2sub(s,i)
SUB2IND Da indici multipli ad indici lineari. i=sub2ind(size(a),y,x) i=sub2ind(s,y,x)

GRAFICI
FIGURE Crea una finestra grafica. figure(n)
CLOSE Chiude la figura close(n) close all

PLOT Grafici cartesiani. plot(x1,y1,x2,y2)

AXIS Controlla la scala e il formato degli assi. axis([x1 x2 y1 y2]) axis equal
SUBPLOT Suddivide una figura in più grafici. subplot(2,2,1)
GRID ON Griglia di linee. grid on grid off

MESH Traccia una superficie 3-D a reticolo mesh(a) mesh(x,y,a)


VIEW Specifica il punto di vista in grafici 3-D. view(al,be)

XLABEL nomina l’asse X. xlabel(‘pixel’)


YLABEL nomina l’asse Y. ylabel(‘Intensità’)
TITLE Scrive un titolo su una figura title(‘red’)
LEGEND Crea la “legenda” del grafico.

LOGLOG Grafico in coordinate Logaritmiche. loglog(x,y)


BAR Grafico a barre. bar(n,I)
POLAR Grafico in coordinate polari. polar(al,ro)

7
G. Petrucci “Complementi di Costruzione di Macchine”

LINGUAGGIO DI PROGRAMAZIONE
IF Istruzione condizionale IF. if a==0;…. elseif a>5;…....else……;end
SWITCH/CASE Sceglie tra vari casi in base al valore di una variab. switch (a); case(b);….. ;case(c);….otherwise…..; end
FOR Ripete istruzioni un numero di volte specificato. for i=1:3;………end
WHILE Ripete istruzioni un numero di volte indefinito. while (d>0.001)……end
BREAK Termina l’esecuzione di un ciclo WHILE o FOR. for i=1:3;………if k==1;break;end; …end
FUNCTION Aggiunge una nuova funzione. function y=senoquad(x) …. y=sin(x).^2

OPERATORI RELAZIONALI E LOGICI


<, <= Minore, minore o uguale c=a<b find(a<=b)
>, >= Maggiore, maggiore o uguale c=a>=b find(a>b)
==, ~= Uguale, diverso if (a==b) find(a==b)
& AND Logico. c=and(a,b) find(a & b) c=a&b
| OR Logico. c=or(a,b) find(a==1 | a<2) find(xor(a==1,a<2))
~ NOT Complemento logico c=not(a) find(~a)
XOR OR esclusivo. c=xor (a,b) find(xor(a==1,b==2))
ANY Vero se almeno un elemento è non zero u=any(y)
ALL Vero se tutti gli elementi sono non zero u=all(y)
EXIST Verifica se una variabile è definita. exist(‘a’)

CONVERSIONE DI VARIABILI, VARIABILI SPECIALI E COSTANTI


NaN Not-a-Number.
Inf Infinito
pi 3.1415926535897
1i, 1j Unità immaginaria x=5+1i*2
ISNAN Vero (1) per Not-a-Number (NaN). Na=isnan(y)
ISINF Vero (1) per Infinito (Inf). In=isinf(y)
ISEMPTY Vero (1) per array vuoto Is=isempty(y)

FUNZIONI MATEMATICHE E CALCOLO


DIFF Differenza e derivata approssimata. d=diff(y)
SUM Somma di elementi. s=sum(a)
PROD Prodotto di elementi Btot=prod(B)
CUMSUM Somma cumulativa di elementi. Dc=cumsum(D)
ABS Valore assoluto e modulo y=abs(x)
SIGN Funzione segno s=sign(x)
ROUND Arrotonda all’intero più vicino r=round(y)
TRAPZ Integrazione numerica trapezoidale in=trapz(a)*dx
DET Determinante d=det(a)
EIG Autovettori e autovalori [ve,va]=eig(a)
LINSOLVE Risolve un sistema lineare x=linsolve(A,B)
MEAN Calcola il valore medio. mn=mean(a) mn=mean(a(:))
STD Calcola la deviazione standard s=std(x)
HIST Determina l’istogramma di y secondo gli intervalli x N=hist(y,x)
HIST3 Determina l’istogramma di 2 variabili N=hist3([a m],{0:max(a), min(m):max(m)})
IFFT Calcola la trasformata inversa di Fourier X=ifft(F)
REAL Determina la parte reale di una variabile complessa rx=real(X)
DOT Prodotto scalare di vettori sn=dot(n,pn)
CROSS Prodotto vettoriale di vettori v=cross(a,b)
NORM Modulo di un vettore p=norm(Pn)
ATAN2 Tangente inversa a 4 quadranti. a=atan2(num,den)
DEG2RAD Converte i gradi in radianti r=deg2rad(g)
RAD2DEG Converte i radianti in gradi g=rad2deg2(r)
CART2POL Converte coordinate cartesiane in polari [t,r]=cart2pol(x,y)
POL2CART Converte coordinate polari in cartesiane [x,y]=pol2cart(t,r)
CART2SPH Converte coordinate cartesiane in sferiche [f,t,r]=cart2sphl(x,y,z)
SPH2CART Converte coordinate sferiche in cartesiane [x,y,z]=pol2cart(f,pi/2-t,r)

INTERPOLAZIONE E APPROSSIMAZIONE DI DATI


POLYFIT Approssima dei dati con un polinomio. [c,s]=polyfit(y,x,n)
POLYVAL Valuta il polinomio. yp=polyval(s,xp)
INTERP1 Interpolazione monodimensionale. yi=interp1(x,y,xi,’linear’)
POLYXPOLY Intersezione tra rette e/o curve [xi,yi]=polyxpoly([0 sr],[sf 0],[0 ss],[ss 0])

8
G. Petrucci “Complementi di Costruzione di Macchine”

COMANDI DI TIPO GENERALE


HELP Aiuto in-linea, visualizza il testo di aiuto
HELP FUN visualizza l’aiuto per la funzione FUN, ad esmpio HELP PLOT visualizza l’help per la funzione PLOT.

CLEAR Cancella variabili e funzioni da memoria.


CLEAR rimuove tutte le variabili dalla memoria.
CLEAR VAR1 VAR2 ... rimuove le variabili specificate.

CLC Cancella la finestra dei comandi


CLC cancella la finestra dei comandi e posiziona il cursore in alto a sinistra.

SAVE Salva le variabili in memoria sul disco.


SAVE FILENAME salva tutte le variabili in memoria in un "MAT-file" binario nominato FILENAME.mat. I dati possono
essere ricaricati con LOAD. Se FILENAME non ha estensioni, è assunta l’estensione “.mat”.
SAVE, da sola, crea il "MAT-file" binario nominato 'matlab.mat'.
SAVE FILENAME X salva solo X.
SAVE FILENAME X Y Z salva X, Y, e Z. Può essere utilizzata la wildcard '*' per salvare tutte le variabili che hanno in
comune alcune lettere (es. save prova a* b*).

LOAD Carica le variabili dal disco.


LOAD FILENAME ricarica tutte le variabili da un file dato l’intero percorso o un percorso parziale relativo MATLABPATH
(vedere PARTIALPATH). Se FILENAME non ha estensione, LOAD cerca FILENAME e FILENAME.mat e lo tratta come un
"MAT-file" binario. Se FILENAME ha un’estensione diversa da .mat, è trattato come ASCII.
LOAD, da sola, carica il "MAT-file" binario nominato 'matlab.mat'. Dà un errore 'matlab.mat' non viene trovato.
LOAD FILENOME X carica solamente X.
LOAD FILENOME X Y Z ... carica solo le variabili specificate. La wildcard '*' loads variabili che match a pattern (MAT-file
solamente).
LOAD -ASCII FILENAME o LOAD -MAT FILENAME forza LOAD a trattare il file come either un file ASCII o un file
MAT senza tenere conto dell’estensione. Con -ASCII, LOAD darà errore se il file non è numerico text. Con -MAT, LOAD
darà errore se il file non è un file MAT generato da SAVE -MAT.

WHOS Lista le variabili


WHOS lista tutte le variabili nella memoria, insieme con informazioni circa la loro dimensione, bytes, classe, etc.

9
G. Petrucci “Complementi di Costruzione di Macchine”

OPERAZIONI ELEMENTARI SU MATRICI


LINSPACE vettori spaziati linearmente.
LINSPACE(X1, X2) genera un vettore riga di 100 punti egualmente spaziati tra X1 and X2.
LINSPACE(X1, X2, N) genera N punti tra X1 e X2. For N<2, LINSPACE restituisce X2.

MESHGRID X e Y arrays per grafici 3-D.


[X,Y]=MESHGRID(x,y) trasforma il dominio specificato dai vettori x e y negli arrays X e Y che possono essere utilizzati per
la valutazione di funzioni di due variabili e il tracciamento di superfici 3-D. Le righe dell’array di uscita X sono copie del
vettore x e le colonne dell’array di uscita Y sono copie del vettore y.
[X,Y] = MESHGRID(x) è un abbreviazione per [X,Y] = MESHGRID(x,x).
[X,Y,Z] = MESHGRID(x,y,z) produce arrays 3-D che possono essere utilizzati per valutare funzioni di tre variabili e grafici
volumetrici 3-D.
Ad esempio, per valutare la funzione z=x*exp(-x2-y2) nell’intervallo -5<x<5, -5<y<5,
[X,Y] = meshgrid(-5:.1:5, -5:.1:5); Z = X .* exp(-X.^2 - Y.^2); mesh(Z)

ONES Array di uno.


ONES(N) è una matrice N-per-N di uno.
ONES(M,N) o UNOS([M,N]) è una matrice M-per-N di uno.
ONES(M,N,P,...) o UNOS([M N P ...]) è un array M-per-N- per -P- per -... di uno.
ZEROS Array di zeri.
ZEROS(N) è una matrice N-per-N di zeri.
ZEROS(M,N) o ZEROS([M,N]) è una matrice M-per-N di zeri.
ZEROS(M,N,P,...) o ZEROS([M N P ...]) è un array M-per-N-per-P-per-.... di zeri.
RAND Numeri aleatori (random) uniformemente distribuiti
RAND(N) è una matrice N-per-N con valori aleatori scelti da una distribuzione uniforme nell’intervallo 0.0÷1.0.
RAND(M,N) e RAND([M,N]) sono matrici M-per-N con valori aleatori.
Esempio: r=rand(5)*20-10 fornisce una matrice 5 per 5 di numeri reali compresi tra –10 e 10;
r=round(rand(4,6)*5)+5 fornisce una matrice 4 per 6 di numeri interi compresi tra 5 e 10.

SIZE Dimensione di una matrice.


D=SIZE(X), per matrici X M-per-N, restituisce il vettore riga D=[M, N] contenente il numero di righe e colonne nella matrice.
Per arrays N-Dimensionali, SIZE(X) restituisce un vettore 1-per-N contenente le lunghezze delle dimensioni.
[M,N]=SIZE(X) restituisce il numero di righe e colonne di X in variabili di uscita separate.
[M1,M2,M3,...,MN]=SIZE(X) restituisce la lunghezza delle prime N dimensioni di X.
LENGTH Lunghezza di un vettore.
LENGTH(X) restituisce la lunghezza del vettore X, ovvero la più grande delle dimensioni. È equivalente a MAX(SIZE(X)) per
arrays non-vuoti e 0 per quelli vuoti.

MAX Elemento più grande.


Per i vettori, MAX(X) è l’elemento più grande in X. Per le matrici, MAX(X) è un vettore riga contenente il massimo elemento
da ciascun colonna. Per ottenere il massimo assoluto si deve scrivere M=MAX(X(:)).
[Y,I]=MAX(X) restituisce nel vettore I gli indici dei massimi valori. Se ci sono più valori pari al massimo viene restituito
l’indice del primo.
Quando l’array è complesso, è utilizzata la grandezza MAX(ABS(X)). Nel calcolo del massimo i valori NaN's vengono
ignorati.
MIN Elemento più piccolo.
Per i vettori, MIN(X) è il più piccolo elemento in X. Per le matrici, MIN(X) è un vettore riga contenente the minimo elemento
da ciascun colonna. Per ottenere il minimo assoluto si deve scrivere m=MIN(X(:))
[Y,I]=MIN(X) restituisce nel vettore I gli indici del minimi valori. Se ci sono più valori pari al minimo viene restituito l’indice
del primo.
Quando l’array è complesso, è utilizzata la grandezza MIN(ABS(X)). Nel calcolo del minimo i valori NaN's vengono ignorati.

FLIPUD Inverte la posizione delle righe di una matrice (sposta gli elementi dall’alto in basso).
Ad esempio X = 1 4 diventa 3 6
25 25
36 14
FLIPLR Inverte la posizione delle colonne di una matrice (sposta gli elementi da destra a sinistra).
Ad esempio X = 1 2 3 diventa 3 2 1
456 654

10
G. Petrucci “Complementi di Costruzione di Macchine”

SORT Ordina in ordine crescente o decrescente.


Per i vettori, SORT(X) ordina gli elementi di X in ordine crescente. Per matrici, SORT(X) ordina ciascuna colonna di X in
ordine crescente.
SORT(X,DIM) ordina lungo la dimensione DIM.
[Y,I]=SORT(X) restituisce anche una matrice di indici I. Se X è un vettore, Y=X(I). Se X è una matrice m-per-n, allora
for j=1:n, Y(:,j)=X(I(:,j),j); end
[Y,I]=SORT(X,’descend’) effettua l’ordinamento in senso decrescente.
Quando X è complesso, gli elementi sono ordinati mediante ABS(X). I complessi sono ulteriormente ordinati in base ad
ANGLE(X).
Quando più di un elemento ha lo stesso valore, l’ordine degli elementi nel risultato ordinato è preservato e gli indici di
elementi uguali sarà crescente in qualsiasi matrice di indici.
Esempio: If X=[3 7 5; 0 4 2] allora sort(X,1) è [0 4 2; 3 7 5] e sort(X,2) è [3 5 7; 0 2 4];

INV Matrice inversa.


INV(X) è l’inversa della matrice quadrata X.
Se X è malamente scalato o quasi singolare viene scritto un messaggio di avvertimento.

DIAG Matrici Diagonali e diagonale di una matrice.


DIAG(V) se V è un vettore con N componenti, restituisce una matrice quadrata di ordine N con gli elementi di V nella
diagonale, se V è una matrice quadrata non diagonale, restituisce un vettore con gli elementi della diagonale di V.

FIND Trova gli indici di elementi diversi da zero.


I = FIND(X) restituisce gli indici degli elementi del vettore X che sono non-zero.
Ad esempio, I = FIND(A>100) restituisce gli indici degli elementi del vettore A che sono maggiori di 100, in quanto A>100 è
un vettore logical della stessa dimensione di A con che assumono valore 1 dove la condizione è veficata. L’espressione
corrisponde alla seguente scrittura: X = A>100;I = FIND(X)
[I,J] = FIND(X) restituisce gli indici della riga e della colonna degli elementi non nulli nella matrice X.

11
G. Petrucci “Complementi di Costruzione di Macchine”

GRAFICI
FIGURE Crea la finestra della figura.
FIGURE, da sola, crea una nuova finestra per i grafici e restituisce il suo handle.
FIGURE(H) rende “corrente” la figura H, la forza a diventare visibile e la pone in primo piano rispetto a tutte le altre figure
sullo schermo. Se la figure H non esiste e H è un intero, viene creata una nuova figura con handle H.

CLOSE Chiude le figure.


CLOSE(H) Chiude la finestra con la figura numero H.
CLOSE, da sola, chiude la finestra con la figura corrente (l’ultima figura selezionata o creata).
CLOSE ALL chiude tutte le figure.

PLOT Grafico cartesiano.


PLOT(X,Y) realizza un grafico cartesiano tracciando il vettore delle odinate Y rispetto al vettore delle ascisse X. In paricolare
vengono tracciati dei segmenti che unicono i punti le cui coordinate sono specificate nei vettori X e Y. Se Y è una matrice,
vengono tracciate tutte le colonne rispetto a X. Se X è una matrice, viene tracciato Y rispetto a le colonne di X.
PLOT(Y) traccia le colonne di Y rispetto al loro indice. Se Y è complesso, PLOT(Y) è equivalente a PLOT(real(Y),imag(Y)).
In tutti gli altri usi di PLOT, la parte immaginaria è ignorata.
Con PLOT(X,Y,S) possono essere ottenuti vari tipi di linea, simboli e colori di tracciamento; S è una stringa di caratteri scelti
tra quelli mostrati nella tabella:
Colore Tratto
b blue . point - solid
g green o circle : dotted
r red x x-mark -. dashdot
c cyan + plus -- dashed
m magenta * star v triangle (down)
y yellow s quadrata ^ triangle (up)
k black d diamond < triangle (left)
p pentagram > triangle (right)
h hexagram

Ad esempio,
PLOT(X,Y,'r:') traccia una linea di colore rosso (r) punteggiata (:) ;
PLOT(X,Y,'bd') disegna un diamante blu per ciascun punto appartente ai dati ma non esegue il tracciamento della linea.
PLOT(X1,Y1,X2,Y2,X3,Y3…) disegna una linea per ciascuna coppia di vettori X-Y.
PLOT(X,Y,'LineWidth',n) utilizza l’opzione LineWidth, che deve essere posta alla fine dell’istruzione e assegna alle linee
tracciate lo spessore specificato dal numero n (n intero≥1).

AXIS Controlla la scala e il formato degli assi.


AXIS([XMIN XMAX YMIN YMAX]) configura le scale degli assi x e y sul grafico corrente.
AXIS([XMIN XMAX YMIN YMAX ZMIN ZMAX]) configura le scale degli assi x, y e z sul corrente grafico 3D.

AXIS EQUAL setta il rapporto di scala degli assi x e y in modo che in un grafico gli incrementi sugli assi x e y siano uguali.
Questo fa in modo che SPHERE(25) abbia l’aspetto di una sfera, invece che un ellissoide.

SUBPLOT Crea diversi assi in una figura.


SUBPLOT(mnp), divide la finestra Figure in una matrice di m-per-n grafici, seleziona il grafico piesimo per il tracciamento. Il
valore di p si assegna contando i grafici a partire dall’alto a sinistra e aumentando prima in base alla colonna e poi alla riga. Ad
esempio,
SUBPLOT(2,3,1), PLOT(income)
divide la figura in 2*3=6 grafici disposti su 2 righe e 3 colonne e traccia il primo della prima riga
SUBPLOT(2,3,5), PLOT(outgo)
divide la figura in 2*3=6 grafici disposti su 2 righe e 3 colonne e traccia il secondo della seconda riga

GRID Griglia di linee.


GRID ON aggiunge una griglia di linee di riferimento agli assi correnti.
GRID OFF rimuove la griglia.

12
G. Petrucci “Complementi di Costruzione di Macchine”

MESH Traccia una superficie 3-D a reticolo.


MESH(X,Y,Z) traccia una superficie tridimensionale a reticolo di coordinate X, Y, Z, colorata con colori proporzionali al
valore Z. Il punto di vista è specificato da VIEW. Gli assi sono determinate dagli intervalli di X, Y and Z, o dalla funzione
AXIS.
MESH(Z) usa x=1:n e y=1:m. In questo caso, l’altezza, Z, è una funzione ad un solo valore definita su una griglia rettangolare.
MESH(X,Y,Z,C) traccia una superficie tridimensionale a reticolo colorata in modo parametrico definito da 4 matrici. La scala
dei colori è determinata dall’intervallo di C, o dalla funzione CAXIS.

VIEW specifica il punto di vista in grafici 3-D.


VIEW(AZ,EL) e VIEW([AZ,EL]) determinano l’angolo di vista dal quale un osservatore vede il grafico 3-D corrente. AZ è
l’azimuth o rotazione orizzontale e EL è l’elevazione verticale (entrambe in gradi). Azimuth ruota attorno all’asse z, con valori
positivi indicanti rotazioni antiorarie del punto di vista. Valori positivi di elevazione corrispondono a muoversi sopra l’oggetto,
valori negativi a muoversi sotto.
VIEW([X Y Z]) setta l’angolo di vista in coordinate Cartesiane. L’ampiezza del vettore X,Y,Z viene ignorata.

XLABEL nomina l’asse X.


XLABEL('text') aggiunge un testo accanto all’asse X negli assi currenti.

YLABEL nomina l’asse Y.


YLABEL('text') aggiunge un testo accanto all’asse Y negli assi currenti.

LEGEND Crea la “legenda” del grafico.


LEGEND(string1,string2,string3, ...) sovrappone una legenda sul grafico corrente usando le stringhe specificate come
etichette. LEGEND lavora su grafici a linea, barre etc.
LEGEND(...,'Location',pos) posiziona la legenda in una posizione specificata:
'best'= miglior posizionamento automatico (minore sovrapposizione con il grafico)
'northeast'= Angolo superiore destro (default)
'northwest'= Angolo superiore sinistro
'southeast'= Angolo inferiore sinistro
'southwest'= Angolo inferiore destro

LOGLOG Grafico in coordinate Logaritmiche.


LOGLOG(...) è lo stesso di PLOT(...), eccetto che vengono utilizzate scale logaritmiche per entrambi gli assi X e Y.

BAR Grafico a barre.


BAR(X,Y) disegna le colonne della matrice Y M-per-N come M gruppi di N barre verticali. Il vettore X deve essere crescente
o decrescente in modo monotono.
BAR(Y) usa il valore X=1:M. Per vettori di ingresso, BAR(X,Y) o BAR(Y) traccia LENGTH(Y) barre.

POLAR Grafico in coordinate polari.


POLAR(THETA, RHO) esegue un grafico usando coordinate polari con l’angolo THETA, in radianti, rispetto al raggio RHO.
POLAR(THETA,RHO,S) usa lo stile di linea specificato nella stringa S.

13
G. Petrucci “Complementi di Costruzione di Macchine”

ISTRUZIONI DI CONTROLLO
IF/ELSEIF/ELSE Istruzione condizionale se/altrimenti se/altrimenti
Permette che siano eseguite alcune istruzioni nei casi in cui (cioè se) vengono verificate certe condizioni, tipicamente costituite
da relazioni tra variabili. La forma generale dell’istruzione IF è
IF espressione
Istruzioni
ELSEIF espressione
Istruzioni
ELSE
Istruzioni
END
Le istruzioni vengono eseguite se la parte reale dell’espressione ha tutti elementi non-zero. L’espressione è usualmente una
espressione relazionale della forma expr rop expr dove rop è un operatore relazionale del tipo ==, <, >, <=, >=, o ~=.
Le parti ELSE ed ELSEIF sono opzionali.
Esempio
if I = = J
A(I,J) = 2;
elseif abs(I-J) == 1
A(I,J) = -1;
else
A(I,J) = 0;
end
Ricordarsi che l'espressione I= =J coincide con il numero 1 se I=J e 0 se I≠J. L’esempio potrebbe anche essere scritto come:
K=(I= =J);
if K; A(I,J)= 2; end.

SWITCH/CASE/OTHERWISE Sceglie tra diversi casi in base ad una espressione .


Permette che siano eseguite alcune istruzioni nei casi in cui una espressione assume certi valori. È una versione semplificata
dell’istruzione IF, più adatta ai casi in cui la condizione da verificare è il fatto che una variabile assuma un certo valore a scelta
tra un insieme. La forma generale dell’istruzione SWITCH è:
SWITCH switch_expr
CASE case_expr,
istruzione, ..., istruzione
CASE {case_expr1, case_expr2, case_expr3,...}
istruzione, ..., istruzione
OTHERWISE,
istruzione, ..., istruzione
END

Vengono eseguiti i comandi seguenti il primo CASE per il quale la variabile case_expr verifica l’espressione switch_expr.
Quando case_expr è un array (come nel secondo caso sopra), il case_expr verifica se un qualsiasi elemento dell’array verifica
la switch-expression.
Se nessuno dei case-expressions verifica la switch-expressione allora è eseguito il caso OTHERWISE (altrimenti). Viene
eseguito solamente un CASE e l’esecuzione riprende con il primo comando dopo END.
La switch_expr può essere uno scalare o una stringa. Uno scalare switch_expr verifica un case_expr se
switch_expr==case_expr. Una stringa switch_expr verifica un case_expr se strcmp(switch_expr,case_expr) restituisce 1 (vera).
Vengono eseguiti solamente i comandi tra il CASE verificante e il successivo CASE, OTHERWISE o END.

Esempi:

method = 'Bilineare'; c=0.5;d=1;

switch lower(method) a=sin(pi/2);


case {'lineare','bilineare'};disp('Metodo lineare')
case 'cubico'; disp('Metodo cubico') switch (a);
otherwise; disp('Metodo sconosciuto') case(c); b=2;
end case(d); b=4;
otherwise b=6;
end
Il risultato è “Metodo lineare”
Il risultato è b=4, essendo a=sin(pi/2)=1 e d=1;

14
G. Petrucci “Lezioni di Costruzione di Macchine”

FOR/END Ripete le istruzioni comprese tra FOR ed END un numero di volte specificato.
La forma generale dell’istruzione FOR è:
FOR I=A, istruzione, ..., istruzione; END
Se A è un vettore, le istruzioni comprese tra il FOR e l’END vengono eseguite un numero di volte pari alla lunghezza di A.
Ogni esecuzione di tutte le istruzioni comprese tra FOR ed END si definisce iterazione o ciclo. Ad ogni iterazione alla
variabile I viene assegnato il valore dell’elemento di A che si trova nella posizione corrispondente al numero dell’iterazione
che si sta effettuando. Spesso A è nella forma X1:X2 per cui la variabile assume valori crescenti da X1 a X2 con incrementi
unitari ad ogni iterazione.
Ad esempio (si assuma che N ed M abbiano già un valore assegnato).
FOR I = 1:N,
FOR J = 1:M,
A(I,J) = 1/(I+J-1);
END
END

In questo caso per ogni valore di I da 1 ad N viene effettuata una iterazione con J che va da 1 ad N. In totale vengono eseguite
NxM iterazioni e vengono assegnati tutti i valori alla matrice A(N,M). I e J nel gergo informatico sono definiti contatori
perché ad ogni iterazione assumono valore uguale al numero di conteggio dell’iterazione stessa. Spesso è opportuno che nel
ciclo FOR/END una variabile assuma il ruolo di contatore.

In questi due esempi le variabili utilizzate nel ciclo FOR non assumono il ruolo di contatore
FOR S = 1.0: -0.1: 0.0; SS=S^2……. END passi con incrementi di -0.1
a=[1 5 7]: FOR J = a, ... END compie 3 passi dando a J i valori di a.
per cui, se necessario, all’interno del ciclo dovrebbe essere introdotta una istruzione del tipo n=n+1, premettendo n=0 prima
del FOR.
n=0;FOR S = 1.0: -0.1: 0.0; n=n+1; SS=S^2……. END
Sarebbe meglio scrivere così:
S = 1.0: -0.1: 0.0;L=length(S); FOR k=1:L; SS=S(k)^2 ……. END

WHILE Ripete le istruzioni comprese tra WHILE ed END mentre viene verificata una certa condizione.
A differenza dell’istruzione FOR, l’istruzione WHILE viene utilizzata quando non si sa a priori quante iterazioni devono
essere eseguite per conseguire il risultato che interessa. La forma generale dell’istruzione WHILE è:
WHILE espressione
istruzioni
END
Le iterazioni vengono eseguite mentre la parte reale dell’espressione ha tutti elementi non-zero (l’espressione è verificata)
ovvero si può dire che iterazioni vengono eseguite fino a quando la parte reale dell’espressione ha tutti elementi zero
(l’espressione non è più verificata). L’espressione è usualmente il risultato di una operazione relazionale tra 2 numeri o arrays,
del tipo
expr rop expr dove rop è ==, <, >, <=, >=, o ~=.
Ad esempio (assumendo A già definito):
E = 0*A; F = E + eye(size(E)); N = 1;
while norm(E+F-E,1) > 0,
E = E + F; F = A*F/N; N = N + 1;
End

BREAK Termina l’esecuzione dei cicli WHILE o FOR.


Si utilizza per forzare l’uscita da un ciclo for o while nel caso in cui venga verificata una certa condizione. Dovrebbe essere
utilizzata per casi particolari che possono accadere durante l’esecuzione, perché rende il programma meno leggibile.

Esempi:

for N=1:K;
istruzioni;
if N>1000; break;end;
end

while 1
istruzioni;
if N>1000; break;end;
end

Nel secondo esempio il ciclo non si interromperebbe mai.

15
G. Petrucci “Lezioni di Costruzione di Macchine”

FUNCTION Aggiunge una nuova funzione.


All’insieme di funzioni del MATLAB possono essere aggiunte ulteriori funzioni purchè costruite utilizzando funzioni e
comandi già esistenti. I comandi e funzioni che sono compresi nella nuova funzione devono essere posti in un file con
estensione '.m' il cui nome definisce il nome della nuova funzione. All’inizio del file deve essere posta una linea che contiene
la sintassi della nuova funzione.
Ad esempio, l’esistenza di un file chiamato STAT.M sul disco, scritto nel seguente modo:
function [mean,stdev] = stat(x)
% STAT funzione che fornisce statistiche utili (commento).
n = length(x);
mean = sum(x) / n;
stdev = sqrt(sum((x - mean).^2)/n);

definisce una nuova funzione chiamata STAT che calcola la media e la deviazione standard di un vettore.
La nuova funzione può essere richiamata come una normale funzione matlab, ad esempio
z=[1 5 7 10 12 3 6 7]; [m,s]=stat(z);

È importante notare che i nomi delle variabili utilizzate quando la funzione viene richiamata NON devono essere
NECESSARIAMENTE uguali ai nomi delle variabili utilizzate all’interno della una funzione nella sua definizione. Infatti, per
richiamare una funzione è necessario conoscere quante variabili (e di che tipo) richiede e quante variabili (e di che tipo)
restituisce, non come sono state chiamate al loro interno,
In ingresso la funzione riceve i valori numerici assunti dalle variabili contenute tra parentesi tonde nell’espressione che
richiama la funzione, cioè [m,s]=stat(z), e li attribuisce alle variabili contenute tra parentesi tonde nella definizione della
funzione, cioè function [mean,stdev]=stat(x), per essere elaborati.
In uscita la funzione restituisce i valori assunti dalle variabili presenti nelle parentesi quadre della definizione (in questo
esempio il valore numerico assunto da mean ed stdev) sostituendo tali valori nelle variabili presenti tra parentesi quadre
nell’espressione che richiama la funzione (in questo esempio le variabili m ed s).
Le variabili presenti all’interno del corpo della funzione sono tutte variabili locali, cioè non vengono viste dal programma
che richiama la funzione, ma solo dalla funzione. In questo esempio, se nel programma chiamante è già presente una variabile
n, essa non viene modificata, se non è presente non comparirà in memoria dopo l’esecuzione della funzione.

OPERATORI RELAZIONALI E LOGICI


Operatori relazionali.
Gli operatori relazionali servono a confrontare tra loro numeri o arrays. I sei operatori relazionali sono
< minore,
<= minore o uguale,
> maggiore,
>= maggiore o uguale,
== uguale
~= non uguale.
Ad esempio, A < B esegue elemento per elemento un confronto tra A e B e restituisce una matrice della stessa dimensione con
elementi posti a 1 dove la relazione è vera ed elementi posti a 0 dove non lo è. A e B devono avere le stesse dimensioni, oppure
uno dei due deve essere uno scalare.

& Logico AND.


A & B oppure and(A,B) è una matrice i cui elementi sono 1 dove A e B hanno entrambi elementi non-zero, e 0 dove almeno
uno dei due ha un elemento nullo. A e B devono avere le stesse dimensioni (o uno può essere un scalare).

| Logico O.
A | B oppure or(A,B) è una matrice i cui elementi sono 1 dove o A, o B hanno un elemento non-zero, e 0 dove entrambi hanno
elementi nulli. A e B devono avere le stesse dimensioni (o uno può essere uno scalare).

~ Complemento logico (NOT).


~A oppure not(a) è un matrice i cui elementi sono 1 dove A ha elementi zero, e 0 dove A ha elementi non-zero.

xor o esclusivo.
xor(A,B) è 1 dove A e B non sono entrambi uguali o diversi da zero, e 0 dove uno di due è zero e l’altro non-zero.

ANY Vero se un elemento qualsiasi di un vettore è nonzero.


ANY(V) Per vettori, restituisce 1 se uno qualsiasi degli elementi del vettore è non-zero, viceversa restituisce 0. Per matrici,
ANY(X) opera sulle colonne di X, restituendo un vettore riga di 1 e 0.
ANY(X,DIM) lavora sulla dimensione DIM. Per esempio ANY(X,1) lavora sulla prima dimensione di X, cioè le righe.

16
G. Petrucci “Lezioni di Costruzione di Macchine”

ALL Vero se tutti gli elementi di un vettore sono nonzero.


ALL(V) Per vettori, restituisce 1 se tutti gli elementi del vettore sono non-zero, viceversa restituisce 0. Per matrici, ANY(X)
opera sulle colonne di X, restituendo un vettore riga di 1 e 0.
ALL(X,DIM) lavora sulla dimensione DIM. Per esempio ANY(X,1) lavora sulla prima dimensione di X, cioè le righe.

Esempio risultato
a=[1 2 3 4];
b=[1 0 0 5];

c=a>b c=[0 1 1 0]
c=a>=b c=[1 1 1 0]
c=a==b c=[1 0 0 0]
c=a&b c=[1 0 0 1]
c=a|b c=[1 1 1 1]
c=xor (a,b) c=[0 1 1 0]

i=find(a) i=[1 2 3 4]
i=find(b) i=[1 4]
i=find(a>b) i=[2 3]
i=find(a>=b) i=[1 2 3]
i=find(a==b) i=[1]
i=find(a&b) i=[1 4]
i=find(a|b) i=[1 2 3 4]
i=find(xor(a,b)) i=[2 3]

any(a) 1
any(b) 1
all(a) 1
all(b) 0

EXIST Verifica se variabili o funzioni sono definite


EXIST('A') restituisce:
0 se A non esiste
1 se A è una variable nel workspace
2 se A è un M-file nel MATLAB search path.

CONVERSIONE DI VARIABILI, VARIABILI SPECIALI E COSTANTI


NaN Not-a-Number.
NaN è la rappresentazione aritmetica IEEE per Not-a-Number. Un NaN è ottenuto come risultato di una operazione
matematicamente indefinita come zero su zero o infinito meno infinito.

INF Infinito.
INF restituisce la rappresentazione aritmetica IEEE per infinito positivo.
Infinito è anche prodotto da operazionei come divisioni per zero, es. 1.0/0.0, o da overflow, es. exp(1000).

pi 3.1415926535897
La costante pi greco

1i, 1j unità immaginaria


Unità immaginaria, radice quadrata di -1

ISNAN Vero per Not-a-Number (NaN).


ISNAN(X) restituisce un array che contiene 1 dove gli elementi di X sono NaN e 0 dove non lo sono. Ad esempio ISNAN([pi
NaN Inf -Inf]) è [0 1 0 0].

ISINF Vero per infinito (Inf).


ISNAN(X) restituisce un array che contiene 1 dove gli elementi di X sono Inf e 0 dove non lo sono. Ad esempio ISINF([pi
NaN Inf -Inf]) è [0 0 1 1].

ISEMPTY Vero per array vuoto


ISEMPTY(X) restituisce 1 se X è un array vuoto e 0 in caso contrario. Un array vuoto non ha nessun elemento, cioè size(X)=0,
ovvero X=[]. Utile per verificare se la funzione FIND ha trovato o meno elementi…

17
G. Petrucci “Lezioni di Costruzione di Macchine”

FUNZIONI MATEMATICHE E CALCOLO


DIFF Differenza e derivata approssimata.
DIFF(X), per un vettore X, è [X(2)-X(1) X(3)-X(2) ... X(n)-X(n-1)].
DIFF(X), per una matrice X, è una matrice di righe differenza, [X(2:n,:) - X(1:n-1,:)].
SUM Somma di elementi.
SUM(X) per vettori, è la somma degli elementi di X. Per matrici, SUM(X) è un vettore riga con la somma su ciascuna colonna.
SUM(X,DIM) calcola la somma lungo la dimensione DIM.
Esempio: se X = [0 1 2; 3 4 5] allora sum(X,1) è [3 5 7] e sum(X,2) è [3; 12];
PROD Prodotto di elementi.
PROD(X) è il prodotto degli elementi del vettore X. Se X è una matrice, PROD(X è un vettore riga con il prodotto su ciascuna
colonna.
CUSUM Somma cumulativa degli elementi di un vettore
CUMSUM(X), se X è un vettore, CUMSUM(X) è un vettore della stessa lunghezza di X, il cui elemento i-esimo contiene la
somma di tutti gli elementi di X dal primo all'i-esimo.
Esempio: se X = [0 1 2 3 4 5] allora cumsum(X) è [0 1 3 6 10 15];
ABS Valore assoluto di numeri reali e il modulo di complessi.
ABS(X) è il valore assoluto degli elementi di X. Se X è complesso restituisce il modulo.
SIGN Funzione segno.
SIGN(X) per ciascun elemento di X, SIGN(X) restituisce 1 se l’elemento è maggiore di 0, 0 se è uguale a 0, -1 se è minore di
0. Per elementi complessi diversi da 0, SIGN(X) = X./ABS(X).
ROUND Arrotonda all’intero più vicino.
ROUND(X) arrotonfda gli elementi di X al più vicino intero.
TRAPZ Integrazione numerica trapezoidale.
Z = TRAPZ(Y) calcola una approssimazione dell’integrale di Y tramite il metodo dei trapezi con spaziatura unitaria. Per
calcolare l'integrale per spaziatura differente da uno, moltiplicare per l'incremento spaziale. Per vettori, TRAPZ(Y) è
l’integrale di Y. Per matrici, TRAPZ(Y) è un vettore riga con gli integrali su ciascuna colonna.
Z = TRAPZ(X,Y) calcola l’integrale di Y rispetto a X usando il metodo dei trapezi. X e Y devono essere vettori della stessa
lunghezza, o X deve essere un vettore colonna e Y un array la cui prima dimensione è di lunghezza length(X). TRAPZ opera
lungo questa dimensione.
Z = TRAPZ(X,Y,DIM) o TRAPZ(Y,DIM) integra attraverso la dimensione DIM di Y. La lunghezza di X deve essere la stessa
di size(Y,DIM)).
DET Determinante.
D=DET(X) è il determinante della matrice quadrata X.
EIG Autovalori e autovettori.
[V,D] = EIG(X) restituisce una matrice V le cui colonne sono gli autovettori e una matrice diagonale D contenente gli
autovalori, tali che che X*V = V*D.
LINSOLVE Soluzione di sistemi lineari.
X = linsolve(A,B) risolve il sistema lineare A*X=B.
MEAN Valore medio.
Per vettori MEAN(X) è la media degli elementi in X. Per le matrici, MEAN(X) restituisce un vettore riga contenente la media
di ciascuna colonna.
Eempio: se X=[0 1 2; 3 4 5] allora mean(X) è [1.5 2.5 3.5]
STD deviazione standard.
STD(X) è la deviazione standard dei valori del vettore X.
HIST - HIST3 Istogramma monodimensionale - Istogramma bidimensionale
N=hist(a,x) determina l'istogramma di a in base ai valori presenti in x. Ciascun elemento del vettore N contiene il numero di
elementi di a che risultano compresi tra ciascuna coppia di elementi del vettore x.
N=hist3(c,x) determina l'istogramma bidimensionale di c in base ai valori presenti in x. c deve essere un vettore di due righe o
2 colonne (ad esempio c=[a m], con a ed m due vettori colonna); x deve essere vettore di due elementi contenente il numero di
suddivisioni per ciascuna riga o colonna di c oppure un cell array di due elementi ciascuno contenente la discretizzazione dei
valori per le 2 righe o le due colonne di c.
Esempio c=[a m]; x{1}=0:.1:10;x{2}=-5:.1:5; n=hist3(c,x);
IFFT trasformata discreta inversa di Fourier.
IFFT (X) è la trasformata discreta inversa di Fourier di X.

18
G. Petrucci “Lezioni di Costruzione di Macchine”

REAL parte reale di un numero complesso


REAL(X) è la parte reale di X.
DOT - CROSS - NORM Prodotto scalare di vettori - Prodotto vettoriale di vettori - Modulo di vettori
Sc=DOT(V1,V2) effettua il prodotto scalare dei vettori V1 e V2. V1 e V2 devono avere la stessa dimensione. Se i vettori sono
entrambi colonne, l’istruzione eseguita da DOT è: sc=V1′*V2.
V=CROSS(V1,V2) effettua il prodotto vettoriale dei vettori V1 e V2. V1 e V2 devono essere vettori a tre dimensioni.
M=NORM (V) determina il modulo di un vettore
ATAN2 Tangente inversa a 4 quadranti.
A=ATAN2(Y,X) è l’arctangente a 4 quadranti della parte reale degli elementi di Y/X con Y=sen e X=cos. Il valore restituito
dalla funzione è -π≤ATAN2(Y,X)≤π. Si differenzia da ATAN perché considera il segno del seno e del coseno e non il segno
risultante del rapporto.
CART2POL/CART2SPH Trasforma coordinate da cartesiane a polari/sferiche.
[F,R]=CART2POL(X,Y)/[F,T,R]=CART2SPH(X,Y,Z) trasforma elementi di dati immagazzinati in coordinate Cartesiane
X,Y/X,Y,Z nelle corrispondenti coordinate polari/sferiche (angolo F/T e raggio R). F/T è espresso in radianti. Da notare che T
è misurato dal piano XY e non dall’asse Z, come usuale.
POL2CART/SPH2CART Trasforma coordinate da polari/sferiche a cartesiane.
[X,Y]=POL2CART(F,R)/[X,Y,Z]=SPH2CART(F,T,R) trasforma elementi di dati immagazzinati in coordinate polari/sferiche
(angolo F/T e raggio R) nelle corrispondenti Cartesiane X,Y,Z. F/T è espresso in radianti. Da notare che T è misurato dal piano
XY e non dall’asse Z, come usuale.

INTERPOLAZIONE E APPROSSIMAZIONE DI DATI


POLYFIT Approssima dei dati con un polinomio.
POLYFIT(X,Y,N) trova i coefficienti di un polinomio P(X) di grado N che approssima i dati, P(X(I))~=Y(I), nel senso dei
minimi quadrati.
[P,S]=POLYFIT(X,Y,N) restituisce i coefficienti del polinomio in P e una struttura S da usare con POLYVAL per ottenere una
stima dell’errore sulla predizione. La struttura S contiene il fattore di Cholesky della matrice di Vandermonde (R), il grado di
libertà (df), e la norma dei residui (normr) come campi.
x=0:.1:pi;y=sin(x); C=polyfit(x,y,3)
C = -0.0030 -0.4011 1.2856 -0.0392
yp=-.003*(x.^3)-.4011*(x.^2)+1.2856*(x)-.00392;
figure(1); plot(x,y,x,yp)
yp=polyval(C,x);
figure(2); plot(x,y,x,yp)

POLYVAL Valuta un polinomio.


Y=POLYVAL(P,X), quando P è un vettore di lunghezza N+1 i cui elementi sono i coefficienti di un polinomio, Y è il valore
del polinomio in X . Se X è una matrice o un vettore, il polinomio è valutato in tutti i punti in X.
La funzione Y=POLYVAL(P,X) corrisponde a Y = P(1)*X^N + P(2)*X^(N-1) + ... + P(N)*X + P(N+1)
INTERP1 Interpolazione monodimensionale.
YI = INTERP1(X,Y,XI,'method') interpola i dati per trovare i valori YI, cioè i valori della funzione Y nei punti del vettore XI.
Il metodo di default è l’interpolazione lineare. Metodi disponibili sono:
'nearest' - interpolazione al più vicino intorno.
'linear' - interpolazione lineare
'spline' - interpolazione piecewise spline cubica (SPLINEA)
'pchip' - interpolazione piecewise cubica di Hermite (PCHIP)
'cubic' - come 'pchip'
'v5cubic' - interpolazione cubica da MATLAB 5, che non estrapola e usa 'spline' se X non è equispaziato.
Ad esempio, genera a curva sinosuidale grossolana e interpola su una ascissa più fine con interp1 e polyfit:
x = 0:10; y = sin(x); xi = 0:.25:10;
yi1= interp1(x,y,xi); yi2= interp1(x,y,xi,’spline’);
figure(1);subplot (2,1,1);plot(x,y,'o',xi,yi1);subplot (2,1,2);plot(x,y,'o',xi,yi2)
[P,S] = polyfit(x,y,3); yp1=polyval(P,xi);[P,S] = polyfit(x,y,8); yp2=polyval(P,xi);
figure(2);subplot (2,1,1);plot(x,y,'o',xi,yp1);subplot (2,1,2);plot(x,y,'o',xi,yp2)

POLYXPOLY Punti di intersezione di linee o poligoni


[XI,YI] = POLYXPOLY(X1,Y1,X2,Y2) restituisce le coordinate dei punti di intersezione di linee o poligoni
X1, Y1 e X2, Y2 vettori di coordinate dei punti delle due linee o poligoni, XI, YI coordinate dei punti di intersezione
Ad esempio intersezione tra le rette di Goodman e Langer:
[xi,yi]=polyxpoly([0 sr],[sf 0],[0 ss],[ss 0])

19
G. Petrucci “Lezioni di Costruzione di Macchine”

FUNZIONI MATEMATICHE ELEMENTARI OPERATORI

TRIGONOMETRICHE OPERATORI ARITMETICI


sin Seno sec Secante Più + plus
sinh Seno iperbolico sech Secante iperbolica Meno - minus
asin Seno inverso asec Secante inversa Moltiplicazione di Matrici * mtimes
asinh Seno iperbolico inverso asech Secante iperbolica inversa Potenza di Matrice ^ mpower
cos Coseno csc Cosecante Slash o divisione destra matrice / mrdivide
cosh Coseno iperbolico csch Cosecante iperbolica Backslash o divisione sinistra matrice \ mldivide
acos Coseno inverso acsc Cosecante inversa Moltiplicazione elemento x elemento .* times
acosh Coseno iperbolico inverso acsch Cosecante iperb. inversa Potenza elemento x elemento .^ power
tan Tangente cot Cotangente Divisione sinistra elemento x elemento .\ ldivide
tanh Tangente iperbolica coth Cotangente iperbolica Divisione destra elemento x elemento ./ rdivide
atan Tangente inversa acot Cotangente inversa Prodotto tensoriale di Kronecker kron kron
atan2 Tangente inversa 4 quadr. acoth Cotang. iperb. inversa
atanh Tangente iperb. inversa
OPERATORI RELAZIONALI
Uguale == eq
ESPONENZIALI Non uguale ~= ne
exp Esponenziale. Minore di < lt
log Logaritmo naturale. Maggiore di > gt
log10 Logaritmo comune (base 10). Minore o uguale di <= le
log2 Logaritmo in base 2 Maggiore o uguale di >= ge
pow2 Elevazione a potenza in base 2
sqrt Radice quadrata.
OPERATORI LOGICI
and E logico &
COMPLESSI or O logico |
abs Valore assoluto. not NON logico ~
angle Angolo di fase. xor O ESCLUSIVO logico
complex Costruisce un dato complesso dalle parti reale e immaginaria. any Vera se un qualsiasi elemento del vettore è nonzero
conj Complesso coniugato. all Vera se tutti gli elementi del vettore sono nonzero
imag Parte immaginaria.
real Parte reale.
unwrap Angolo di fase svolto.
isreal Vero per array reale. CARATTERI SPECIALI
cplxpair Ordina numeri in coppie di complessi coniugati. argomenti di funzioni
() Parentesi e indici
indici di arrays
[] Parentesi quadre matrici e vettori / output multipli di funzioni
ARROTONDAMENTI E RESTI : due punti fa scorrere gli indici
Funzione Intero -0.6 0.6 separa elementi in una riga
round più vicino -1 1 , virgola separa argomenti nelle funzioni
fix più vicino a 0 0 0 separa le istruzioni
floor più vicino a –infinito -1 0 separa elementi in una colonna
; Punto e virgola
ceil più vicino a +infinito 0 1 separa le istruzioni
resto di una divisione, = Assegnazione Assegna un valore ad una variabile
mod
con segno del divisore . punto decimale Separa i decimali dagli interi
resto di una divisione, .' Punto e apice Traspone una matrice
rem
con segno del dividendo ' Apice Complesso coniugato transposto
'..' Apici Delimitano una stringa
% Commento Permette di scrivere commenti

20

Potrebbero piacerti anche