32
2 2 a a lezione - lezione - laboratorio laboratorio a.a 2004-2005 Corso di Laurea Ingegneria MECCANICA

2 a lezione - laboratorio a.a 2004-2005 Corso di Laurea Ingegneria MECCANICA

Embed Size (px)

Citation preview

Page 1: 2 a lezione - laboratorio a.a 2004-2005 Corso di Laurea Ingegneria MECCANICA

22aa lezione - laboratorio lezione - laboratorio

a.a 2004-2005

Corso di Laurea Ingegneria MECCANICA

Page 2: 2 a 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à

Page 3: 2 a lezione - laboratorio a.a 2004-2005 Corso di Laurea Ingegneria MECCANICA

m-filem-file

File di testo contenente codici MATLAB. Consente dimemorizzare ed organizzare istruzioni e comandi MATLAB

script

function

Page 4: 2 a lezione - laboratorio a.a 2004-2005 Corso di Laurea Ingegneria MECCANICA

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

Page 5: 2 a lezione - laboratorio a.a 2004-2005 Corso di Laurea Ingegneria MECCANICA

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

Page 6: 2 a lezione - laboratorio a.a 2004-2005 Corso di Laurea Ingegneria MECCANICA

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»

Page 7: 2 a lezione - laboratorio a.a 2004-2005 Corso di Laurea Ingegneria MECCANICA

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

Page 8: 2 a lezione - laboratorio a.a 2004-2005 Corso di Laurea Ingegneria MECCANICA

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)

Page 9: 2 a lezione - laboratorio a.a 2004-2005 Corso di Laurea Ingegneria MECCANICA

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»

Page 10: 2 a lezione - laboratorio a.a 2004-2005 Corso di Laurea Ingegneria MECCANICA

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’.

Page 11: 2 a lezione - laboratorio a.a 2004-2005 Corso di Laurea Ingegneria MECCANICA

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

Page 12: 2 a lezione - laboratorio a.a 2004-2005 Corso di Laurea Ingegneria MECCANICA

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!!!

Page 13: 2 a lezione - laboratorio a.a 2004-2005 Corso di Laurea Ingegneria MECCANICA

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.

Page 14: 2 a lezione - laboratorio a.a 2004-2005 Corso di Laurea Ingegneria MECCANICA

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)

Page 15: 2 a lezione - laboratorio a.a 2004-2005 Corso di Laurea Ingegneria MECCANICA

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

Page 16: 2 a lezione - laboratorio a.a 2004-2005 Corso di Laurea Ingegneria MECCANICA

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)

Page 17: 2 a lezione - laboratorio a.a 2004-2005 Corso di Laurea Ingegneria MECCANICA

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>>

Page 18: 2 a lezione - laboratorio a.a 2004-2005 Corso di Laurea Ingegneria MECCANICA

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.

Page 19: 2 a lezione - laboratorio a.a 2004-2005 Corso di Laurea Ingegneria MECCANICA

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

Page 20: 2 a lezione - laboratorio a.a 2004-2005 Corso di Laurea Ingegneria MECCANICA

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.

Page 21: 2 a lezione - laboratorio a.a 2004-2005 Corso di Laurea Ingegneria MECCANICA

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

Page 22: 2 a lezione - laboratorio a.a 2004-2005 Corso di Laurea Ingegneria MECCANICA

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.

Page 23: 2 a lezione - laboratorio a.a 2004-2005 Corso di Laurea Ingegneria MECCANICA

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>>

Page 24: 2 a lezione - laboratorio a.a 2004-2005 Corso di Laurea Ingegneria MECCANICA

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

Page 25: 2 a lezione - laboratorio a.a 2004-2005 Corso di Laurea Ingegneria MECCANICA

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

Page 26: 2 a lezione - laboratorio a.a 2004-2005 Corso di Laurea Ingegneria MECCANICA

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.

Page 27: 2 a lezione - laboratorio a.a 2004-2005 Corso di Laurea Ingegneria MECCANICA

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.

Page 28: 2 a lezione - laboratorio a.a 2004-2005 Corso di Laurea Ingegneria MECCANICA

» 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

Page 29: 2 a lezione - laboratorio a.a 2004-2005 Corso di Laurea Ingegneria MECCANICA

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.

Page 30: 2 a lezione - laboratorio a.a 2004-2005 Corso di Laurea Ingegneria MECCANICA

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

Page 31: 2 a lezione - laboratorio a.a 2004-2005 Corso di Laurea Ingegneria MECCANICA

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.

Page 32: 2 a lezione - laboratorio a.a 2004-2005 Corso di Laurea Ingegneria MECCANICA

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)