• Non ci sono risultati.

Introduzione a Matlab: matrici e cicli for/while

N/A
N/A
Protected

Academic year: 2021

Condividi "Introduzione a Matlab: matrici e cicli for/while"

Copied!
30
0
0

Testo completo

(1)

Introduzione a Matlab: matrici e cicli for/while

Emma Perracchione

Corso di Calcolo Numerico per Ingegneria Meccanica (Univ. PD) Queste slides sono principalmente fornite dal Prof. Alvise Sommariva; vedasi https://www.math.unipd.it/~alvise/DIDATTICA/didattica_CNIE1819.html

A.A. 2018/2019

(2)

Materiale

Materiale

TUTTO IL MATERIALE SI TROVA AL SEGUENTE LINK E VERRA' AGGIORNATO AD OGNI LEZIONE.

https://www.math.unipd.it/~emma/CN1819.html OPUURE VEDASI

https://elearning.unipd.it/dii/course/view.php?id=1720

(3)

Matrices in Matlab

Denire matrici

Esistono vari modi per denire una matriceA. Se ad esempio dovessimo denire:

A =

1 2 3 4 5 6 7 8 9

, il modo più comune è via l'assegnazione diretta

A=[1 2 3; 4 5 6; 7 8 9]; .

Con il comando A(i,j)è possibileselezionare la componente (i, j) della matrice A.

Inoltre

con il comando A(:,j) si seleziona la j-sima colonna di A, con il comando A(i,:) si seleziona la i-sima riga di A.

(4)

Matrices in Matlab

Prime prove con le matrici

1 >> A=[1 2 3; 4 5 6; 7 8 9]

2 A =

3 1 2 3

4 4 5 6

5 7 8 9

6 >> A(2,3) % terzo elemento della seconda riga.

7 ans =

8 6

9 >> A(:,3) % terza colonna.

10 ans =

11 3

12 6

13 9

14 >> A(2,:) % seconda riga.

15 ans =

16 4 5 6

(5)

Matrices in Matlab

Operazioni con le matrici Supponiamo

A = (ai ,j)i ∈[1,m],j∈[1,n], B = (bi ,j)i ∈[1,m],j∈[1,n], siano matrici della stessa dimensione m × n ed s uno scalare.

c=s*A assegna a c il prodotto dello scalare s con la matrice A, ovvero c = (ci ,j)i ∈[1,m],j∈[1,n] con

ci ,j = s · ai ,j, i =1, . . . , m, j = 1, . . . , n;

c=A'assegna a c la trasposizione della matrice A, ovvero c = (ci ,j)i ∈[1,n],j∈[1,m] con

ci ,j = aj ,i, i =1, . . . , n, j = 1, . . . , m;

c=A+B assegna a c la somma della matrice A col la matrice B, ovvero c = (ci ,j)i ∈[1,m],j∈[1,n] con

ci ,j = ai ,j+ bi ,j, i =1, . . . , m, j = 1, . . . , n.

(6)

Matrices in Matlab

Operazioni matrici in Matlab

>> A=[1 2; 3 4] % matrice A A =

1 2

3 4

>> B=[7 8; 9 10] % matrice B B =

7 8

9 10

>> A+B % matrice A+B ans =

8 10

12 14

>> A-B % matrice A-B ans =

-6 -6

-6 -6

(7)

Matrices in Matlab

Prodotti tra matrici in Matlab

c=A.*B assegna a c il prodottopuntualedella matrice A col la matrice B, ovvero c = (ci ,j)i ∈[1,m],j∈[1,n] con

ci ,j = ai ,j· bi ,j, i =1, . . . , m, j = 1, . . . , n;

c=A./B assegna a c la divisionepuntuale della matrice A col la matrice B, ovvero c = (ci ,j)i ∈[1,m],j∈[1,n] con

ci ,j = ai ,j

bi ,j, i =1, . . . , m, j = 1, . . . , n;

c=A.ˆk assegna a c la potenza k-sima puntualedella matrice A, ovvero c = (ci ,j)i ∈[1,m],j∈[1,n] con

ci ,j = aki ,j, i =1, . . . , m, j = 1, . . . , n.

(8)

Matrices in Matlab

Prodotti tra matrici in Matlab

1 >> A.*B % matrice A per B (comp. per comp.)

2 ans =

3 7 16

