Upload
antonello-corsini
View
213
Download
0
Embed Size (px)
Citation preview
22aa lezione - laboratorio lezione - laboratorio
a.a 2004-2005
Corso di Laurea Ingegneria MECCANICA
Come visualizzare l’editorCome visualizzare l’editorPer visualizzare l’editor del Matlab si può:
– digitare il comando edit – si può selezionare con il mouse dall’ambiente di
calcolo la voce File e dal menu a tendina che compare la voce New oppure Open se il file esiste già
m-filem-file
File di testo contenente codici MATLAB. Consente dimemorizzare ed organizzare istruzioni e comandi MATLAB
script
function
m-file m-file scriptscript
•Standard ASCII file di testo
•Esegue una serie di comandi MATLAB sul workspace base
Il carattere “ % “ serve a scrivere commenti all’interno di M-file
% EPS1.m - m-file per % calcolare la precisione di% macchina num=0;EPS=1;while (1+EPS)>1EPS=EPS/2;num=num+1;vett(num,:)=[num EPS];fprintf('%5.0f %30.16e\n',... vett(num,:));end
% EPS1.m - m-file per % calcolare la precisione di% macchina num=0;EPS=1;while (1+EPS)>1EPS=EPS/2;num=num+1;vett(num,:)=[num EPS];fprintf('%5.0f %30.16e\n',... vett(num,:));end
N.B. Non accetta argomenti di input e di output
Salvare e richiamare m-script Salvare e richiamare m-script
Richiamare: Si richiama digitando solo il nome con cui è stato memorizzato il file
Eps1
N.B. Lo script opera sul Workspace base.
Salvare m-script:Dopo avere digitato le istruzioni nella finestra dell’editor di testo, si salva selezionando sulla barra la voce file e scegliendo nel menu : Save as. Assegnare un nome: Eps1
Risultati del file EPS1.mRisultati del file EPS1.m
% EPS1.m - m-file per % calcolare la precisione di% macchina num=0;EPS=1;while (1+EPS)>1 EPS=EPS/2; num=num+1; vett(num,:)=[num EPS]; fprintf('%5.0f %30.16e \n',... vett(num,:));end
% EPS1.m - m-file per % calcolare la precisione di% macchina num=0;EPS=1;while (1+EPS)>1 EPS=EPS/2; num=num+1; vett(num,:)=[num EPS]; fprintf('%5.0f %30.16e \n',... vett(num,:));end
» eps1 1 5.0000000000000000e-001 2 2.5000000000000000e-001 3 1.2500000000000000e-001 ………………… 52 2.2204460492503131e-016 53 1.1102230246251565e-016 »» whos Name Size Bytes Class EPS 1x1 8 double array num 1x1 8 double array vett 53x2 848 double array
Grand total is 108 elements using 864 bytes»
» eps1 1 5.0000000000000000e-001 2 2.5000000000000000e-001 3 1.2500000000000000e-001 ………………… 52 2.2204460492503131e-016 53 1.1102230246251565e-016 »» whos Name Size Bytes Class EPS 1x1 8 double array num 1x1 8 double array vett 53x2 848 double array
Grand total is 108 elements using 864 bytes»
m-file m-file functionfunction
function s = fatt(c)%%FATT calcola il fattoriale di c.%s=1;if c>=1 for i=1:c s=s*i; endend
Help Online
Codice
Argomento di output Nome della funzione
Argom. di input
function [out1,out2,out3] = nome_fun(in1,in2)
Caso generale
Salvare e Richiamare m-Salvare e Richiamare m-functionfunction
– Si salva in modo analogo a m-script: nome_fun– Si richiama digitando un’uguaglianza del
tipo:[out1,out2,out3] = nome_fun(in1,in2)– out1,out2,out3 sono i parametri in uscita, – in1,in2 sono i parametri in input
valore=fatt(5)
N.B. La function• accetta argomenti di input e di output
• opera su un’area di memoria distinta dal Workspace base (variabili locali)
function s = fatt(c)%% FATT calcola il fattoriale del numero c.%s=1;if c>=1 for i=1:c s=s*i; endend
function s = fatt(c)%% FATT calcola il fattoriale del numero c.%s=1;if c>=1 for i=1:c s=s*i; endend
Risultati del file fatt.mRisultati del file fatt.m
» numero =5;» valore=fatt(numero)valore = 120» » whos Name Size Bytes Class
numero 1x1 8 double array valore 1x1 8 double array
Grand total is 2 elements using 16 bytes»
» numero =5;» valore=fatt(numero)valore = 120» » whos Name Size Bytes Class
numero 1x1 8 double array valore 1x1 8 double array
Grand total is 2 elements using 16 bytes»
Come opera il Matlab Come opera il Matlab (ad esempio su fatt)(ad esempio su fatt)
• controlla se fatt è una variabile in uso, se no… • controlla se fatt è una funzione built-in, se no.. • controlla se nella directory corrente esiste un M-file
chiamato fatt.m, altrimenti…• controlla se il file fatt.m è presente in qualche
directory del path, partendo dall’inizio della lista delle directory indicate e fermandosi appena trova un file con lo stesso nome, se no…
• fatt ??? Undefined function or variable ‘fatt’.
Funzioni matematiche elementariFunzioni matematiche elementari
round(x) Arrotonda all’intero più vicino
fix(x) Arrotonda all’intero più vicino verso 0
floor(x) Arrotonda all’intero più vicino verso -
ceil(x) Arrotonda all’intero più vicino verso
sign(x) -1 se x è negativo, 1 se positivo
rem(x,y) Resto della divisione x/y
abs(x) Modulo o valore assoluto
sqrt(x) Radice quadrata
exp(x) Esponenziale
log(x) Logaritmo naturale
log10(x) Logaritmo in base 10
log2(x) Logaritmo in base 2
round(x) Arrotonda all’intero più vicino
fix(x) Arrotonda all’intero più vicino verso 0
floor(x) Arrotonda all’intero più vicino verso -
ceil(x) Arrotonda all’intero più vicino verso
sign(x) -1 se x è negativo, 1 se positivo
rem(x,y) Resto della divisione x/y
abs(x) Modulo o valore assoluto
sqrt(x) Radice quadrata
exp(x) Esponenziale
log(x) Logaritmo naturale
log10(x) Logaritmo in base 10
log2(x) Logaritmo in base 2
» x=[-1.9 -0.2 3.4 5.6 7.0]
» round(x)ans = -2 0 3 6 7» fix(x)ans = -1 0 3 5 7» floor(x)ans = -2 -1 3 5 7» ceil(x)ans = -1 0 4 6 7
» x=[-1.9 -0.2 3.4 5.6 7.0]
» round(x)ans = -2 0 3 6 7» fix(x)ans = -1 0 3 5 7» floor(x)ans = -2 -1 3 5 7» ceil(x)ans = -1 0 4 6 7
Funzioni trigonometricheFunzioni trigonometriche
sin(x) Seno
cos(x) Coseno
tan(x) Tangente
asin(x) Arcoseno
acos(x) Arcocoseno
atan(x) Arcotangente
sinh(x) Seno iperbolico
cosh(x) Coseno iperbolico
tanh(x) Tangente iperbolica
sin(x) Seno
cos(x) Coseno
tan(x) Tangente
asin(x) Arcoseno
acos(x) Arcocoseno
atan(x) Arcotangente
sinh(x) Seno iperbolico
cosh(x) Coseno iperbolico
tanh(x) Tangente iperbolica
» x=[0:.2:1]';» y=sin(x);» [x y]ans = 0 0 0.2000 0.1987 0.4000 0.3894 0.6000 0.5646 0.8000 0.7174 1.0000 0.8415
» x=[0:.2:1]';» y=sin(x);» [x y]ans = 0 0 0.2000 0.1987 0.4000 0.3894 0.6000 0.5646 0.8000 0.7174 1.0000 0.8415
L’angolo x deve essere espresso in radianti!!!
ciclo forciclo for
• È simile a quello di altri linguaggi di programmazione
• Ripete le istruzioni molte volte
• Può essere annidato
» N = 4;» for I = 1:N for J = 1:N A(I,J) = 1/(I+J-1); endend
» N = 4;» for I = 1:N for J = 1:N A(I,J) = 1/(I+J-1); endend
Queste istruzioni consentono di costruire la matrice di Hilbert 4x4.
RisultatiRisultati
>> AA = 1 1/2 1/3 1/4 1/2 1/3 1/4 1/5 1/3 1/4 1/5 1/6 1/4 1/5 1/6 1/7>>% comando equivalente hilb(4)
>> AA = 1 1/2 1/3 1/4 1/2 1/3 1/4 1/5 1/3 1/4 1/5 1/6 1/4 1/5 1/6 1/7>>% comando equivalente hilb(4)
Esercizio 1: applicazione di Esercizio 1: applicazione di ciclo forciclo for
Scrivere un file script tale che, assegnate due matrici:A=[1 2 3; 4 5 6; 7 8 9],B=[5 -6 -9; 1 1 0; 24 1 0],determini la matrice C che ha l’elemento C(i,j) pari a:C(i,j)=A(i,j)+cos((i+j)*pi/(n+m))*B(i,j),con . e nxmRBA
File File prova2.mprova2.m
A=[1 2 3; 4 5 6; 7 8 9];B=[5 -6 -9; 1 1 0; 24 1 0];[n,m]=size(A);for i =1:n for j=1:m C(i,j)=A(i,j)+cos((i+j)*pi/(n+m))*B(i,j); endenddisp('Il risultato è')disp(C)
Risultati file Risultati file prova2.mprova2.m
>>prova2Il risultato è 3.5000 2.0000 7.5000 4.0000 4.5000 6.0000 -5.0000 7.1340 9.0000>>
>>prova2Il risultato è 3.5000 2.0000 7.5000 4.0000 4.5000 6.0000 -5.0000 7.1340 9.0000>>
Operatori relazionali e logiciOperatori relazionali e logici
& and
| or
~ not
& and
| or
~ not
Logici
< Minore
<= Minore o uguale
> Maggiore
>= Maggiore o uguale
== Uguale
~= Diverso
< Minore
<= Minore o uguale
> Maggiore
>= Maggiore o uguale
== Uguale
~= Diverso
Relazionali
Gli operatori relazionali precedono nell’ordine gli operatori logici.
ciclo whileciclo while
Consente di ripetere le istruzioni sotto il controllo di una condizione logica
%% File ciclo_w.m% I=1; N=4; while I <= N J = 1; while J <= N A(I,J) =(I+J); J=J+1; end I=I+1; end
%% File ciclo_w.m% I=1; N=4; while I <= N J = 1; while J <= N A(I,J) =(I+J); J=J+1; end I=I+1; end
Risultati file: Risultati file: ciclo_w.mciclo_w.m
>> ciclo_w>> AA = 2 3 4 5 3 4 5 6 4 5 6 7 5 6 7 8>>
>> ciclo_w>> AA = 2 3 4 5 3 4 5 6 4 5 6 7 5 6 7 8>>
Costruire con cicli while la matrice di Hilbert 4x4.
Costrutto Costrutto if - elseif - else
• È una struttura condizionale
• Se una condizione è verificata esegue le istruzioni associate
ESEMPIO
»if I == J A(I,J) = 2; elseif abs(I-J)== 1 A(I,J) = -1; else A(I,J) = 0;end
ESEMPIO
»if I == J A(I,J) = 2; elseif abs(I-J)== 1 A(I,J) = -1; else A(I,J) = 0;end
File File ciclo_if.mciclo_if.m%% File Ciclo_if.m% N=4; for I=1:N for J=1:N if I == J A(I,J) = 2; elseif abs(I-J)== 1 A(I,J) = -1; else A(I,J) = 0; end end end
%% File Ciclo_if.m% N=4; for I=1:N for J=1:N if I == J A(I,J) = 2; elseif abs(I-J)== 1 A(I,J) = -1; else A(I,J) = 0; end end end
Le istruzioni precedenti, inserite in un doppio ciclo for, consentono di costruire una matrice tridiagonale che ha tutti 2 sulla diagonale principale e -1 sulle codiagonali inferiore e superiore.
Risultati file Risultati file ciclo_if.mciclo_if.m
>> ciclo_if>> AA = 2 -1 0 0 -1 2 -1 0 0 -1 2 -1 0 0 -1 2>>
>> ciclo_if>> AA = 2 -1 0 0 -1 2 -1 0 0 -1 2 -1 0 0 -1 2>>
Comando di Comando di inputinputinput: inserimento di variabili numeriche da tastiera
» z=input(' Introduci il valore di z ') Introduci il valore di z 5z = 5
» z=input(' Introduci il valore di z ') Introduci il valore di z 5z = 5
» a=input(' Introduci la matrice a ') Introduci la matrice a [1 2 3; 4 5 6; 7 8 9]a = 1 2 3 4 5 6 7 8 9
» a=input(' Introduci la matrice a ') Introduci la matrice a [1 2 3; 4 5 6; 7 8 9]a = 1 2 3 4 5 6 7 8 9
Sintassi: nome_var=input(str)str: stringa che si vuole compaia sul prompt
Comando di Comando di inputinputinput: inserimento di stringhe da tastiera
» flag=input('Vuoi continuare? ','s')Vuoi continuare? Siflag =Si» flag=input('Vuoi continuare? ')Vuoi continuare? 'Si'flag =Si
» flag=input('Vuoi continuare? ','s')Vuoi continuare? Siflag =Si» flag=input('Vuoi continuare? ')Vuoi continuare? 'Si'flag =Si
Sintassi: var_str=input(str,’s’)str: stringa che compare sul prompt
Comandi di Comandi di outputoutputdisp consente di stampare linee di testo e valori di variabili.
» disp('valore della funzione') valore della funzione
» disp('valore della funzione') valore della funzione
num2str(x) converte lo scalare x in una stringa di caratteri
»x=sqrt(2);»disp(x) 1.4142
»x=sqrt(2);»disp(x) 1.4142
» disp(['Il valore di x è ',num2str(x)])Il valore di x è 1.4142
» disp(['Il valore di x è ',num2str(x)])Il valore di x è 1.4142
Sintassi: disp(str) str stringa o nome di una variabile numerica
che si vuole far comparire sul prompt.
Comandi di Comandi di outputoutputfprintf consente di stampare linee di testo, valori numerici e matrici specificandone il formato.
Sintassi: fprintf(‘ format \n’, mat’ )
format è una stringa contenente i formati scelti con la specifica:%campo_totale.n_cifre_decimali_tipoin numero pari alle colonne della matrice mat;
\n serve per andare a capoè necessario scrivere mat’ per stampare la matrice mat così come si presenta.
» temp=31;» fprintf('La temperatura è di %4.1f gradi C°\n',temp)La temperatura è di 31.0 gradi C°
» temp=31;» fprintf('La temperatura è di %4.1f gradi C°\n',temp)La temperatura è di 31.0 gradi C°
» fprintf(' %f\n',pi) 3.141593
» fprintf(' %f\n',pi) 3.141593
%f consente la stampa dei numeri in fixed point,
%e consente la stampa in formato esponenziale
» fprintf(’ %12.10f\n ',pi)3.1415926536» fprintf(’ %18.10e\n ',pi)3.1415926536e+000
» fprintf(’ %12.10f\n ',pi)3.1415926536» fprintf(’ %18.10e\n ',pi)3.1415926536e+000
Nei formati f ed e il numero alla sinistra del punto è il campo totale, quello alla destra indica quante cifre decimali devono essere stampate
Esercizio 2Esercizio 2• Calcolare la funzione f = e-xsin(x) nei punti
appartenenti all’intervallo [0,1] equispaziati con passo 0.2.
• Costruire una tabella contenente i valori di x
e di f e stamparla utilizzando:
• 3 cifre decimali in formato virgola fissa per
x
• 8 cifre decimali in virgola fissa per f.
File File funzione.m funzione.m e risultati e risultatix=[0:.2:1]';f=exp(-x).*sin(x);tab=[x f];fprintf(' x f\n')fprintf('%6.3f %12.8f\n',tab')
x=[0:.2:1]';f=exp(-x).*sin(x);tab=[x f];fprintf(' x f\n')fprintf('%6.3f %12.8f\n',tab')
x f 0.000 0.00000000 0.200 0.16265669 0.400 0.26103492 0.600 0.30988236 0.800 0.32232887 1.000 0.30955988
x f 0.000 0.00000000 0.200 0.16265669 0.400 0.26103492 0.600 0.30988236 0.800 0.32232887 1.000 0.30955988
Risultati
Esercizio 3Esercizio 3• Costruire una stringa che mostri il valore
della precisione macchina; utilizzare poi un comando di output per farla stampare sul prompt.
• Creare la stringa di input che consente di assegnare alla variabile A una matrice generica.
• Creare la stringa di input che consente di assegnare alla variabile f la stringa 5x+2e-x.
Soluzioni esercizio 3Soluzioni esercizio 31. » str=['la precisione macchina è ', num2str(eps)]; » disp(str) la precisione macchina è 2.2204e-016
2. » A=input('inserisci la matrice A '); inserisci la matrice A [1 2 3;4 5 6] »3. » f=input('inserisci la funzione ') inserisci la funzione '5*x+2*exp(x)' oppure » f=input('inserisci la funzione ','s') inserisci la funzione 5*x+2*exp(x) f = 5*x+2*exp(x)
1. » str=['la precisione macchina è ', num2str(eps)]; » disp(str) la precisione macchina è 2.2204e-016
2. » A=input('inserisci la matrice A '); inserisci la matrice A [1 2 3;4 5 6] »3. » f=input('inserisci la funzione ') inserisci la funzione '5*x+2*exp(x)' oppure » f=input('inserisci la funzione ','s') inserisci la funzione 5*x+2*exp(x) f = 5*x+2*exp(x)