Introduzione a MATLAB Introduzione a MATLAB
Università degli Studi di Napoli Federico II CdL Ing. Elettrica
Corso di Laboratorio di Circuiti Elettrici
lezione n. 3 lezione n. 3
Dr. Carlo Petrarca
Dipartimento di Ingegneria Elettrica Università di Napoli FEDERICO II
lezione n. 3
lezione n. 3
In MATLAB è possibile operare, oltre che su numeri, anche su parole (stringhe di caratteri)
>> a='Ingegneria‘
Le stringhe si manipolano come i vettori
Un testo in MATLAB è un vettore di caratteri
Stringhe Stringhe
>> a='Ingegneria‘
a =
Ingegneria
>> size(a) ans =
1 10
La stringa va inserita tra apici ‘ ‘
La stringa ‘Ingegneria’ è una
matrice [1 ×××× 10]
Un file .m (M-file) è un programma riconoscibile da Matlab.
E’ un file di testo contenente codice MATLAB In Matlab è presente un editor di files .m
File .m
File .m – – Editor Editor di file .m di file .m
Per accedere all’editor: File → New → M-file
Con il comando Save il file sarà salvato nella Current Directory
I vantaggi di un file .m sono notevoli. Infatti, si può:
Eseguire un algoritmo senza dover digitare ogni
Se si crea un file prova.m e si digita al prompt il comando
>>prova
Matlab eseguirà tutte le istruzioni contenute nel file.
Eseguire un algoritmo senza dover digitare ogni volta una lunga serie di comandi
Ottenere una documentazione del lavoro svolto
Cambiare dati senza dover digitare nuovamente tutti i comandi
Scambiare programmi con altri utenti
Creare la matrice A[3*4]
Estrarre da A il vettore b
7 11 3 6 22 5 6 12
4 3 2 8
A
= − −
{
4 3 2 8}
b =
4
File .m
File .m – – Esercizio Esercizio – – esempio1.m esempio1.m
Creare il vettore bt (trasposta di b)
Calcolare s, prodotto scalare tra la prima riga di A e il vettore bt
Risultato: s=115
3 2 8 b
=
% Esempio n.1 di utilizzo Matlab
% Ripulisco la Command Window clc;
% Cancello dalla memoria tutte le variabili clear all;
% Creazione della matrice A
A=[7 11 3 6; 22 -5 -6 12; 4 3 2 8];
A=[7 11 3 6; 22 -5 -6 12; 4 3 2 8];
% Estrazione del vettore b b=A(3,:);
% Trasposta di b bt=b';
% Prodotto 1^riga di A per bt s=A(1,:)*bt
>> a=input('Inserisci il numero desiderato= ') Inserisci il numero desiderato= 8
a = 8
>> b=input('Inserisci la stringa desiderata= ', 's') Inserisci la stringa desiderata= Lezione
Immissione di dati da tastiera : input Immissione di dati da tastiera : input
Inserisci la stringa desiderata= Lezione b =
Lezione
>> c=input('Inserisci il vettore desiderato= ') Inserisci il vettore desiderato= [5 7 11]
c =
5 7 11
ciclo for …. end
MATLAB come MATLAB come
linguaggio di programmazione linguaggio di programmazione
ciclo if … end
ciclo while … end
Il ciclo for ha la seguente struttura:
for variabile = espressione istruzioni
Il ciclo for consente di ripetere un certo numero di volte le istruzioni in esso contenute
Controllo di flusso: ciclo
Controllo di flusso: ciclo for for … end … end
end
for k=1:4 y(k)=2^k;
end
>> y y =
2 4 8 16
L‘uso eccessivo di cicli for può allungare i tempi di calcolo Basta fare una verifica con le istruzioni sotto riportate. Il vettore V viene ricavato in due modi diversi: nel caso a) si usa un ciclo for; nel caso b) si usa il prodotto elemento per elemento.
Il risultato è lo stesso, ma i tempi di calcolo sono Il risultato è lo stesso, ma i tempi di calcolo sono estremamente diversi!
>>R=[1:1e+5];
>>I=[1:1e+5];
>>for k=1:1e+5;V(k)=R(k)*I(k); end;
R=[1:1e+5];
I=[1:1e+5];
V=R.*I;
Ricavare i valori della funzione seno(x) nei punti indicati dal grafico
Esempio Esempio
0.2 0.4 0.6 0.8 1
0 30 60 90 120 150 180 210 240 270 300 330 360 -1
-0.8 -0.6 -0.4 -0.2 0 0.2
x
y=sin(x)
% Esempio ciclo for … end
% Ricavare i valori della funzione seno clc; clear all;
% Immissione dati
x=0 % inizializzazione deltax=30; %incremento for k=1:13
A(k,1)=sind(x);
>> 0 0.5000 0.8660 1.0000 0.8660 0.5000
0 -0.5000 -0.8660 -1.0000 A(k,1)=sind(x);
x=x+deltax;
end disp(A)
Il comando disp mostra il vettore senza scriverne il nome
-1.0000 -0.8660 -0.5000
0
clc; clear all;
% Immissione dati
x=linspace(0,360,13) % inizializzazione A=sind(x);
disp(A)
Il calcolo poteva essere ottimizzato sfruttando le potenzialità di MATLAB
clc; clear all;
% Immissione dati
x=[0:30:360] % inizializzazione A=sind(x);
disp(A)
Il ciclo if ha la seguente struttura:
if espressione istruzioni end
Il ciclo if consente di eseguire istruzioni solo se una determinata espressione risulta vera
Controllo di flusso: ciclo
Controllo di flusso: ciclo if if … end … end
end
if k==2 y=1;
elseif k==4 y=0;
end if k==2
y=1;
end
if k>0 y=1;
else y=0;
end
% Esempio ciclo if … end clc; clear all;
% Immissione dati da tastiera A=input('Inserisci un numero=');
if A==5 if A==5
disp('Ho immesso il numero 5');
elseif A==3
disp('Ho immesso il numero 3');
else
disp('Il numero immesso è diverso da 3 e diverso da 5');
end
== uguale
~= diverso da
Per il controllo di flusso occorrono gli operatori relazionali gli operatori relazionali più comuni sono:
< minore di
<= minore o uguale
> maggiore di
>= maggiore o uguale
Esercizio Esercizio
Creare un vettore di 10.000 elementi scelti in modo casuale secondo una distribuzione uniforme nell’intervallo [0,100].
Valutare poi la percentuale di elementi compresa nei Valutare poi la percentuale di elementi compresa nei seguenti intervalli:
I1: [0,25[ I2: [25,50[ I3: [50,75[ I4: [50,75[
Esempio Esempio
Ntot=10000; % Numero di elementi
a=0; b=100; U=a+(b-a).*rand(Ntot,1); % creazione del vettore N1=0; N2=0; N3=0; N4=0; % Inizializzazione
for k=1:Ntot
if U(k)>=0 & U(k)<25 N1=N1+1;
elseif U(k)>=25 & U(k)<50 N2=N2+1;
N2=N2+1;
elseif U(k)>=50 & U(k)<75 N3=N3+1;
elseif U(k)>=75 & U(k)<100 N4=N4+1;
end End
disp('Percentuali rilevate');
disp(' %N1 %N2 %N3 %N4 ')
I cicli possono essere innestati, uno dentro l’altro.
for variabile1 = espressione1 for variabile2 = espressione2
istruzioni end
end
for k=1:3 for j=1:2
>> a
Esercizi: Creare una matrice unità [5×5]
Creare una matrice [5×4] triangolare superiore
for j=1:2 a(j,k)=k*j;
end end
a =
1 2 3 2 4 6
Il ciclo if consente di eseguire un blocco di istruzioni finchè una determinata espressione risulta vera. Quando l’espressione risulta falsa, il flusso del programma esce dal ciclo.
Il ciclo while ha la seguente struttura:
while espressione istruzioni
Controllo di flusso: ciclo
Controllo di flusso: ciclo while while … end … end
num=10;
eps=.1;
k=0;
while eps<num k=k+1;
a(k)=num;
num=num/2;
>> a a =
10.0 5.0 2.5 1.25 0.625 0.3125 0.1563
istruzioni
end
Creare un file .m con cui valutare l’epsilon di macchina
L’epsilon di macchina ε è il numero più piccolo che sommato ad 1 restituisce un valore maggiore di 1 :
Esempio Esempio
ε + > 1 1
ε dà indicazioni sul massimo numero di cifre significative In Matlab la costante eps contiene il valore dell’epsilon di macchina
2.2204 16
eps = e −
% Esempio n.3
% Calcolo dell'epsilon di macchina nella forma 2^-k
% Ripulisco la Command Window e cancello le variabili clc; clear all;
k=0;
epsilon=2^0; % Comincio dal numero 1=2^0 while 1~=1+epsilon
k=k+1;
k=k+1;
epsilon = 2^(-k); % Dimezzo il valore di epsilon end
% Il ciclo è eseguito una volta in più del necessario
% Correggo i valori di epsilon e di k k=k-1;
Epsilon=2^(-k); % epsilon=2^-k