4 27 40

5 >> A./B % matrice A diviso B (comp. per comp.)

6 ans =

7 0.1429 0.2500

8 0.3333 0.4000

9 >> A.^2 % matrice A al quadrato (comp. per comp.)

10 ans =

11 1 4

12 9 16

13 >>

14

(9)

Matrices in Matlab

Prodotti tra matrici

Osserviamo che quello citatonon corrisponde all'usuale prodotto di matrici. Infatti, se

1 Aha m righe ed n colonne,

2 B ha n righe ed p colonne, allora

C = A ∗ B,

è una matrice con m righe e p colonne tale che C = (ci ,j) con

ci ,j =

n

X

k=1

ai ,k· bk,j, i =1, . . . , m, j = 1, . . . , p.

(10)

Matrices in Matlab

Prodotti tra matrici in Matlab

1 >> A=[1 2; 3 4]

2 A =

3 1 2

4 3 4

5 >> B=[7 8; 9 10]

6 B =

7 7 8

8 9 10

9 >> A*B % prodotto tra matrici

10 ans =

11 25 28

12 57 64

13 >> A.*B % prodotto puntuale tra matrici

14 ans =

15 7 16

16 27 40

(11)

Matrices in Matlab

Comandi utili per matrici

rand(m,n) matrice di numeri random di ordine m per n det(A) determinante della matrice A

size(A) numero di righe e colonne di A hilb(n) matrice di Hilbert di ordine n eye(n) matrice identica di ordine n zeros(n) matrice nulla di ordine n

ones(n) matrice con componenti 1 di ordine n diag(A) vettore diagonale della matrice A inv(A) inversa di A

norm(A) norma di A (anche vettori!) cond(A) condizionamento di A eig(A) autovalori di A

(12)

Matrices in Matlab

Comandi utili per matrici in Matlab

1 >> A =[ 1,2; 3,4];

2 >> size(A)

3 ans =

4 2 2

5 >> eye(2) % matrice identica di dimensione 2.

6 ans =

7 1 0

8 0 1

9 >> zeros(2) % matrice zero di dimensione 2.

10 ans =

11 0 0

12 0 0

13 >> diag(A) % vettore contenente A(1,1), A(2,2).

14 ans =

15 1

16 4

(13)

Matrices in Matlab

Comandi utili per matrici in Matlab

1 >> % AGGIUNGERE RIGHE AD UNA MATRICE.

2 >> A=[1 2 3; 4 5 6; 7 8 9]

3 A =

4 1 2 3

5 4 5 6

6 7 8 9

7 >> B=[10 11 12; 13 14 15];

8 >> C=[A; B]

9 C =

10 1 2 3

11 4 5 6

12 7 8 9

13 10 11 12

14 13 14 15

15 >>

16

(14)

Matrices in Matlab

Comandi utili per matrici in Matlab

1 >> % AGGIUNGERE COLONNE AD UNA MATRICE.

2 >> A=[1 2 3; 4 5 6; 7 8 9]

3 A =

4 1 2 3

5 4 5 6

6 7 8 9

7 >> B=[3.5; 4.5; 5.5];

8 >> C=[A B]

9 C =

10 1.0000 2.0000 3.0000 3.5000

11 4.0000 5.0000 6.0000 4.5000

12 7.0000 8.0000 9.0000 5.5000

1314

(15)

L'editor di Matlab

Come accedervi

Talvolta scivere una successione di istruzioni sulla command window risulta essere complicato.

Matlab ore un ambiente di testo dove poter (con più calma) scrivere le istruzioni. Esso è detto Editor e per eccedervi è necessario cliccare su New Script.

(16)

L'editor di Matlab

Come si presenta

Si presenta come un le vuoto (detto script e/o function).

ATTENZIONE ALLA LORO DIFFERENZA, spiegata nelle prossime slides.

Scriviamo dei comandi elementari:

1 % somma di due numeri

2 a=1; b=5;

3 a+b

4

e salviamo lo script come Prova1.m NELLA PRESENTE DIRECTORY.

(17)

L'editor di Matlab

File tipo script

Il le di testo Prova1.m è un le di tipo script. Infatto esso può essere esguito dalla command window con una riga di testo. Digitare

1 >> Prova1

2

Ciò che distingue uno script da una Matlab function è proprio la parola chiavefunctionche NON è presente nello script.

