Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoAntonello Corsini Modificato 11 anni fa
1
2 a lezione - laboratorio a.a 2004-2005 Corso di Laurea Ingegneria MECCANICA
2
Come visualizzare leditor Per visualizzare leditor del Matlab si può: – digitare il comando edit – si può selezionare con il mouse dallambiente di calcolo la voce File e dal menu a tendina che compare la voce New oppure Open se il file esiste già
3
m-file File di testo contenente codici MATLAB. Consente di memorizzare ed organizzare istruzioni e comandi MATLAB script function
4
m-file script Standard ASCII file di testo Esegue una serie di comandi MATLAB sul workspace base Il carattere % serve a scrivere commenti allinterno di M-file % 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 N.B. Non accetta argomenti di input e di output
5
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 delleditor di testo, si salva selezionando sulla barra la voce file e scegliendo nel menu : Save as. Assegnare un nome: Eps1
6
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.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 »
7
m-file function function s = fatt(c) % %FATT calcola il fattoriale di c. % s=1; if c>=1 for i=1:c s=s*i; end Help Online Codice Argomento di output Nome della funzione Argom. di input function [out1,out2,out3] = nome_fun(in1,in2) Caso generale
8
Salvare e Richiamare m- function – Si salva in modo analogo a m-script: nome_fun – Si richiama digitando unuguaglianza 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 unarea di memoria distinta dal Workspace base (variabili locali)
9
function s = fatt(c) % % FATT calcola il fattoriale del numero c. % s=1; if c>=1 for i=1:c s=s*i; end function s = fatt(c) % % FATT calcola il fattoriale del numero c. % s=1; if c>=1 for i=1:c s=s*i; end Risultati 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 »
10
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 dallinizio della lista delle directory indicate e fermandosi appena trova un file con lo stesso nome, se no… fatt ??? Undefined function or variablefatt.
11
Funzioni matematiche elementari » 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
12
Funzioni trigonometriche » 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 Langolo x deve essere espresso in radianti!!!
13
ciclo 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); end » N = 4; » for I = 1:N for J = 1:N A(I,J) = 1/(I+J-1); end Queste istruzioni consentono di costruire la matrice di Hilbert 4x4.
14
Risultati >> A A = 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) >> A A = 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)
15
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 lelemento C(i,j) pari a: C(i,j)=A(i,j)+cos((i+j)*pi/(n+m))*B(i,j), con
16
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 disp('Il risultato è') disp(C)
17
Risultati file prova2.m >>prova2 Il risultato è 3.5000 2.0000 7.5000 4.0000 4.5000 6.0000 -5.0000 7.1340 9.0000 >> >>prova2 Il risultato è 3.5000 2.0000 7.5000 4.0000 4.5000 6.0000 -5.0000 7.1340 9.0000 >>
18
Operatori relazionali e logici Logici Relazionali Gli operatori relazionali precedono nellordine gli operatori logici.
19
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 % % 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
20
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 >> >> 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.
21
Costrutto if - 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
22
File ciclo_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 % % 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 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.
23
Risultati file ciclo_if.m >> ciclo_if >> A A = 2 -1 0 0 -1 2 -1 0 0 -1 2 -1 0 0 -1 2 >> >> ciclo_if >> A A = 2 -1 0 0 -1 2 -1 0 0 -1 2 -1 0 0 -1 2 >>
24
Comando di input input : inserimento di variabili numeriche da tastiera » z=input(' Introduci il valore di z ') Introduci il valore di z 5 z = 5 » 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 » 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
25
Comando di input input : inserimento di stringhe da tastiera » flag=input('Vuoi continuare? ','s') Vuoi continuare? Si flag = Si » flag=input('Vuoi continuare? ') Vuoi continuare? 'Si' flag = Si » flag=input('Vuoi continuare? ','s') Vuoi continuare? Si flag = Si » flag=input('Vuoi continuare? ') Vuoi continuare? 'Si' flag = Si Sintassi: var_str=input(str,s) str: stringa che compare sul prompt
26
Comandi di output disp 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.
27
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.
28
» 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
29
Esercizio 2 Calcolare la funzione f = e -x sin(x) nei punti appartenenti allintervallo [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.
30
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') 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
31
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.
32
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) 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)
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.