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
File .m
File .m – – Editor Editor di file .m di file .m
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
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
File .m
File .m – – Esercizio Esercizio – – esempio1.m esempio1.m
7 11 3 6 22 5 6 12
4 3 2 8
A
= − −
{
4 3 2 8}
b =
4 3
Creare il vettore bt (trasposta di b)
Calcolare s, prodotto scalare tra la prima riga di A
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
Stringhe Stringhe
In MATLAB è possibile operare, oltre che su numeri, anche su parole (stringhe di caratteri)
>> a='Ingegneria‘
a =
Le stringhe si manipolano come i vettori
Un testo in MATLAB è un vettore di caratteri
La stringa va inserita tra apici ‘ ‘
a =
Ingegneria
>> size(a) ans =
1 10
La stringa va inserita tra apici ‘ ‘
La stringa ‘Ingegneria’ è una
matrice [1 ×××× 10]
Immissione di dati da tastiera: input Immissione di dati da tastiera: input
>> 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
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
ciclo for for …. end …. end
MATLAB come linguaggio MATLAB come linguaggio
di programmazione di programmazione
ciclo
ciclo if if … end … end ciclo
ciclo while while … end … end
Controllo di flusso: ciclo
Controllo di flusso: ciclo for for …. end …. end
Il ciclo for ha la seguente struttura:
for variabile = espressione istruzioni
end
Il ciclo for consente di ripetere un certo numero di volte le istruzioni in esso contenute
end
for k=1:4 y(k)=2^k;
end
>> y y =
2 4 8 16 Esempio:
Calcolare il valore della funzione y(k)=2^k per k=1,2,3,4
L‘uso eccessivo di cicli for può allungare i tempi di calcolo Basta fare una verifica con le istruzioni sotto riportate. Il vettore V=R*I viene ricavato in due modi diversi:
a) si usa un ciclo for;
b) si usa il prodotto elemento per elemento.
Il risultato è lo stesso, ma i tempi di calcolo sono estremamente diversi!
estremamente diversi!
a) R=[1:1:1e+5]; I=[1:1:1e+5];tic; for k=1:1e+5; V(k)=R(k)*I(k); end;toc;
b) R=[1:1:1e+5]; I=[1:1:1e+5]; tic;V=R.*I;toc;
Controllo di flusso: ciclo if … end Controllo di flusso: ciclo if … end
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
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 n.2 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');
== 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
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 seguenti intervalli:
I1: [0,25[ I2: [25,50[ I3: [50,75[ I4: [50,75[
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;
elseif U(k)>=50 & U(k)<75 N3=N3+1;
N3=N3+1;
elseif U(k)>=75 & U(k)<100 N4=N4+1;
end end
disp('Percentuali rilevate');
disp(' %N1 %N2 %N3 %N4 ')
disp([N1/Ntot*100 N2/Ntot*100 N3/Ntot*100 N4/Ntot*100])
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 for j=1:2
a(j,k)=k*j;
end end
a =
1 2 3 2 4 6
Controllo di flusso:
Controllo di flusso: while while … … end end
Il ciclo while 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
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
Il comando break Il comando break
Il comando break consente di uscire rapidamente da un ciclo for o while. Se break è presente in un ciclo innestato, esso consente l’uscita solo dal ciclo interno.
clear all; clc;
k=0;
k=0;
while 1
n=input('Scrivi un numero= ') if n<0, break, end
k=k+1;
m(k)=n^2;
Il ciclo continua finchè
non viene inserito un
numero minore di zero
Esercizio
Esercizio – – esempio3.m esempio3.m
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 :
ε + > 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=1; % Comincio dal numero 2^0 while 1~=1+epsilon
epsilon = epsilon/2; % Dimezzo il valore di epsilon epsilon = epsilon/2; % Dimezzo il valore di epsilon k=k+1;
end
% Il ciclo è eseguito una volta in più del necessario
% Correggo i valori di epsilon e di k