Le function possono essere richiamate da uno script o dalla command window (MA NECESSITANO DI PARAMETRI DI INPUT).

Per capirci sono come le function viste in precedenza (exp, cos, ....), ma sono denite dall'utente.

(18)

L'editor di Matlab

File tipo function

Come prima clicchiamo sull'icona per aprire un nuovo le di testo vuoto nel Matlab editor.

Scriviamo la funzione che preso x numero reale come INPUT ritorna un altro numero reale y denito come y = 5 + sin(x).

1 % per scrivere una function il comando chiave

2 % e' il seguente:

3 % function [OUTPUT1,OUTPUT2,...]

4 % = nomefunzione(INPUT1,INPUT2,...)

5 function [y] = funprova(x)

6 y = 5+sin(x);

7

Salviamoil le nella cartella corrente come funprova. Salvarlo con lo STESSO NOME che compare nella function.

(19)

L'editor di Matlab

Richiamare le function nella command window

Abbiamo ora due modi per utilizzare tale function. Suponiamo di voler calcolare la funzione 5 + sin(x) in x = 5.

Primo modo: Andiamo sulla command window e digitiamo 1 >> y = funprova(5);

2

Vedrete che nello spazio dedicato alle variabili ècomparsa la variabile y con il valore desiderato.

NB: Le function vanno SEMPRE richiamate con dei parametri di input messi tra parentesi tonde. In questo caso il parametro è 5.

(20)

L'editor di Matlab

Richiamare le function da uno script

Secondo modo per richiamre le function: aprite un NUOVO script e digitate

1 z = funprova(5);

2

Salvate tale le come prova2. Digitate nella command window

1 >> prova2

2

Ora nell'ambiente delle variabili è comparsa la variabile z (che ha lo stesso valore di y).

Se nello script avessimo scitto

1 y = funprova(5);

2

la variabile y sarebbe stata sovrascritta.

(21)

L'editor di Matlab

L'help per le function

Spesso nell'help di Matlab le funzioni sono in maiuscolo, ma quando devono essere chiamate si usi il minuscolo. Per esempio,

1 >>help sum

2 SUM(X,DIM) sums along the dimension DIM.

3 >> a=[1 2];

4 >> SUM(a);

5 ??? Capitalized internal function SUM; Caps Lock may be on.

6 >> sum(a)

7 ans =

8 3

9 >>

10

Conseguentemente il comando (vettoriale) sum che somma tutte le componenti di un vettore non può essere scritto in maiuscolo.

(22)

Linguaggio di Matlab

Operatori di relazione e logici

I principali operatori di relazione sono

== uguale v = non uguale

< minore

> maggiore

<= minore uguale

>= maggiore uguale I principali operatori logicisono

&& and

|| or

v not

& and (componente per componente)

| or (componente per componente)

(23)

Linguaggio di Matlab

Operatori di relazione e logici: Esempi

1 >> (3 == 3) & (2+2 >= 4) % (SI & SI)=SI

2 ans =

3 logical

4 1

5 >> ( 3 == 3 ) & ( pi == 3 ) % (SI & NO)=NO

6 ans =

7 logical

8 0

9 >> (3 == 4) | (2+2 >= 4) % (NO o SI)=SI

10 ans =

11 logical

12 1

13 >> (3 == 4) | ~(2+2 == 4) % (NO o non SI)=(NO o NO)= NO

14 ans =

15 logical

16 0

(24)

Linguaggio di Matlab

Le istruzioni condizionali

L'istruzione condizionale semplice esegue sequenzialmente alcune operazioni, se certi test vengono soddisfatti, secondo

if (espressione logica)

<processo 1 >

else

<processo 2 >

end

Il ramo else talvolta non è necessarioe possiamo quindi scrivere un'istruzione del tipo

if (espressione logica)

< processo 1 >

end

(25)

Linguaggio di Matlab

Le istruzioni condizionali: Esempi Vediamo un esempio.

1 >> a = 50;

2 >> if a > 0

3 s=1;

4 else

5 if a < 0

6 s=_1;

7 else

8 s=0;

9 end

10 end

11 >> fprintf('a: %5.5f s: %1.0f',a,s);

12

E' facile vedere che questo codice calcola il segno di a, nel nostro caso a =50.

(26)

Linguaggio di Matlab

