You are on page 1of 19

Laboratorio 1 – Introduzione a Matlabr

c
°2007–2011 - Questo testo (compresi i quesiti ed il loro svolgimento) è coperto da diritto d’autore. Non può essere sfruttato a fini
commerciali o di pubblicazione editoriale. Non possono essere ricavati lavori derivati. Ogni abuso sarà 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/)

Per maggiori informazioni consultare il sito internet del corso


http://www1.mate.polimi.it/CN/CalNumBio/index.php3

Matlabr è un software numerico per il calcolo che fornisce un ambiente per varie applicazioni
scientifiche e ingegneristiche; maggiori informazioni possono essere reperite all’indirizzo web
www.mathworks.com

Prima di passare all’introduzione di alcuni comandi elementari, ricordiamo che per chiarimenti
circa l’uso di una funzione è possibile utilizzare il comando help, digitando help nome comando.

Assegnazione di scalari. Cominciamo con l’assegnare il valore 2.45 alla variabile a:


>> a = 2.45
a =
2.45
assegniamo ora il valore 3.1 alla variabile A. Osserviamo che Matlabr fa distinzione tra le
lettere maiuscole e le lettere minuscole.
>> A = 3.1
A =
3.1
Le variabili sono sovrascrivibili, cioè 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 è però necessaria per
separare più comandi scritti sulla stessa linea.
>> a = 1.2,
a =
1.2
>> a = 1.7, a = 2.45
a =
1.7
a =
2.45
Se invece si fa seguire il comando da un punto e virgola, Matlabr non visualizzerà sulla finestra
di comando il risultato dell’operazione; il punto e virgola può essere usato per separare due
comandi sulla stessa riga.

1
>> a = 1.2;
>> a = 1.7; a = 2.45
a =
2.45
Le variabili possono essere cancellate utilizzando il comando clear. Possiamo ad esempio
cancellare la variabile A digitando:
>> clear A
Digitando il comando:
>> clear
vengono cancellate tutte le variabili definite dall’utente. Per sapere quali sono le variabili
dell’utente attualmente in memoria si utilizza il comando:
>> who
Your variables are:
a
Per sapere quali sono le variabili in memoria definite dall’utente è anche possibile utilizzare il
comando whos. Quest’ultimo, a differenza di who, mostra anche la dimensione, l’occupazione
di memoria in numero di bytes e il tipo della variabile.

Variabili predefinite. Alcune variabili, proprie di Matlabr , non necessitano di alcuna


definizione. Tra queste ricordiamo:
• pi: il numero 3.1415927 . . . (π);

• i: l’unità 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.2204e-16
>> 1 + eps / 2 - 1
ans =
0

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


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

2
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ò 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.12345678;
>> format short
>> a
a =
0.1234
>> format short e
>> a
a =
1.2345e-1

Il comando format, senza ulteriori specifiche, seleziona automaticamente il formato più con-
veniente per la classe delle variabili in uso.

Assegnamento di vettori. Riportiamo alcuni metodi per l’inserimento 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 1.4 1.5 1.6 1.7 1.8 1.9 2
>> c = [ 0 : -0.3 : -1 ]
c =
0 - 0.3 - 0.6 - 0.9

Si può 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
dell’intervallo e il numero di elementi del vettore. Nell’esempio il vettore e è costituito
da 6 elementi equispaziati nell’intervallo [0, 5]:

>> e = linspace( 0, 5, 6)

3
e =
0 1 2 3 5 6

• 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 immedia-
tamente 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 4
>> b = a’
b =
1
2
3
4

Naturalmente applicando l’operazione di trasposizione a tutte le modalità viste per


definire dei vettori riga, si ottengono dei vettori colonna.

• Somma e sottrazione (attenzione alla compatibilità delle dimensioni delle matrici!):

>> c = [ 2 5 4 1 ]
c =
2 5 4 1
>> a + c
ans =
3 7 7 5
>> a - c
ans =

4
- 1 - 3 - 1 3
>> d = [ 1 2 3 ]
d =
1 2 3
>> a + d
??? Error using ==> plus
Matrix dimensions must agree
>> c = c’
c =
2
5
4
1
>> a - c
??? Error using ==> minus
Matrix dimensions must agree

• Somma e sottrazione elemento per elemento: Bisogna fare molta attenzione, perché in
Matlabr sono definite anche delle operazioni particolari che agiscono sulle matrici (e
sui vettori) elemento per elemento. Si può sommare uno scalare ad una matrice e la
matrice risultante ha le stesse dimensioni della matrice di partenza e i suoi elementi
sono tutti ottenuti sommando il valore dello scalare agli elementi della matrice iniziale.

>> f = [ 1 2 3 ; 2 4 6 ; 3 6 9 ]
f =
1 2 3
2 4 6
3 6 9
>> f + 3
ans =
4 5 6
5 7 9
6 9 12

• 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

