a
2
lezione - laboratorio
Corso di Laurea Ingegneria
MECCANICA
a.a 2004-2005
Come visualizzare l’editor
Per 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-file
File di testo contenente codici
MATLAB. Consente di
memorizzare ed organizzare
istruzioni e comandi MATLAB
script
function
m-file script
• Standard ASCII file
di testo
• Esegue una serie di
comandi MATLAB
sul workspace base
N.B. Non
accetta
argomenti di
input e di
output
% 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
Il carattere “ % “ serve a
scrivere commenti all’interno
di M-file
Salvare e richiamare m-script
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
Richiamare: Si richiama digitando solo il
nome con cui è stato memorizzato il file
Eps1
N.B. Lo script opera sul Workspace base.
Risultati 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
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 function
Argomento di output Nome della funzione
Argom. di input
Help
Online
Codice
function s = fatt(c)
%
%FATT calcola il fattoriale di c.
%
s=1;
if c>=1
for i=1:c
s=s*i;
end
end
Caso
generale
function [out1,out2,out3] = nome_fun(in1,in2)
Salvare e Richiamare mfunction
– 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)
Risultati del file fatt.m
function s = fatt(c)
%
% FATT calcola il fattoriale
del numero c.
%
s=1;
if c>=1
» numero =5;
for i=1:c
» valore=fatt(numero)
s=s*i;
valore =
end
120
end
»
» whos
Name
Size Bytes Class
numero
valore
1x1
1x1
8
8
double array
double array
Grand total is 2 elements using 16 bytes
»
Come opera il Matlab
(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 elementari
round(x) Arrotonda all’intero più vicino
fix(x)
Arrotonda all’intero più vicino verso 0
» x=[-1.9 -0.2 3.4 5.6 7.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)
ans =
-2 0
» fix(x)
ans =
-1 0
» floor(x)
ans =
-2 -1
» ceil(x)
ans =
-1 0
3
6
7
3
5
7
3
5
7
4
6
7
Funzioni 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
» 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
tanh(x) Tangente iperbolica
L’angolo x deve essere espresso in radianti!!!
ciclo for
» N = 4;
» for I = 1:N
for J = 1:N
A(I,J) = 1/(I+J-1);
end
end
• È simile a quello di altri
linguaggi di programmazione
• Ripete le istruzioni molte volte
• Può essere annidato
Queste istruzioni consentono di costruire la matrice di
Hilbert 4x4.
Risultati
>> A
A =
1
1/2
1/3
1/4
1/2
1/3
1/4
1/5
>>
% comando equivalente
hilb(4)
1/3
1/4
1/5
1/6
1/4
1/5
1/6
1/7
Esercizio 1: applicazione di ciclo 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 A e B  R nxm .
File prova2.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);
end
end
disp('Il risultato è')
disp(C)
Risultati file prova2.m
>>prova2
Il risultato è
3.5000
2.0000
4.0000
4.5000
-5.0000
7.1340
>>
7.5000
6.0000
9.0000
Operatori relazionali e logici
Relazionali
Logici
<
Minore
<=
Minore o uguale
>
Maggiore
>=
Maggiore o uguale
==
Uguale
~=
Diverso
&
and
|
or
~
not
Gli operatori relazionali precedono nell’ordine gli operatori logici.
ciclo 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
Risultati file: ciclo_w.m
>> ciclo_w
>> A
A =
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 if - else
ESEMPIO
• È una struttura
condizionale
• Se una condizione è
verificata esegue le
istruzioni associate
»if I == J
A(I,J) = 2;
elseif abs(I-J)== 1
A(I,J) = -1;
else
A(I,J) = 0;
end
File ciclo_if.m
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.
%
% 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
Risultati file ciclo_if.m
>> ciclo_if
>> A
A =
2
-1
-1
2
0
-1
0
0
>>
0
-1
2
-1
0
0
-1
2
Comando di input
input: inserimento di variabili numeriche da
tastiera
Sintassi: nome_var=input(str)
str: stringa che si vuole compaia sul prompt
» z=input(' Introduci il valore di z ')
Introduci il valore di z 5
z =
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
Comando di input
input: inserimento di stringhe da tastiera
Sintassi: var_str=input(str,’s’)
str: stringa che compare sul prompt
» flag=input('Vuoi continuare? ','s')
Vuoi continuare? Si
flag =
Si
» flag=input('Vuoi continuare? ')
Vuoi continuare? 'Si'
flag =
Si
Comandi di output
disp consente di stampare linee di testo e valori
di variabili.
Sintassi: disp(str)
str stringa o nome di una variabile numerica
che si vuole far comparire sul prompt.
» 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
» disp(['Il valore di x è ',num2str(x)])
Il valore di x è 1.4142
Comandi di output
fprintf 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_tipo
in 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°
%f consente la
stampa dei
numeri in fixed
point,
%e consente la
stampa in
formato
esponenziale
Nei formati f ed e il
numero alla sinistra
del punto è il campo
totale, quello alla
destra indica quante
cifre decimali devono
essere stampate
» fprintf(' %f\n',pi)
3.141593
» fprintf(’ %12.10f\n ',pi)
3.1415926536
» fprintf(’ %18.10e\n ',pi)
3.1415926536e+000
Esercizio 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 funzione.m e risultati
x=[0:.2:1]';
f=exp(-x).*sin(x);
tab=[x f];
fprintf(' x
f\n')
fprintf('%6.3f %12.8f\n',tab')
Risultati
x
0.000
0.200
0.400
0.600
0.800
1.000
f
0.00000000
0.16265669
0.26103492
0.30988236
0.32232887
0.30955988
Esercizio 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 3
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)
Scarica

File