• Non ci sono risultati.

Università degli Studi di Napoli Federico II CdL Ing. Elettrica

N/A
N/A
Protected

Academic year: 2022

Condividi "Università degli Studi di Napoli Federico II CdL Ing. Elettrica"

Copied!
23
0
0

Testo completo

(1)

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

(2)

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]

(3)

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

(4)

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

(5)

 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

  

=  

  

 

(6)

% 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

(7)

>> 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

(8)

 ciclo for …. end

MATLAB come MATLAB come

linguaggio di programmazione linguaggio di programmazione

 ciclo if … end

 ciclo while … end

(9)

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

(10)

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;

(11)

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)

(12)

% 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

(13)

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)

(14)

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

(15)

% 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

(16)

== 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

(17)

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[

(18)

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 ')

(19)

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

(20)

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

(21)

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

(22)

% 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

(23)

1. Creare un file .m con cui valutare il più piccolo numero xmin rappresentabile in Matlab nella forma 2^k

xmin è il numero per il quale si ha:

min

0

2

x =

2. Creare un file .m con cui valutare il più grande numero

Esercizi Esercizi

2. Creare un file .m con cui valutare il più grande numero xmax rappresentabile in Matlab nella forma 2^k

xmax è il numero per il quale si ha: x

max

* 2 = inf

xmin=4.9407e-324 xmax= 8.9885e+307

Riferimenti

Documenti correlati

Obiettivo del presente lavoro di tesi risulta essere l’individuazione di un sistema di trattamento in grado di depurare reflui ad elevate concentrazioni di inquinante;

Successivamente sono stati analizzati i dati specifici relativi alla produzione e gestione dei rifiuti solidi urbani (Capitolo 3) sempre in riferimento ai diversi contesti

Il lavoro di tesi si propone di analizzare l’evoluzione urbanistico-edilizia e socio-demografica di 19 aree oggetto di ricostruzione post-sismica individuate dalla legge 219/1981

Al contrario, i valori di azoto nitrico in uscita sono risultati al di sopra dei limiti di legge; la normativa, infatti, prescrive in uscita un valore di

L’applicazione dei due modelli cinetici ha richiesto tre fasi di lavoro: (1) ricostruzione delle rete idrica in formato digitale; (2) simulazione idraulica della rete

Frequenza 12 treni/h -&gt; probabilità di congestione = 3% e quindi livello di affidabilità = 97%.. Analisi delle robustezza del Timetable. A partire dai risultati riassunti

Facendo leva su quanto appena detto e ricollegandosi a recenti studi, che hanno valutato come un pretrattamento alcalino vada a ridurre gli effetti fitotossici sul

Sono stati condotti, infatti, diverse simulazioni numeriche con l’obiettivo di indagare gli effetti delle grandezze geometriche (lunghezza totale di misura,