5
◦ prodotto elemento per elemento (attenzione alla compatibilità, in questo caso i due
oggetti devono avere le stesse dimensioni!):
>> b .* c
ans =
2
10
12
4
>> a .* b
??? Error using ==> times
Matrix dimensions must agree
Si osservi che tutte le operazioni elemento per elemento sono contraddistinte dal “.”
che precede il simbolo dell’operazione, con l’eccezione dell’operazione di somma/sottrazione

• Elevamento a potenza elemento per elemento:

>> a.^2
ans =
1 4 9 16

Funzioni intrinseche per matrici.

>> v1 = [ 200; 300; 100 ];


>> v2 = [ 200, 300, 100 ];

• size: fornisce la dimensione del vettore o della matrice passata in input, cioè restituisce
un vettore contenente due interi, il primo indicante il numero di righe (1 se è un vettore
riga) e il secondo indicante il numero di colonne (1 se è un vettore colonna) dell’oggetto
passato in input.

>> size( v1 )
ans =
3 1
>> size( v2 )
ans =
1 3
>> size( v1, 1 )
ans =
3
>> size( v1, 2 )
ans =
1

• lenght: restituisce la lunghezza del vettore passato in input.

>> length( v1 )
ans =

6
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 l’opzione


inf. Se viene passato
q solo il vettore, calcola la norma 2 (norma euclidea) di v, definita
Plength(v) 2
come ||v||2 = i=1 vi . Se viene passato un numero intero n, calcola la norma
³P ´1
length(v) n n . Infine se viene passata l’opzione inf,
n di v definita come ||v||n = i=1 |vi |
calcola la norma infinito di v definita come ||v||∞ = max |vi |.
1≤i≤length(v)

>> norm( v1 )
ans =
374.1657
>> norm( v1, 2 )
ans =
374.1657
>> norm( v1, 1 )
ans =
600
>> norm( v1, inf )
ans =
300

• abs: restituisce un vettore avente come componenti il valore assoluto di ciascuna


componente del vettore passato in input.

7
>> 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 è applicata la funzione.

• sqrt: 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 è un vettore o una matrice esegue l’operazione 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 è una


matrice o un vettore esegue l’operazione 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 è una matrice o un vettore esegue l’operazione su
ogni elemento.

• sin(x): calcola il seno di x, dove x è espresso in radianti ; se x è un vettore o una


matrice esegue l’operazione elemento per elemento.

8
>> sin( pi / 2 )
ans =
1
>> sin( [ pi / 2, 0 ] )
ans =
1 0

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


in radianti ; se x è un vettore o una matrice esegue l’operazione elemento per elemento.

• asin(x) e acos(x): calcolano rispettivamente l’arcoseno e l’arcocoseno di x (in radian-


ti), per x ∈ [−1, 1]; se x è un vettore o una matrice eseguono l’operazione 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 è 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

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

>> ones( 1, 3 )
ans =
1 1 1
>> ones( 3, 1 )
ans =
1
1
1
>> ones( 3, 3 )
ans =
1 1 1
1 1 1
1 1 1

ones(size(A)), dove A è una matrice, costruisce una matrice della stessa dimensione
di A con elementi tutti pari a uno.

>> ones( 3 )
ans =
1 1 1
1 1 1
1 1 1

• Matrice identità: eye(n) costruisce la matrice identità di dimensione n.

>> eye( 3 )
ans =
1 0 0
0 1 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


nell’intervallo [0, 1].

10
>> rand( 1, 3 )
ans =
0.2113 0.7560 0.0002
>> rand( 3, 3 )
ans =
0.8497 0.0684 0.7264
0.6857 0.5608 0.1985
0.8782 0.6624 0.5446

rand(size(A)), dove A è una matrice, costruisce una matrice della stessa dimensione
di A di numeri casuali nell’intervallo [0, 1]. Il comando rand genera un numero casuale
nell’intervallo [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; ((1+x)-1)/x


ans =
1.1102

Questo risultato è decisamente poco accurato e l’errore commesso è del 11%! Tale fenomeno
è detto cancellazione di cifre significative. Un altro esempio molto sorprendente è il seguente

>> 0.1+0.1+0.1-0.3
ans =
5.5511e-17

Seppur molto basso il valore non è 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 è corretta. Cosa cambia tra i due esempi? La differenza è nella
loro rappresentazione nel calcolatore.
Calcolo simbolico. Attraverso il toolbox symbolic di Matlabr possiamo calcolare ana-
liticamente la derivata e gli integrali di funzioni. Infatti attraverso le seguenti righe di codice
possiamo calcolare la derivata e l’integrale della funzione x2

11
>> syms x;
>> f = ’x^2’;
>> diff(f,x)
ans =
2*x
>> int(f,x)
ans =
1/3*x^3

Introduciamo le matrici in Matlabr mediante il seguente esempio:


Esempio 1: quadrato magico di ordine 4.
 
16 2 3 13
 
 5 11 10 8 
A= 
 9 7 6 12 
4 14 15 1

a) Inserire la matrice.

