Sei sulla pagina 1di 13

A.A.

2013 2014

Calcolo Numerico
Proff: D. Ambrosi, P. Antonietti,

R.M. Lancellotti, P. Pacciarini, A. Tagliabue

Laboratorio 1
Introduzione al linguaggio Matlab
c
2007
2014 Questo testo (compresi i quesiti ed il loro svolgimento) `
e coperto da diritto dautore. Non pu`
o essere sfruttato a fini commerciali o di pubblicazione editoriale.
Non possono essere ricavati lavori derivati. Ogni abuso sar`
a punito a termine di legge dal titolare del diritto. This text is licensed to the public under the Creative Commons
Attribution-NonCommercial-NoDerivs2.5 License (http://creativecommons.org/licenses/by-nc-nd/2.5/).

Matlab `e un software numerico per il calcolo che fornisce un ambiente per varie applicazioni scientifiche e ingegneristiche; maggiori informazioni possono essere reperite allindirizzo http://www.mathworks.
com. Prima di passare allintroduzione di alcuni comandi elementari, ricordiamo che per chiarimenti circa
luso di una funzione `e possibile utilizzare il comando help, digitando help nome comando.
Assegnazione di scalari Cominciamo con lassegnare il valore 2.45 alla variabile a:
>> a = 2 . 4 5
a =
2.45

assegniamo ora il valore 3.1 alla variabile A. Osserviamo che Matlab fa distinzione tra le lettere maiuscole
e le lettere minuscole.
>> A = 3 . 1
A =
3.1

Le variabili sono sovrascrivibili, cio`e se ora assegniamo ad A un nuovo valore:


>> A = 7 . 2
A =
7.2

il precedente valore 3.1 viene definitivamente perso. Osserviamo che possiamo far seguire un comando
da una virgola, senza rilevare nessuna differenza; tale virgola `e per`o necessaria per separare pi`
u comandi
scritti sulla stessa linea.
>> a = 1 . 2 ,
a =
1.2
>> a = 1 . 7 , a = 2 . 4 5
a =
1.7
a =
2.45

Se invece si fa seguire il comando da un punto e virgola, Matlab non visualizzer`a sulla finestra di
comando il risultato delloperazione; il punto e virgola pu`o essere usato per separare due comandi sulla
stessa riga.
>> a = 1 . 2 ;
>> a = 1 . 7 ; a = 2 . 4 5
a =
2.45

Le variabili possono essere cancellate utilizzando il comando clear. Possiamo ad esempio cancellare la
variabile A digitando:
>> c l e a r A

Digitando il comando:
>> c l e a r

vengono cancellate tutte le variabili definite dallutente. Per sapere quali sono le variabili dellutente
attualmente in memoria si utilizza il comando:
>> who
Your v a r i a b l e s a r e :
a

Per sapere quali sono le variabili in memoria definite dallutente `e anche possibile utilizzare il comando
whos. Questultimo, a differenza di who, mostra anche la dimensione, loccupazione di memoria in numero
di bytes e il tipo della variabile.

Variabili predefinite
queste ricordiamo:

Alcune variabili, proprie di Matlab, non necessitano di alcuna definizione. Tra

pi: il numero 3.1415927 . . . ();

i: lunit`
a immaginaria 1;
eps: il minimo valore tale che, per il calcolatore, sia (1 + eps) > 1, pari a (sul calcolatore che stiamo
usando):
>> eps
eps =
2 . 2 2 0 4 e 16
>> 1 + eps / 2 1
ans =
0

N.B.: le variabili predefinite possono essere ridefinite, ovvero:


>> a = 5 + 2 i
a =
5.0000 + 2.0000 i
>> i = 2
i =
2
>> a = 5 + 2 i
a =
9

In questo caso si consiglia di utilizzare 1i al posto di i, che Matlab riconoscer`a in modo univoco come
lunit`
a immaginaria i.
Istruzione format Serve per modificare il formato di visualizzazione dei risultati ma NON la precisione
con cui i calcoli vengono condotti. Il comando ha la seguente sintassi: format type, dove type pu`o ad
esempio assumere i valori: short per visualizzare in formato decimale fisso a 5 cifre e long a 15 cifre,
short e per visualizzare in formato floating point a 5 cifre e long e a 15 cifre.
>> a = 0 . 1 2 3 4 5 6 7 8 ;
>> format s h o r t
>> a
a =
0.1234
>> format s h o r t e
>> a
a =
1 . 2 3 4 5 e1