Le istruzioni condizionali

Lastruttura condizionale multipla, sfrutta il fatto che nella struttura condizionale alternativa, si possano utilizzare nuovamente istruzioni condizionali (semplici o multiple), come ad esempio

if < espressione logica 1 e' vericata >

<processo 1 >

elseif < espressione logica 2 e' vericata >

<processo 2 >

else

<processo 3 >

end end

(27)

Linguaggio di Matlab

Comandi nd e rand

Il comando find determina le occorrenze di uno o più elementi in un vettore.

Il comando rand determina numeri casuali in [0, 1].

>> a a =

5 3 6

>> find(a == 6) ans =

3

>> % Il valore di "a" che vale "6" e' il terzo.

>> rand(1,3) % vettore 1 x 3 di numeri casuali, ans =

0.8235 0.6948 0.3171

>> rand(2,2) % matrice 2 x 2 di numeri casuali.

ans =

0.9502 0.4387 0.0344 0.3816

>>

(28)

Linguaggio di Matlab

Ciclo for

Il ciclo forpermette di iterare una porzione di codice, al variare di certi indici.

Essa viene espressa come

for (variabile = vettore)

< processo >

end

>> s=0;

>> for j=1:10

% assegna alla variabile "s" il valore corrente cui si somma "j".

s=s+j;

end

% Passo passo, la variabile j assume:

% il valore 1 ed s=s+j=0+1=1;

% il valore 2 ed s che precedentemente valeva 1,

% ora essendo s=s+j=1+2 vale 3.

% si itera il processo fino a che j=10 (incluso) e alla fine s=55.

% In effetti, la somma dei primi n numeri interi positivi

% vale n * (n+1)/2 che nel nostro caso e' proprio 55.

(29)

Linguaggio di Matlab

Ciclo while

Simile alciclo for è ilciclo while che

itera il processo ogni volta che una certa condizione è vericata, termina il processo la prima volta in cui tale condizione è falsa.

while (espressione logica)

< processo >

end

>> s=0; j=1;

>> while j < 10 s=s+j;

j=j+1;

end

>> s s = 45

% Qui si itera finche' j e' strettamente minore di

% 10, dovendo essere il test j < 10 verificato.

% Quindi l'ultimo j sommato a s e' 9 ed e' per questo

% che la somma vale 45=9 * 10 /2.

(30)

Linguaggio di Matlab

Legame tra ciclo while e ciclo for

La dierenza tra ciclo for e ciclo while consiste nel fatto che for è utilizzato quando è noto il numero di volte in cui compiere il ciclo mentre while quando questa conoscenza non è nota. Esempio:

>> iter=0; err=100; % Esempio 1

>> while (err > 1e-8 && iter <= 100) iter=iter+1;

err=err*rand(1);

>> err=100; % Esempio 2end

>> for iter=1:100 err=err*rand(1);

if err <= 1e-8 return;

end end

Notare che i due esempi sono equivalenti. Inoltre, All'interno di cicli while o for il comando di return può essere sostituito dal comando break.

Riferimenti

Documenti correlati

I Per salvare tutte e solo alcune variabili x , y e z della sessione di lavoro in un file (con estensione.mat) di nome nomefile si utilizza il comando save..  save

Tutte le variabili usate all’interno di una function sono variabili locali, cio` e esistono solo durante l’esecuzione della funzione e non modificano il workspace. Ad esempio,

In questa sezione definiamo i vettori riga e colonna, alcune funzioni Matlab dedicate e di seguito il significato delle operazioni e funzioni elementari gi` a applicate per scalari..

viene eseguito correttamente nonostante ci sia un’apparente contrasto tra le x ed y della parte in shell di Matlab con le variabili x ed y della funzione fun, che peraltro hanno

viene eseguito correttamente nonostante ci sia un’apparente contrasto tra le x ed y della parte in shell di Matlab con le variabili x ed y della funzione fun, che peraltro hanno

Il seguente pseudocodice implementa le differenze divise (derivato da p.292 testo). Implementarlo

I comandi tril e triu permettono di determinare rispettivamente la parte triangolare inferiore e superiore di una matrice, come si evince dal loro help..

insiemi di comandi ‘autonomi’ (function) che possono essere poi essere utilizzati in più programmi (script). − Le funzioni accettano variabili in input e restituiscono altre