◦ I 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
◦ 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 13
5 11 10 8
9 7 6 12
4 14 15 1

b) Sommare per colonne.

12
>> 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 9 4
2 11 7 14
3 10 6 15
13 8 12 1
>> sum( A, 1 )
ans =
34 34 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 dell’elemento di A posizionato sull’n-esima riga e sull’m-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 l’estrarre la diagonale principale:
>> a = diag( A )
a =
16
11
6

13
1
>> a = diag( A, 0 )
a =
16
11
6
1
Il comando diag(M,k), dove M è una matrice, costruisce un vettore colonna avente
per elementi gli elementi della diagonale k-esima di M, dove k = 0 indica la dia-
gonale 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 è un vettore, costruisce una matrice di dimen-
sione (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
L’operazione si può eseguire in una sola riga di comando scrivendo:
>> sum( diag( A ) )
ans =
34

e) Sommare gli elementi dell’antidiagonale (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 l’antidiagonale. Possiamo, utilizzan-
do un ciclo for, estrarre la sotto-diagonale (non sarà conveniente utilizzare il primo
modo con una matrice di grandi dimensioni, per esempio 50 x 50!)
>> n = size( A, 1 )
n =
4
>> for i = 1 : n
ad( i ) = A( i, n-i+1 );
>> end

14
>> ad
ad =
13 10 7 4
>> sum( ad )
ans =
34
oppure, effettuando direttamente la somma:
>> s = 0;
>> for i = 1 : n
s = s + A( i, n-i+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 M–
files. A questo scopo apriamo l’editor di Matlabr utilizzando il comando edit
o cliccando sulla prima icona in alto a sinistra (l’icona con un foglio bianco) e
riportiamo i comandi usati.
n = size( A, 1 );
for i = 1 : n
ad( i ) = A( i, n-i+1 );
end
sum( ad )
Salviamo il file modificato (di tipo M–file) cliccando sul menù file e successiva-
mente su save as, come (ad esempio) antidiag.m (l’estensione .m indica un file di
Matlabr ). 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 è salvato.
N.B.: è 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.
>> antidiag
ans =
34
N.B.: le variabili utilizzate durante l’esecuzione dell’M–file 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 sull’antidiagonale di M. A questo
scopo apriamo una nuova finestra nell’editor di Matlabr e scriviamo quindi la
funzione:
function ris = adiag( a )

15
% Funzione che estrae l’antidiagonale di una matrice quadrata
% Se la matrice non e’ quadrata viene mostrato un messaggio d’errore
% Input : a = matrice
% Output : ris = vettore contenente l’antidiagonale di a

ris = [];
n = size( a );

if n( 1 ) ~= n( 2 )
disp(’Errore:’);
disp(’ la matrice deve essere quadrata !’);
return
end

dim = n( 1 );
for i = 1 : dim
ris( i ) = a( i, dim-i+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è che non sarà eseguita; è buona
norma commentare le funzioni indicando cosa fanno e quali sono i parametri in
input ed in output ed inizializzare, all’inizio 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 l’estensione .m.
A questo punto possiamo usare adiag per estrarre la sotto-diagonale e ottenerne
la somma:
>> v = adiag( A );
>> v
v =
13 10 7 4
>> sum( v )
ans =
34
oppure, dato che abbiamo un unico output:
>> sum( adiag( 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

16
dim, pur essendo utilizzata nell’esecuzione 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 Matlabr 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, A^2, A.*A e A.^2.

>> A * A
ans =
345 257 281 273
257 313 305 281
281 305 313 257
273 281 257 345
>> A^2
ans =
345 257 281 273
257 313 305 281
281 305 313 257
273 281 257 345
>> A .* A
ans =
256 4 9 169
25 121 100 64
81 49 36 144
16 196 225 1
>> A.^2
ans =
256 4 9 169

17
25 121 100 64
81 49 36 144
16 196 225 1

Con l’operatore * si intende il prodotto matriciale righe per colonne, per cui le dimensioni
delle matrici devono essere compatibili. Con l’operatore ^ si intende l’elevamento a
potenza, rispetto al prodotto righe per colonne. Quindi A^n = A*...*A, n volte. Per
avere compatibilità di dimensioni nel prodotto righe per colonne, tale operazione può
essere eseguita solo su matrici quadrate. L’operatore . indica che l’operazione 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 1.4142 1.7321 3.6056
2.2361 3.3166 3.1623 2.8284
3.0000 2.6458 2.4495 3.4641
2.0000 3.7417 3.8730 1.0000
>> A.^(1/2)
ans =
4.0000 1.4142 1.7321 3.6056
2.2361 3.3166 3.1623 2.8284
3.0000 2.6458 2.4495 3.4641
2.0000 3.7417 3.8730 1.0000

18
Esercizio 1

1. Inserire la matrice di Hilbert di dimensione 5x5 definita da:


1
ai j =
i+j−1

(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).

19