Il comando format, senza ulteriori specifiche, seleziona automaticamente il formato pi`


u conveniente per
la classe delle variabili in uso.
Assegnamento di vettori Riportiamo alcuni metodi per linserimento di vettori.
Vettori riga:
>> b = [ 1 2 3 4 ]
b =
1
2
3
4
>> b1 = [ 1 , 2 , 3 , 4 ]
b1 =
1
2
3
4
>> b2 = [ 1 : 1 : 4 ]
b2 =
1
2
3
4
>> b3 = [ 1 : 4 ]
b3 =
1
2
3
4
>> d = [ 1 : 0 . 1 : 2 ]
d =
1
1.1
1.2
1.3
>> c = [ 0 : 0.3 : 1 ]
c =
0 0.3 0.6 0.9

1.4

1.5

1.6

1.7

1.8

1.9

Si pu`
o utilizzare anche il comando linspace per definire un vettore riga di elementi equispaziati. Al
comando devono essere forniti come parametri di ingresso i due estremi dellintervallo e il numero di
elementi del vettore. Nellesempio il vettore e `e costituito da 6 elementi equispaziati nellintervallo
[0, 5]:
>> e = linspace ( 0 , 5 , 6 )
e =
0
1
2
3
4

Vettori colonna:
>> f = [ 1 ; 2 ; 3 ; 4 ]
f =
1
2
3
4

Combinando i comandi visti per definire i vettori riga e colonna si ottengono immediatamente le
istruzioni per definire le matrici, per esempio:
>> h = [ 1 2 3 ; 2 4 7 ; 1 4 3 ]
h =
1
2
3
2
4
7
1
4
3

Operazioni su vettori e sulle matrici.


Trasposizione:
>> a = [ 1 : 4 ]
a =
1
2
3
>> b = a
b =
1
2
3
4

Naturalmente applicando loperazione di trasposizione a tutte le modalit`a viste per definire dei
vettori riga, si ottengono dei vettori colonna.
Somma e sottrazione (attenzione alla compatibilit`a delle dimensioni delle matrici!):
>> c = [ 2 5 4 1 ]
c =
2
5
4
1
>> a + c
ans =
3
7
7
5
>> a c
ans =
1 3 1
3
>> d = [ 1 2 3 ]
d =
1
2
3
>> a + d
? ? ? E r r o r u s i n g ==> p l u s
Matrix d i m e n s i o n s must a g r e e
>> c = c
c =
2
5
4
1
>> a c
? ? ? E r r o r u s i n g ==> minus
Matrix d i m e n s i o n s must a g r e e

Somma e sottrazione elemento per elemento: Bisogna fare molta attenzione, perche in Matlab
sono definite anche delle operazioni particolari che agiscono sulle matrici (e sui vettori) elemento
per elemento. Si pu`
o sommare uno scalare ad una matrice e la matrice risultante ha le stesse
3

dimensioni della matrice di partenza e i suoi elementi sono tutti ottenuti sommando il valore dello
scalare agli elementi della matrice iniziale.
>> f = [
f =
1
2
3
>> f + 3
ans =
4
5
6

1 2 3 ; 2 4 6 ; 3
2
4
6

3
6
9

5
7
9

6
9
12

6 9 ]

Prodotto:
prodotto (righe per colonne) vettore riga - vettore colonna (della stessa lunghezza):
>> a b
ans =
30

prodotto vettore colonna per vettore riga (della stessa lunghezza):


>> b a
ans =
1
2
3
4

2
4
6
8

3
6
9
12

4
8
12
16

prodotto elemento per elemento (attenzione alla compatibilit`a, in questo caso i due oggetti
devono avere le stesse dimensioni!):
>> b . c
ans =
2
10
12
4
>> a . b
? ? ? E r r o r u s i n g ==> t i m e s
Matrix d i m e n s i o n s must a g r e e

Si osservi che tutte le operazioni elemento per elemento sono contraddistinte dal . che precede
il simbolo delloperazione, con leccezione delloperazione di somma/sottrazione
Elevamento a potenza elemento per elemento:
>> a . 2
ans =
1

16

Funzioni intrinseche per matrici .


>> v1 = [ 2 0 0 ; 3 0 0 ; 100 ] ;
>> v2 = [ 2 0 0 , 3 0 0 , 100 ] ;

size: fornisce la dimensione del vettore o della matrice passata in input, cio`e restituisce un vettore
contenente due interi, il primo indicante il numero di righe (1 se `e un vettore riga) e il secondo
indicante il numero di colonne (1 se `e un vettore colonna) delloggetto passato in input.
>> s i z e ( v1 )
ans =
3
1
>> s i z e ( v2 )
ans =
1
3
>> s i z e ( v1 , 1 )
ans =
3
>> s i z e ( v1 , 2 )
ans =
1

lenght: restituisce la lunghezza del vettore passato in input.


>> length ( v1 )
ans =
3
>> length ( v2 )
ans =
3

max, min: calcolano il massimo e il minimo valore delle componenti del vettore passato in input.
>> max( v1 )
ans =
300
>> min( v1 )
ans =
100

sum, prod: calcolano la somma e il prodotto degli elementi del vettore passato in input.
>> sum( v1 )
ans =
600
>> prod ( v1 )
ans =
6000000

norm: ha due parametri in input: un vettore v e un numero intero n oppure lopzione inf. Se viene
passato solo il vettore, calcola la norma 2 (norma euclidea) di v, definita come
v
ulength(v)
u X
kvk2 = t
v2i .
i=1

Se viene passato un numero intero n, calcola la norma n di v definita come

n1

length(v)

kvkn =

|vi |n .

i=1

Infine se viene passata lopzione inf, calcola la norma infinito di v definita come
kvk =

max
1ilength(v)

|vi |.

>> norm( v1 )
ans =
374.1657
>> norm( v1 , 2 )
ans =
374.1657
>> norm( v1 , 1 )
ans =
600
>> norm( v1 , i n f )
ans =
300

abs: restituisce un vettore avente come componenti il valore assoluto di ciascuna componente del
vettore passato in input.
>> w = [ 1 4 5 9 ]
w =
1 4
5 9
>> abs ( w )
ans =
1
4
5
9

Funzioni matematiche elementari Le funzioni matematiche elementari restituiscono matrici della


stessa dimensione di quelle cui `e applicata la funzione.
sqrt(x): calcola la radice quadrata degli elementi dello scalare, vettore o matrice passato in input.
>> sqrt ( 4 )
ans =
2
>> sqrt ( [ 4 , 1 ] )
ans =
2
i

exp(x): calcola ex . Se x `e un vettore o una matrice esegue loperazione per ogni componente.
>> exp ( 1 )
ans =
2.7182
>> exp ( [ 1 ; 0 ] )
ans =
2.7182
1.

log(x): calcola il logaritmo in base e (logaritmo naturale) di x, ln(x). Se x `e una matrice o un


vettore esegue loperazione su ogni elemento.
>> log ( exp ( 1 ) )
ans =
1
>> log ( [ 1 exp ( 1 ) ] )
ans =
0
1

log10(x) e log2(x): calcolano rispettivamente il logaritmo in base 10 di x, log(x), e il logaritmo


in base 2 di x, log2 (x); se x `e una matrice o un vettore esegue loperazione su ogni elemento.
sin(x): calcola il seno di x, dove x `e espresso in radianti; se x `e un vettore o una matrice esegue
loperazione elemento per elemento.
>> s i n ( pi / 2 )
ans =
1
>> s i n ( [ pi / 2 , 0 ] )
ans =
1
0

cos(x) e tan(x): calcolano rispettivamente il coseno e la tangente di x, dove x `e espresso in


radianti; se x `e un vettore o una matrice esegue loperazione elemento per elemento.
asin(x) e acos(x): calcolano rispettivamente larcoseno e larcocoseno di x (in radianti), per
x [1, 1]; se x `e un vettore o una matrice eseguono loperazione elemento per elemento.
>> asin ( 1 )
ans =
1.5708
>> asin ( [ 1 , 0 . 5 ] )
ans =
1.5708
0.5236

Funzioni per definire vettori o matrici particolari


Vettore o matrice nulla: zeros(n,m): costruisce una matrice n x m di elementi pari a zero.
>> zeros ( 1 , 3 )
ans =
0
0
0
>> zeros ( 3 , 1 )
ans =
0
0
0
>> zeros ( 3 , 3 )
ans =
0
0
0
0
0
0
0
0
0

zeros(size(A)), dove A `e una matrice, costruisce una matrice della stessa dimensione di A con
elementi tutti nulli.
>> zeros ( 3 )
ans =
0
0
0
0
0
0
0
0
0

Matrice di 1: ones(n,m) : costruisce una matrice n x m di elementi pari a uno.


>> o n e s (
ans =
1
>> o n e s (
ans =
1
1
1
>> o n e s (
ans =
1
1
1

1, 3 )
1
1
3, 1 )

3, 3 )
1
1
1

1
1
1

ones(size(A)), dove A `e una matrice, costruisce una matrice della stessa dimensione di A con
elementi tutti pari a uno.
>> o n e s (
ans =
1
1
1

3 )
1
1
1

1
1
1

Matrice identit`
a: eye(n) costruisce la matrice identit`a di dimensione n.
>> eye ( 3 )
ans =
1
0
0
1
0
0

0
0
1

eye(n,m) costruisce una matrice n x m con 1 sulla diagonale principale e 0 altrove (aii = 1,
i = 1, . . . , min(n, m) e aij = 0, i 6= j).
>> eye ( 2 , 3 )
ans =
1
0
0
0
1
0
>> eye ( 3 , 2 )
ans =
1
0
0
1
0
0

Matrice di numeri casuali: rand(n,m) costruisce una matrice n x m di numeri casuali nellintervallo
[0, 1].
>> rand ( 1 , 3 )
ans =
0.2113
0.7560
>> rand ( 3 , 3 )
ans =
0.8497
0.0684
0.6857
0.5608
0.8782
0.6624

0.0002

0.7264
0.1985
0.5446

rand(size(A)), dove A `e una matrice, costruisce una matrice della stessa dimensione di A di numeri
casuali nellintervallo [0, 1]. Il comando rand genera un numero casuale nellintervallo [0, 1], diverso
ogni volta che il comando viene invocato.
>> rand
ans =
0.3616
>> rand
ans =
0.2922

Errore macchina Il calcolatore, per sua natura, deve lavorare in aritmetica non esatta e quindi opera
delle appossimazioni. Queste approssimazioni, anche se in generale vengono trascurate, possono dare
luogo a fenomeni sorprendenti. Consideriamo ad esempio la seguente riga di codice
>> x = 1 . e 15;
ans =
1.1102

((1+ x ) 1)/ x

Questo risultato `e decisamente poco accurato e lerrore commesso `e del 11%! Tale fenomeno `e detto
cancellazione di cifre significative. Un altro esempio molto sorprendente `e il seguente
>> 0.1+0.1+0.1 0.3
ans =
5 . 5 5 1 1 e 17

Seppur molto basso il valore non `e zero. Infine il seguente esempio sembra contraddire il precedente,
infatti scrivendo la seguente riga
>> 0.1+0.1 0.2
ans =
0

E in questo caso la risposta `e corretta. Cosa cambia tra i due esempi? La differenza `e nella loro
rappresentazione nel calcolatore.
Calcolo simbolico Attraverso il toolbox symbolic di Matlab possiamo calcolare analiticamente la
derivata e gli integrali di funzioni. Infatti attraverso le seguenti righe di codice possiamo calcolare la
derivata e lintegrale della funzione x2
>> syms x ;
>> f = x 2 ;
>> d i f f ( f , x )
ans =
2 x
>> i n t ( f , x )
ans =
1/3 x 3

Esempio 1: quadrato magico di ordine 4

16

5
A=
9
4

2
11
7
14

3
10
6
15

13
8
12
1

a) Inserire la matrice.
I modo)
>> A = [ 1 6 2 3 1 3 ; 5 11 10 8 ; 9 7 6 1 2 ; 4 14 15 1 ]
A =
16
2
3
13
5
11
10
8
9
7
6
12
4
14
15
1

II Modo)
>> A = [ 16 2 3 13
>>
5 11 10 8
>>
9 7 6 12
>>
4 14 15 1 ]
A =
16
2
3
13
5
11
10
8
9
7
6
12
4
14
15
1

III Modo) Usare il comando magic( 4 ) che costruisce la matrice magica di ordine 4.
>> A = magic ( 4 )
A =
16
2
3
5
11
10
9
7
6
4
14
15

13
8
12
1

b) Sommare per colonne.


>> sum( A, 1 )
ans =
34
34

34

34

c) Sommare per righe.


I Modo)
>> sum( A, 2 )
ans =
34
34
34
34

II Modo)
>> A = A
A =
16
5
2
11
3
10
13
8
>> sum( A, 1 )
ans =
34
34

9
7
6
12

4
14
15
1

34

34

Il comando A costruisce la matrice trasposta della matrice A. Osserviamo che il comando


sum(A) calcola la somma per colonne degli elementi della matrice A.
d) Sommare gli elementi della diagonale principale.
I Modo) Scriviamo la somma degli elementi richiesti. Con il comando A(n,m) otteniamo il
valore dellelemento di A posizionato sulln-esima riga e sullm-esima colonna.
>> A( 1 , 1 ) + A( 2 , 2 ) + A( 3 , 3 ) + A( 4 , 4 )
ans =
34

oppure, utilizzando il comando sum visto per i vettori:


>> sum( [ A( 1 , 1 ) A( 2 , 2 ) A( 3 , 3 ) A( 4 , 4 ) ] )
ans =
34

II Modo) Cominciamo con lestrarre la diagonale principale:


>> a = diag ( A )
a =
16
11
6
1
>> a = diag ( A, 0 )
a =
16
11
6
1

Il comando diag(M,k), dove M `e una matrice, costruisce un vettore colonna avente per elementi
gli elementi della diagonale k-esima di M, dove k = 0 indica la diagonale principale, k > 0
indica la k-esima sopra-diagonale mentre k < 0 indica la k-esima sotto-diagonale; se k viene
omesso, si suppone k=0. Osserviamo infine che il comando diag(v,k), dove v `e un vettore,
costruisce una matrice di dimensione (length(v)+k)x(length(v)+k) con gli elementi di v sulla
diagonale k-esima e gli altri elementi nulli. Una volta estratta la sotto-diagonale, possiamo
usare il comando sum visto nel caso dei vettori.
>> sum( a )
ans =
34

Loperazione si pu`
o eseguire in una sola riga di comando scrivendo:

>> sum( diag ( A ) )


ans =
34

e) Sommare gli elementi dellantidiagonale (elementi nei riquadri).


I Modo) Procedendo in maniera analoga al I Modo del punto precedente possiamo scrivere:
>> A( 1 , 4 ) + A( 2 , 3 ) + A( 3 , 2 ) + A( 4 , 1 )
ans =
34

