Colpa medica e nesso di causalità lezione del 27 maggio 2014.
Lezione 23 (9 maggio 2012)
Transcript of Lezione 23 (9 maggio 2012)
![Page 1: Lezione 23 (9 maggio 2012)](https://reader035.fdocument.pub/reader035/viewer/2022062706/557beeefd8b42a2b348b4a9c/html5/thumbnails/1.jpg)
Abilità Informatiche
Ingegneria Chimica
Lezione 23 del 9/5/2012
Prof. Antonino Stelitano
![Page 2: Lezione 23 (9 maggio 2012)](https://reader035.fdocument.pub/reader035/viewer/2022062706/557beeefd8b42a2b348b4a9c/html5/thumbnails/2.jpg)
Docente Antonino
Stelitano
Tutor
Lezioni Lunedì
Mercoledì
14:00 – 17:30 aula 16
15:45 – 19:00 aula 17
Lab. Paolo Ercoli – via Tiburtina 205
Ricevimento: Per
appuntamento
Sito web: http://w3.uniroma1.it/ab_informatiche
![Page 3: Lezione 23 (9 maggio 2012)](https://reader035.fdocument.pub/reader035/viewer/2022062706/557beeefd8b42a2b348b4a9c/html5/thumbnails/3.jpg)
Introduzione a Matlab
![Page 4: Lezione 23 (9 maggio 2012)](https://reader035.fdocument.pub/reader035/viewer/2022062706/557beeefd8b42a2b348b4a9c/html5/thumbnails/4.jpg)
Che cosa è Matlab
Matlab è
• un linguaggio di programmazione
• un ambiente di calcolo scientifico con routines altamente specializzate
• un ambiente grafico
![Page 5: Lezione 23 (9 maggio 2012)](https://reader035.fdocument.pub/reader035/viewer/2022062706/557beeefd8b42a2b348b4a9c/html5/thumbnails/5.jpg)
Argomenti trattati
• Matlab come calcolatrice
• Inserire comandi, vettori, matrici
• Operazioni su vettori
• Cicli
• File .m e functions
• Grafici
![Page 6: Lezione 23 (9 maggio 2012)](https://reader035.fdocument.pub/reader035/viewer/2022062706/557beeefd8b42a2b348b4a9c/html5/thumbnails/6.jpg)
Matlab come calcolatrice Per usare Matlab come calcolatrice, inserisco i comandi dopo il >>.
Per esempio:
>> 2+1
ans =
3
Oppure: >> log(4)
ans =
1.3863
Matlab normalmente stampa solo le prime 4 cifre decimali,
ma in realta’ne memorizza molte di piu’. Per vederle tutte:
>> format long
>> log(4)
ans =
1.38629436111989
![Page 7: Lezione 23 (9 maggio 2012)](https://reader035.fdocument.pub/reader035/viewer/2022062706/557beeefd8b42a2b348b4a9c/html5/thumbnails/7.jpg)
Help online
Matlab ha un ricco help online. Per accedere alle informazioni, basta
digitare help nella finestra dei comandi:
>> help
HELP topics:
matlab\general - General purpose commands.
matlab\ops - Operators and special characters.
matlab\lang - Programming language constructs.
matlab\elmat - Elementary matrices and matrix manipulation.
matlab\elfun - Elementary math functions.
matlab\specfun - Specialized math functions.
matlab\matfun - Matrix functions - numerical linear algebra.
… etc.
![Page 8: Lezione 23 (9 maggio 2012)](https://reader035.fdocument.pub/reader035/viewer/2022062706/557beeefd8b42a2b348b4a9c/html5/thumbnails/8.jpg)
Per avere informazioni su una particolare function, per esempio,
eye:
>> help eye
EYE Identity matrix.
EYE(N) is the N-by-N identity matrix.
EYE(M,N) or EYE([M,N]) is an M-by-N matrix with 1's on
the diagonal and zeros elsewhere.
EYE(SIZE(A)) is the same size as A.
See also ONES, ZEROS, RAND, RANDN.
![Page 9: Lezione 23 (9 maggio 2012)](https://reader035.fdocument.pub/reader035/viewer/2022062706/557beeefd8b42a2b348b4a9c/html5/thumbnails/9.jpg)
Per cercare informazioni su un particolare argomento, si usa il
comando lookfor (look for = cerca)
>> lookfor logarithm
LOGSPACE Logarithmically spaced vector.
LOG Natural logarithm.
LOG10 Common (base 10) logarithm.
LOG2 Base 2 logarithm and dissect floating point number.
BETALN Logarithm of beta function.
GAMMALN Logarithm of gamma function.
LOGM Matrix logarithm.
L’output di lookfor contiene i nomi di tutte le functions che
presentano la parola “logarithm”nel loro help.
![Page 10: Lezione 23 (9 maggio 2012)](https://reader035.fdocument.pub/reader035/viewer/2022062706/557beeefd8b42a2b348b4a9c/html5/thumbnails/10.jpg)
Inserire comandi, vettori e matrici
Per inserire comandi, basta digitare il comando al prompt
per esempio:
>> pi
ans =
3.1416
Matlab crea una variabile ans a cui assegna il valore
richiesto (in questo caso pi greco). Anche qui:
>> format long
>> pi
ans =
3.14159265358979
![Page 11: Lezione 23 (9 maggio 2012)](https://reader035.fdocument.pub/reader035/viewer/2022062706/557beeefd8b42a2b348b4a9c/html5/thumbnails/11.jpg)
Per inserire matrici, si usano parentesi quadre:
il comando:
>> a=[2, 3; 1, 2]
produce in output:
a =
2 3
1 2
Notare che non c’è nessun bisogno di dimensionare la matrice:
Matlab infatti attribuisce automaticamente la memoria richiesta.
Attenzione!
Matlab automaticamente stampa l’output di ogni comando: per
eliminare questa risposta è necessario terminare il comando con
un ;
Questo comando, per esempio, non produce nessun output:
>> a=[2, 3; 1, 2];
![Page 12: Lezione 23 (9 maggio 2012)](https://reader035.fdocument.pub/reader035/viewer/2022062706/557beeefd8b42a2b348b4a9c/html5/thumbnails/12.jpg)
E’ possibile costruire matrici automaticamente:
>> a=zeros(2)
a =
0 0
0 0
crea una matrice 2 per 2 di zeri, mentre:
>> a=zeros(2,3)
a =
0 0 0
0 0 0
crea una matrice 2 per 3.
N.B. Le functions di Matlab (come zeros) possono accettare un
numero variabile di elementi in input.
Analogamente funzionano le functions ones (che genera matrici
di 1), rand (che genera matrici di numeri casuali), eye (che
genera le matrici identità).
![Page 13: Lezione 23 (9 maggio 2012)](https://reader035.fdocument.pub/reader035/viewer/2022062706/557beeefd8b42a2b348b4a9c/html5/thumbnails/13.jpg)
Column notation
Il carattere : indica un ciclo implicito, che si usa per creare
vettori:
>> x=1:5
x =
1 2 3 4 5
Si può introdurre anche un incremento non intero:
>> x=1:.1:2
x =
Columns 1 through 8
1.0000 1.1000 1.2000 1.3000 1.4000 1.5000 1.6000 1.7000
Columns 9 through 11
1.8000 1.9000 2.0000
![Page 14: Lezione 23 (9 maggio 2012)](https://reader035.fdocument.pub/reader035/viewer/2022062706/557beeefd8b42a2b348b4a9c/html5/thumbnails/14.jpg)
Operazioni su vettori Matlab esegue automaticamente le operazioni algebriche sulle
matrici:
>> a=ones(2,3);
>> b=ones(2,3);
>> a+b
ans =
2 2 2
2 2 2
o anche: >> a=2*eye(2)
a =
2 0
0 2
![Page 15: Lezione 23 (9 maggio 2012)](https://reader035.fdocument.pub/reader035/viewer/2022062706/557beeefd8b42a2b348b4a9c/html5/thumbnails/15.jpg)
Naturalmente, le operazioni richieste devono essere ben definite:
>> a*b
??? Error using ==> *
Inner matrix dimensions must agree.
Perché il prodotto fra matrici è definito solo quando il numero di colonne
della prima matrice e il numero di righe della seconda coincidono.
Posso invece moltiplicare a per la trasposta di b. Per calcolare la trasposta:
>> b'
ans =
1 1
1 1
1 1
ora il prodotto è ben definito:
>> a*b'
ans =
3 3
3 3
![Page 16: Lezione 23 (9 maggio 2012)](https://reader035.fdocument.pub/reader035/viewer/2022062706/557beeefd8b42a2b348b4a9c/html5/thumbnails/16.jpg)
Si possono calcolare funzioni di matrici:
>> a=zeros(1,2)
a =
0 0
>> b=cos(a)
b =
1 1
Con questo sistema è possibile calcolare in modo vettoriale i
valori di una funzione:
>> x=1:0.1:2;
>> fx=cos(3*x)+2;
![Page 17: Lezione 23 (9 maggio 2012)](https://reader035.fdocument.pub/reader035/viewer/2022062706/557beeefd8b42a2b348b4a9c/html5/thumbnails/17.jpg)
Per calcolare un prodotto, una potenza o un quoziente, Matlab
distingue due operatori diversi. Nel caso del prodotto per esempio:
* denota il prodotto fra due matrici
.* denota il prodotto fra le singole componenti
La stessa distinzione vale per / (quoziente) e ^ (potenza)
Esempio
>> x=1:0.1:2;
>> fx=cos(3*x)*exp(x);
??? Error using ==> *
Inner matrix dimensions must agree.
Il comando corretto è:
>> fx=cos(3*x).*exp(x);
![Page 18: Lezione 23 (9 maggio 2012)](https://reader035.fdocument.pub/reader035/viewer/2022062706/557beeefd8b42a2b348b4a9c/html5/thumbnails/18.jpg)
Un altro esempio:
>> x=ones(2,2);
>> x^2
ans =
2 2
2 2
>> x.^2
ans =
1 1
1 1
Infatti X^2 indica il prodotto della matrice X con sé stessa,
che è definito solo per matrice quadrate, cioè X^2 = X*X,
mentre A=X.^2 indica la matrice con elementi
A i,j = ( X i,j ) 2 .
![Page 19: Lezione 23 (9 maggio 2012)](https://reader035.fdocument.pub/reader035/viewer/2022062706/557beeefd8b42a2b348b4a9c/html5/thumbnails/19.jpg)
Operatori relazionali
Gli operatori relazionali più comuni sono:
== uguale
~= diverso da
< minore di
<= minore o uguale etc.
Esempi:
>> x=2;
>> x==0
ans =
0
>> x==2
ans =
1
(questa relazione e’falsa:)
=> ans=0
(questa relazione è vera:)
=> ans=1
![Page 20: Lezione 23 (9 maggio 2012)](https://reader035.fdocument.pub/reader035/viewer/2022062706/557beeefd8b42a2b348b4a9c/html5/thumbnails/20.jpg)
Gli operatori relazionali possono essere applicati anche alle
matrici:
>> a=[1 2; 0 -1];
>> a>0 (qui i primi due elementi sono veri)
ans =
1 1
0 0
>> a>=0 (qui i primi tre elementi sono veri)
ans =
1 1
1 0
![Page 21: Lezione 23 (9 maggio 2012)](https://reader035.fdocument.pub/reader035/viewer/2022062706/557beeefd8b42a2b348b4a9c/html5/thumbnails/21.jpg)
Operatori logici
Gli operatori logici più comuni sono:
& and logico
| or logico
~ not logico
Esempi:
>> x=1; y= -1;
>> x>0 & y>0 (questa relazione è falsa)
ans =
0
>> x>0 | y>0 (questa relazione è vera)
ans =
1
![Page 22: Lezione 23 (9 maggio 2012)](https://reader035.fdocument.pub/reader035/viewer/2022062706/557beeefd8b42a2b348b4a9c/html5/thumbnails/22.jpg)
Ciclo if … elseif …end
Il ciclo basato su if ha la struttura:
if espressione
istruzioni
end
Esempio:
>> a=[1,4];
>> if a>0
sqrt(a)
end
ans =
1 2
Le istruzioni vengono eseguite solo se
espressione è vera, cioè se espressione
è diversa da zero.
>> if cos(2)
display('ciao')
end
Esempio:
![Page 23: Lezione 23 (9 maggio 2012)](https://reader035.fdocument.pub/reader035/viewer/2022062706/557beeefd8b42a2b348b4a9c/html5/thumbnails/23.jpg)
Un esempio piu’ complicato:
if x=='domenica' | x=='sabato '
display('Evviva!')
elseif x=='venerdi '
display('Torno a casa')
else
display('Vado al Dipartimento')
end
Se imposto:
ans =
Evviva!
>> x='sabato '
ottengo:
In questo esempio, x deve
sempre essere impostato
come variabile di 8
caratteri
![Page 24: Lezione 23 (9 maggio 2012)](https://reader035.fdocument.pub/reader035/viewer/2022062706/557beeefd8b42a2b348b4a9c/html5/thumbnails/24.jpg)
Ciclo for … end
Il ciclo for ha la struttura:
for variabile = espressione
istruzioni
end
Di solito espressione è un vettore:
>> s=0;
>> for i=1:10
s=s+i;
end
>> s
s =
55
calcola la somma dei primi 10 numeri
interi
![Page 25: Lezione 23 (9 maggio 2012)](https://reader035.fdocument.pub/reader035/viewer/2022062706/557beeefd8b42a2b348b4a9c/html5/thumbnails/25.jpg)
I cicli for possono essere uno dentro l’altro:
>> n=4;
>> for i=1:n
for j=1:i
a(i,j) = 1;
end
end
Crea una matrice triangolare inferiore:
>> a
a =
1 0 0 0
1 1 0 0
1 1 1 0
1 1 1 1
![Page 26: Lezione 23 (9 maggio 2012)](https://reader035.fdocument.pub/reader035/viewer/2022062706/557beeefd8b42a2b348b4a9c/html5/thumbnails/26.jpg)
Non sempre i cicli hanno indici interi.
Per esempio:
>> for x=[pi, 51, -72.1]
display(x)
end
in output produce questo risultato:
x =
3.14159265358979
x =
51
x =
-72.1
![Page 27: Lezione 23 (9 maggio 2012)](https://reader035.fdocument.pub/reader035/viewer/2022062706/557beeefd8b42a2b348b4a9c/html5/thumbnails/27.jpg)
Ciclo while … end
Il ciclo while ha la seguente struttura
while espressione
istruzioni
end
Esempio
>> i=1;
>> while i<5
i=i+1;
end
>> i
i =
5
![Page 28: Lezione 23 (9 maggio 2012)](https://reader035.fdocument.pub/reader035/viewer/2022062706/557beeefd8b42a2b348b4a9c/html5/thumbnails/28.jpg)
Calcolare la precisione di macchina
• Devo calcolare un numero x=2^p tale che x=x+1
• .
%Calcola la precisione di macchina
p = 0;
epsilon=1;
while 1~=1+epsilon
epsilon = epsilon/2;
p = p+1;
end
epsilon=epsilon*2, p=p-1
N.B. Il ciclo viene eseguito una volta di troppo, per questo nell’ultima
riga il valore di epsilon viene corretto
![Page 29: Lezione 23 (9 maggio 2012)](https://reader035.fdocument.pub/reader035/viewer/2022062706/557beeefd8b42a2b348b4a9c/html5/thumbnails/29.jpg)
Eseguendo il programma precedente, troviamo:
epsilon =
2.2204e-016
p =
52
Questo è lo stesso valore contenuto nella variabile intrinseca
eps, che contiene appunto la precisione di macchina:
>> eps
ans =
2.2204e-016
![Page 30: Lezione 23 (9 maggio 2012)](https://reader035.fdocument.pub/reader035/viewer/2022062706/557beeefd8b42a2b348b4a9c/html5/thumbnails/30.jpg)
Calcolare il piu’ piccolo numero floating point della forma x=2^p
• Devo trovare un numero della forma x=2^p tale che x sia considerato 0.
•
% Calcola il piu' piccolo numero floating point della
% forma xmin=2^p
x=1;
while x>0
xmin = x;
x=x/2;
end
xmin
![Page 31: Lezione 23 (9 maggio 2012)](https://reader035.fdocument.pub/reader035/viewer/2022062706/557beeefd8b42a2b348b4a9c/html5/thumbnails/31.jpg)
Risultati:
Il piu’ piccolo numero floating point è
>> xmin
xmin =
4.9407e-324
Notare che se dimezzo xmin, trovo:
>> xmin/2
ans =
0
![Page 32: Lezione 23 (9 maggio 2012)](https://reader035.fdocument.pub/reader035/viewer/2022062706/557beeefd8b42a2b348b4a9c/html5/thumbnails/32.jpg)
Il più grande numero floating point
Il più grande numero floating point della forma 2^p è
>> xmax
xmax =
8.9885e+307
Se raddoppio xmax, trovo
>> xmax*2
ans =
Inf
![Page 33: Lezione 23 (9 maggio 2012)](https://reader035.fdocument.pub/reader035/viewer/2022062706/557beeefd8b42a2b348b4a9c/html5/thumbnails/33.jpg)
File .m e functions
• Un file .m (M-file) è un programma riconoscibile da Matlab. La scrittura di files .m permette di:
• Sperimentare con un algoritmo, senza dover reintrodurre una lunga lista di comandi
• Ottenere una documentazione permanente per un lavoro
• Ottenere programmi che possono essere riutilizzati, per esempio cambiando solo i dati
• Scambiare programmi con altri utenti
![Page 34: Lezione 23 (9 maggio 2012)](https://reader035.fdocument.pub/reader035/viewer/2022062706/557beeefd8b42a2b348b4a9c/html5/thumbnails/34.jpg)
Struttura di un file .m
• Script M-files: sono files di comandi. Non hanno variabili in entrata e in uscita e operano sulle variabili del workspace
• function M-files: sono files di comandi, che hanno argomenti in entrata e in uscita. Le variabili interne a questi programmi non influenzano le variabili del workspace
I files .m sono di due tipi:
![Page 35: Lezione 23 (9 maggio 2012)](https://reader035.fdocument.pub/reader035/viewer/2022062706/557beeefd8b42a2b348b4a9c/html5/thumbnails/35.jpg)
Commenti
• Sia gli scripts che le functions devono contenere righe di commento.
• I commenti sono segnalati da %: Matlab ignora tutti i caratteri di una riga dopo il %
• Le prime righe di commento di uno script o di una function diventano parte dello help online
![Page 36: Lezione 23 (9 maggio 2012)](https://reader035.fdocument.pub/reader035/viewer/2022062706/557beeefd8b42a2b348b4a9c/html5/thumbnails/36.jpg)
Esempio: file radice.m
% Questo file calcola la radice degli elementi di
% una matrice a, se a>0, altrimenti da' un messaggio di errore
if a>=0
a=sqrt(a)
else
display('errore')
end
Attenzione: nel workspace deve essere stata definita una
variabile a. Inoltre l’esecuzione di questo script modifica il
contenuto della variabile a
![Page 37: Lezione 23 (9 maggio 2012)](https://reader035.fdocument.pub/reader035/viewer/2022062706/557beeefd8b42a2b348b4a9c/html5/thumbnails/37.jpg)
Function M-files
Esempio
function a=radfunz(x)
% RADFUNZ(X) calcola la radice degli elementi di X
% se X>=0, altrimenti stampa un messaggio di errore
%
if x>=0
a=sqrt(x)
else
display('errore')
end
Questo file deve essere salvato come radfunz.m
![Page 38: Lezione 23 (9 maggio 2012)](https://reader035.fdocument.pub/reader035/viewer/2022062706/557beeefd8b42a2b348b4a9c/html5/thumbnails/38.jpg)
Struttura di una function
• La function inizia con una riga che ne specifica il nome (nell’esempio radfunz), le variabili di input e le variabili di output.
• La function deve essere salvata in un file con lo stesso nome (nell’esempio radfunz.m)
• I commenti dopo la prima riga faranno parte dello help on-line
• Seguono le istruzioni con eventuali altri commenti
![Page 39: Lezione 23 (9 maggio 2012)](https://reader035.fdocument.pub/reader035/viewer/2022062706/557beeefd8b42a2b348b4a9c/html5/thumbnails/39.jpg)
Un altro esempio: function [xmin,xmax]=minmax(a)
%MINMAX(A,M,N) calcola l'elemento minimo, XMIN, e l’elemento
% massimo, XMAX della matrice A.
xmin=Inf; xmax=-Inf;
% ricava le dimensioni della matrice A:
[m,n] = size(a);
for i=1:m
for j=1:n
if a(i,j) > xmax
xmax = a(i,j);
end
if a(i,j) < xmin
xmin = a(i,j);
end
end
end
![Page 40: Lezione 23 (9 maggio 2012)](https://reader035.fdocument.pub/reader035/viewer/2022062706/557beeefd8b42a2b348b4a9c/html5/thumbnails/40.jpg)
function [out1,out2,…]=funz(in1,in2,….)
• Gli argomenti in output vanno a sinistra dell’ =, fra [ ]
• Gli argomenti in input vanno a destra dell’ = , fra ( )
• Posso usare un numero di argomenti minore di quello indicato nella definizione della function, sia in entrata che in uscita.
• Per esempio: a=funz(b), assegna a “in1” il valore “b”, e ad “a” il valore “out1”
La function precedente ha la seguente struttura
![Page 41: Lezione 23 (9 maggio 2012)](https://reader035.fdocument.pub/reader035/viewer/2022062706/557beeefd8b42a2b348b4a9c/html5/thumbnails/41.jpg)
Grafici
• Preparare un vettore di ascisse
• Preparare un vettore di ordinate
• Fare il grafico
• Esempio: grafico di cos(4x)*exp(x), su [0,2]
Per ottenere il grafico di una funzione, devo:
>> x=0:0.01:2;
>> f=cos(4*x).*exp(x);
>> plot(x,f)
![Page 42: Lezione 23 (9 maggio 2012)](https://reader035.fdocument.pub/reader035/viewer/2022062706/557beeefd8b42a2b348b4a9c/html5/thumbnails/42.jpg)
Esercizio
Scrivere una function che calcoli la funzione esponenziale,
utilizzando i primi N termini della serie di Taylor.
Valutare l’ errore per x fissato, utilizzando come confronto la
funzione exp di Matlab, e disegnare un grafico dell’ errore in
funzione di N.
![Page 43: Lezione 23 (9 maggio 2012)](https://reader035.fdocument.pub/reader035/viewer/2022062706/557beeefd8b42a2b348b4a9c/html5/thumbnails/43.jpg)
La function che calcola l’esponenziale può essere scritta come:
function ex=esponenziale(n,x)
% EX=ESPONENZIALE(N;X) Calcola l'esponenziale di e^x
% utilizzando i primi N termini dello sviluppo in serie
% dell'esponenziale
ex=1;
for k=1:n
den=factorial(k);
ex=ex+x.^k/den;
end
![Page 44: Lezione 23 (9 maggio 2012)](https://reader035.fdocument.pub/reader035/viewer/2022062706/557beeefd8b42a2b348b4a9c/html5/thumbnails/44.jpg)
Mentre la function che calcola l’ errore può essere scritta così:
function err=errore_exp(n,x)
% ERR=ERRORE_EXP(N,X) Disegna un grafico dell'errore fra
% la formula di Taylor calcolata per i primi K termini,
% per k=1:N, per l' esponenziale e il
% risultato fornito dalla function EXP
% ERR(K) contiene il l'errore commesso con i primi K
% termini K=1,...,N.
for k=1:n
err(k)=abs(exp(x)-esponenziale(k,x));
end
semilogy(err)
![Page 45: Lezione 23 (9 maggio 2012)](https://reader035.fdocument.pub/reader035/viewer/2022062706/557beeefd8b42a2b348b4a9c/html5/thumbnails/45.jpg)
Si nota che l’ errore diminuisce rapidamente, se aumento N:
![Page 46: Lezione 23 (9 maggio 2012)](https://reader035.fdocument.pub/reader035/viewer/2022062706/557beeefd8b42a2b348b4a9c/html5/thumbnails/46.jpg)
Tuttavia, per valori di N più elevati, l’ errore non diminuisce più,
perché si è a livello dell’ errore di macchina.
![Page 47: Lezione 23 (9 maggio 2012)](https://reader035.fdocument.pub/reader035/viewer/2022062706/557beeefd8b42a2b348b4a9c/html5/thumbnails/47.jpg)
Esempio. Grafico di una circonferenza
>> t=0:0.01:2*pi;
>> x=cos(t);
>> y=sin(t);
>> plot(x,y,'g+')
>> axis equal
![Page 48: Lezione 23 (9 maggio 2012)](https://reader035.fdocument.pub/reader035/viewer/2022062706/557beeefd8b42a2b348b4a9c/html5/thumbnails/48.jpg)
Calcolo della norma 2 di una matrice 2 X 2
function c=norma(a)
%NORMA(A) fornisce una stima della norma 2 di una matrice 2
per 2
%costruisce il cerchio unitario e ne stampa il grafico:
t=0:0.05:2*pi;
x=cos(t);
y=sin(t);
plot(x,y)
axis equal
hold on
![Page 49: Lezione 23 (9 maggio 2012)](https://reader035.fdocument.pub/reader035/viewer/2022062706/557beeefd8b42a2b348b4a9c/html5/thumbnails/49.jpg)
%calcola a*[x;y] e stampa il grafico di ogni punto
c=0;
for i=1:length(t)
b=a*[x(i); y(i)];
plot(b(1),b(2),'g+')
nb = sqrt( b(1)^2 +b(2)^2 );
if nb>c
c=nb;
end
end
…il listato continua ...
![Page 50: Lezione 23 (9 maggio 2012)](https://reader035.fdocument.pub/reader035/viewer/2022062706/557beeefd8b42a2b348b4a9c/html5/thumbnails/50.jpg)
Esempio di cancellazione numerica
Calcolare (1-x)^6 con le due formule:
y1 = (1-x)^6
y2 = 1-6x +15x^2 -20x^3 +15x^4 -6x^5 +x^6
e confrontare y1 e y2 in un intorno di uno
![Page 51: Lezione 23 (9 maggio 2012)](https://reader035.fdocument.pub/reader035/viewer/2022062706/557beeefd8b42a2b348b4a9c/html5/thumbnails/51.jpg)
Esempio di cancellazione numerica
%Calcola (1-x)^6 con le due formule:
%y1 = (1-x)^6
%y2 = 1-6x +15x^2 -20x^3 +15x^4 -6x^5 +x^6
%e confronta y1 e y2 in un intorno di uno
%
k = 0
for delta = [0.1, 0.01, 0.005, 0.0025]
h = delta/100;
x = 1-delta:h:1+delta;
y1 = (1-x).^6;
y2 = 1 -6*x +15*x.^2 -20*x.^3 +15*x.^4 -6*x.^5 + x.^6;
k = k+1;
subplot(2,2,k)
plot(x,y1)
hold
plot(x,y2,'g')
axis([1-delta 1+delta -max(abs(y2)) max(abs(y2)) ])
end
![Page 52: Lezione 23 (9 maggio 2012)](https://reader035.fdocument.pub/reader035/viewer/2022062706/557beeefd8b42a2b348b4a9c/html5/thumbnails/52.jpg)
L’output dello script precedente è:
![Page 53: Lezione 23 (9 maggio 2012)](https://reader035.fdocument.pub/reader035/viewer/2022062706/557beeefd8b42a2b348b4a9c/html5/thumbnails/53.jpg)
Istruzione subplot
L’istruzione subplot(M,N,K) crea una figura contenente
M*N
grafici, distribuiti su M righe ed N colonne.
L’indice K indica che le istruzioni seguenti si riferiscono al
K-esimo grafico, con K che varia fra 1 e M*N
![Page 54: Lezione 23 (9 maggio 2012)](https://reader035.fdocument.pub/reader035/viewer/2022062706/557beeefd8b42a2b348b4a9c/html5/thumbnails/54.jpg)
Esercizi
1) Scrivere una function cha calcoli il valor medio di una
sequenza di numeri assegnati.
2) Scrivere una function che produca una matrice quadrata di zeri,
con degli 1 sulla diagonale che scende da destra verso sinistra.
3) Scrivere una function che disegni un rettangolo, centrato
sull’origine, con i lati assegnati in input.
4) Scrivere una function che disegni l’effetto di una matrice 2 X 2
assegnata, sul segmento S: 0;21 yxS