1 / 32

2 a lezione - laboratorio

2 a lezione - laboratorio. Corso di Laurea Ingegneria MECCANICA. a.a 2004-2005. Come visualizzare l’editor. Per visualizzare l’editor del Matlab s i può: digitare il comando edit

moe
Download Presentation

2 a lezione - laboratorio

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Come visualizzare l’editor • Per visualizzarel’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à

  3. m-file File di testo contenente codici MATLAB. Consente di memorizzare ed organizzare istruzioni e comandi MATLAB script function

  4. m-file script % 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 • Standard ASCII file di testo • Esegue una serie di comandi MATLAB sul workspace base • N.B. Non accetta argomenti di input e di output Il carattere “ % “ serve a scrivere commenti all’interno di M-file

  5. Salvare e richiamare m-script • Salvare m-script: • Dopo avere digitato le istruzioni nella finestradell’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 scriptopera sul Workspace base.

  6. Risultati del file EPS1.m » 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.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

  7. Nome della funzione Argomento di output Argom. di input Help Online Codice Caso generale function [out1,out2,out3] = nome_fun(in1,in2) 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 end

  8. Salvare e Richiamare m-function • 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. Lafunction • accetta argomenti di input e di output • opera su un’area di memoria distinta dal Workspace base (variabili locali)

  9. Risultati del file fatt.m function s = fatt(c) % % FATT calcola il fattoriale del numero c. % s=1; if c>=1 for i=1:c s=s*i; end end » 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. 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’. Come opera il Matlab (ad esempio su fatt)

  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

  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 L’angolo x deve essere espresso in radianti!!!

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

  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)

  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 l’elemento 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 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 >>

  18. Operatori relazionali e logici Relazionali Logici Gli operatori relazionali precedono nell’ordine gli operatori logici.

  19. ciclo while % % 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 Consente di ripetere le istruzioni sotto il controllo di una condizione logica

  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 >> Costruire con cicli while la matrice di Hilbert 4x4.

  21. Costrutto if - else ESEMPIO »if I == J A(I,J) = 2; elseif abs(I-J)== 1 A(I,J) = -1; else A(I,J) = 0; end • È una struttura condizionale • Se una condizione è verificata esegue le istruzioni associate

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

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

  24. Comando di input Sintassi:nome_var=input(str) str: stringa che si vuole compaia sul prompt input: inserimento di variabili numeriche da tastiera » 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

  25. Comando di input Sintassi:var_str=input(str,’s’) str: stringa che compare sul prompt 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

  26. num2str(x) converte lo scalare x in una stringa di caratteri Comandi di output Sintassi: disp(str) str stringa o nome di una variabile numerica che si vuole far comparire sul prompt. disp consente di stampare linee di testo e valori di variabili. » disp('valore della funzione') valore della funzione »x=sqrt(2); »disp(x) 1.4142 » disp(['Il valore di x è ',num2str(x)]) Il valore di x è 1.4142

  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; \nserve per andare a capo è necessario scrivere mat’ per stampare la matrice mat così come si presenta.

  28. %f consente la stampa dei numeri in fixed point, %e consente la stampa in formato esponenziale » fprintf(' %f\n',pi) 3.141593 Nei formati f ed e il numero alla sinistradel punto è il campo totale, quello alladestraindica quantecifre decimali devono essere stampate » fprintf(’ %12.10f\n ',pi) 3.1415926536 » fprintf(’ %18.10e\n ',pi) 3.1415926536e+000 » temp=31; » fprintf('La temperatura è di %4.1f gradi C°\n',temp) La temperatura è di 31.0 gradi C°

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

  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 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 • » 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)

More Related