oppure
>> sum( [ A( 1 , 4 ) , A( 2 , 3 ) , A( 3 , 2 ) , A( 4 , 1 ) ] )
ans =
34.

II Modo) Non esiste un comando per estrarre lantidiagonale. Possiamo, utilizzando un ciclo
for, estrarre la sotto-diagonale (non sar`a conveniente utilizzare il primo modo con una matrice
di grandi dimensioni, per esempio 50 x 50!)
>> n = s i z e ( A, 1 )
n =
4
>> f o r i = 1 : n
ad ( i ) = A( i , ni +1 ) ;
>> end
>> ad
ad =
13
10
7
4
>> sum( ad )
ans =
34

oppure, effettuando direttamente la somma:


>> s = 0 ;
>> f o r i = 1 : n
s = s + A( i , ni +1 ) ;
>> end
>> s
s =
34

Al posto di eseguire i comandi direttamente da linea di comando, possiamo scriverli su un file


.m, salvarli e successivamente eseguirli; file di questo tipo sono detti Mfiles. A questo scopo
apriamo leditor di Matlab utilizzando il comando edit o cliccando sulla prima icona in alto
a sinistra (licona con un foglio bianco) e riportiamo i comandi usati.
n = s i z e ( A, 1 ) ;
for i = 1 : n
ad ( i ) = A( i , ni +1 ) ;
end
sum( ad )

Salviamo il file modificato (di tipo Mfile) cliccando sul men`


u file e successivamente su save
as, come (ad esempio) antidiag.m (lestensione .m indica un file di Matlab). Eseguiamo il
file (e quindi i comandi salvati) digitando semplicemente il nome del file, se il file si trova nella
cartella in cui stiamo lavorando, oppure run . . . /antidiag.m, dove . . . indicano il percorso
dalla cartella dove stiamo lavorando alla cartella in cui il file `e salvato.
N.B.: `e possibile cambiare la directory di lavoro utilizzando il comando cd (si digiti help cd
per maggiori chiarimenti) oppure utilizzando le apposite icone nella barra dei comandi.
>> a n t i d i a g
ans =
34

N.B.: le variabili utilizzate durante lesecuzione dellMfile vengono assegnate nello spazio di
lavoro.
III Modo) Scriviamo la funzione adiag.m che, data in input una generica matrice M, restituisce
in output il vettore v degli elementi sullantidiagonale di M. A questo scopo apriamo una nuova
finestra nelleditor di Matlab e scriviamo quindi la funzione:

10

function r i s = a d i a g ( a )
%
%
%
%

Funzione che e s t r a e l a n t i d i a g o n a l e d i una m a t r i c e q u a d r a t a


Se l a m a t r i c e non e q u a d r a t a v i e n e m o s t r a t o un m e s s a g g i o d e r r o r e
Input
: a
= matrice
Output :
r i s = vettore contenente l antidiagonale di a

ris = [ ] ;
n = size ( a ) ;
i f n ( 1 ) = n ( 2 )
disp ( Errore : ) ;
disp (
la matrice deve essere quadrata ! ) ;
return
end
dim = n ( 1 ) ;
f o r i = 1 : dim
r i s ( i ) = a ( i , dimi +1 ) ;
end

Le funzioni devono sempre cominciare con la parola function; prima del nome della funzione,
bisogna inserire, tra parentesi quadre, le variabili in output (le parentesi quadre possono essere
omesse se deve essere restituita una sola variabile). Dopo il nome della funzione si scrivono,
tra parentesi tonde, le variabili in input. Il % indica una riga di commento, una riga cio`e
che non sar`
a eseguita; `e buona norma commentare le funzioni indicando cosa fanno e quali
sono i parametri in input ed in output ed inizializzare, allinizio della funzione, le variabili in
output. Il comando disp scrive a video, sulla command window, la stringa passata in input; il
comando return rende il controllo al chiamante, restituendo le variabili indicate come output.
Le funzioni devono essere salvate con lestensione .m.
A questo punto possiamo usare adiag per estrarre la sotto-diagonale e ottenerne la somma:
>> v = a d i a g ( A ) ;
>> v
v =
13
10
7
>> sum( v )
ans =
34

oppure, dato che abbiamo un unico output:


>> sum( a d i a g ( A ) )
ans =
34

N.B.: le variabili utilizzate nella funzione non vengono assegnate nello spazio di lavoro; ovviamente fanno eccezione le variabili di output. Per esempio la variabile dim, pur essendo
utilizzata nellesecuzione della funzione, non viene assegnata come variabile nello spazio di
lavoro.
f) Estrarre la prima riga di A. Per estrarre la prima riga di A, dobbiamo prendere gli elementi di A che
stanno sulla prima riga e su tutte le colonne di A:
>> a1 = A( 1 , : )
a1 =
16
2
3

13

Il simbolo : significa tutti. Se si trova al posto del primo indice, indica a Matlab di prendere
tutte le righe, mentre se si trova al posto del secondo indice indica di prendere tutte le colonne.
g) Estrarre i primi tre elementi della seconda colonna di A. Per estrarre gli elementi richiesti, dobbiamo
prendere gli elementi che stanno sulla seconda colonna e sulle righe dalla prima alla terza. Scriviamo
quindi:
>> a2 = A( 1 : 3 , 2 )
a2 =
2
11
7

h) Calcolare A*A, A2, A.*A e A.2.

11

>> A A
ans =
345
257
281
273
>> A2
ans =
345
257
281
273
>> A . A
ans =
256
25
81
16
>> A. 2
ans =
256
25
81
16

257
313
305
281

281
305
313
257

273
281
257
345

257
313
305
281

281
305
313
257

273
281
257
345

4
121
49
196

9
100
36
225

169
64
144
1

4
121
49
196

9
100
36
225

169
64
144
1

Con loperatore * si intende il prodotto matriciale righe per colonne, per cui le dimensioni delle
matrici devono essere compatibili. Con loperatore si intende lelevamento a potenza, rispetto al
prodotto righe per colonne. Quindi An = A*...*A, n volte. Per avere compatibilit`a di dimensioni
nel prodotto righe per colonne, tale operazione pu`o essere eseguita solo su matrici quadrate. Loperatore . indica che loperazione che lo segue deve essere eseguita elemento per elemento (per cui le
due matrici coinvolte devono avere le stesse dimensioni). Quindi A.*A costruisce una matrice con la
stessa dimensione di A e con elementi pari al prodotto degli elementi nella stessa posizione e A.2
rende una matrice con la stessa dimensione di A e con elementi pari al quadrato degli elementi della
matrice A.
i) Calcolare la radice quadrata degli elementi di A:
>> sqrt ( A )
ans =
4.0000
2.2361
3.0000
2.0000
>> A. ( 1 / 2 )
ans =
4.0000
2.2361
3.0000
2.0000

1.4142
3.3166
2.6458
3.7417

1.7321
3.1623
2.4495
3.8730

3.6056
2.8284
3.4641
1.0000

1.4142
3.3166
2.6458
3.7417

1.7321
3.1623
2.4495
3.8730

3.6056
2.8284
3.4641
1.0000

12

Esercizio 1
1. Inserire la matrice di Hilbert di dimensione 5x5 definita da:
ai j =

1
i+j1

(SUGGERIMENTO: utilizzare due cicli for annidati.)


2. Scrivere una funzione mat hilbert.m che fornisca la matrice di Hilbert avente una generica dimensione n inserendo un commento.
3. Verificare il corretto funzionamento della funzione del punto precedente, confrontandone il risultato
con la matrice restituita dal comando hilb(5).

13

Potrebbero piacerti anche