• Non ci sono risultati.

Introduzione a Matlab: primi esempi

N/A
N/A
Protected

Academic year: 2021

Condividi "Introduzione a Matlab: primi esempi"

Copied!
33
0
0

Testo completo

(1)

Introduzione a Matlab: primi esempi

Emma Perracchione

Corso di Calcolo Numerico per Ingegneria Meccanica (Univ. PD) Queste slides sono principalmente fornite dal Prof. Alvise Sommariva; vedasi https://www.math.unipd.it/~alvise/DIDATTICA/didattica_CNIE1819.html

A.A. 2018/2019

(2)

Materiale

Materiale

TUTTO IL MATERIALE SI TROVA AL SEGUENTE LINK E VERRA' AGGIORNATO AD OGNI LEZIONE.

https://www.math.unipd.it/~emma/CN1819.html OPUURE VEDASI

https://elearning.unipd.it/dii/course/view.php?id=1720

(3)

Calcolo simbolico

Introduzione

Obiettivo: utilizzare Matlab in Linux, Windows, MacOS.

L'ambienteMATLAB (sigla per Matrix Laboratory) è stato creato nel 1983.

Per l'utilizzo da casa, l'università di Padova dispone di un'utenza CAMPUS, che prevede il download gratuito di tale programma, consentendo ad ogni studente di utilizzarlo nel proprio computer.

https:

//www.ict.unipd.it/servizi/servizi-utenti-istituzionali/

contratti-software-e-licenze/matlab In alternativa: GNU Octave o SCILAB.

Esistono altri linguaggi di programmazione, come ad esempio C, Fortran, Phyton, Java, Maple (calcolo simbolico) spesso utilizzati in ambiente numerico.

(4)

Come si presenta Matlab

Gli ambienti

Per aprire Matlab tipicamente si clicca suun'icona di Matlab oppure dallashell di Linux, si digita il comando Matlab seguito dal tasto di invio.

(5)

I quattro ambienti

Prime prove

Workspace: una sottonestra che mostra nome e contenuto delle variabili. Le variabili possono essere numeri, vettori, matrici liste,...

Current directory: contiene informazioni sulla cartella in cui si sta lavorando. Risulta essere molto importante per salvare i le. Dunque, posizionarsi SEMPRE nella directory corretta (simile a un normale Browse di ricerca).

Command history: contiene una lista di tutti i comandi digitati (anche errati).

Command window: una sottonestra nella quale vengono inseriti i comandi o dalla quale viene lanciata l'esecuzione dei programmi. Si possono eseguire sia programmi complicati che semplici calcoli.

(6)

Primi esempi sulla command window

Command window

Ogni linea sulla command window si presenta come una linea di comando  dettaprompt.

Dopo  si scrivono una serie di istruzioni (algoritmo) al ne di

raggiungere un qualche risultato (ad esempio la somma di due numeri).

Oppure si lanciano programmi Matlab, salvati su un le di testo con nomealgoritmo.m.

Per prendere condenza scrivete qualche numero/variabile. Leggere sempre con attenzione eventuali errori.

Con il tasto freccia su si accede ai comandi digitati in precedenza.

Per pulire la command window il comando clc cancella ciò che è stato scritto (ma non le variabili). Per quello usare clear all. Per

(7)

Primi esempi sulla command window

Esempio: notare come vengono salvate le variabili

(8)

Primi esempi sulla command window

Le variabili Matlab

I valori che possono assumere le variabili (TUTTE VISTE COME MATRICI), di uso più comune in Matlab, sono

numeri o scalari e si dice aventi dimensione 1 × 1, ovvero 1 riga di 1 elemento) come ad esempio 3.141592653589793, 0, −1;

vettori, ovvero una lista di n-numeri (ognuno dei quali si dice elemento o componente).

Molto importante: un vettore può essere scritto:

1 inorizzontaleed in tal caso è detto vettore riga (si dice avente

dimensione 1 × n, ovvero 1 riga di n elementi), come ad esempio: (5, 7),

2 inverticaleed in tal caso è detto vettore colonna (e si dice avente dimensione n × 1 ovvero n righe di 1 elementi), come ad esempio la coppia

 5 7



avente dimensione 2 × 1.

(9)

Primi esempi sulla command window

Le matrici Matlab

Una matriceè una tabella ordinata di elementi, consistente di m vettori riga di dimensione 1 × n, ad esempio la matrice rettangolare in cui m può essere diverso da n (e si dice avente dimensione m × n, ovvero m righe di n elementi), ovvero

3.1415 24.2

−1 16.2 0 2.7182

,

oppure, meno in generale, la matrice quadrata, in cui m = n (e si dice avente dimensione n × n), ovvero

 0.215 4.22

−0155 6.82

 .

La prima matrice ha dimensione 3 × 2 e la seconda 2 × 2.

(10)

Primi esempi sulla command window

Operazioni e funzioni elementari predenite

Le comuni operazioni aritmetichesono indicate con:

+ addizione

− sottrazione

∗ prodotto (attenzione, verrà reinterpretato per non-scalari) / divisione (attenzione, verrà reinterpretato per non-scalari)

∧ potenza (attenzione, verrà reinterpretato per non-scalari)

>> % somma

>> 2+3 ans = 5

>> % divisione (attenzione alla barra!)

>> 2/3

ans = 6.6667e-01

(11)

Primi esempi sulla command window

Nan e Inf

Matlab, oltre ai numeri macchina, include -Inf: ovvero meno innito,

+Inf: ovvero più innito,

NaN: not a number (indeterminatezza).

>> -5/0 ans = -Inf

>> +5/0 ans = Inf

>> 0/0 ans = NaN

(12)

Primi esempi sulla command window

Numeri predeniti

eps: è la precisione di macchina, ovvero la distanza tra 1 e il primo numerico macchina successivo, in doppia precisione e vale circa 2.220446049250313e − 16;

pi: ovvero π = 3.14159265358979 . . .;

realmax: è circa 1.797693134862316e + 308 ed è ilpiù grande numero macchina normalizzatoed in precisione doppia;

realmin: è circa 2.225073858507201e − 308 ed è ilpiù piccolo numero macchina positivo, normalizzato ed in precisione doppia (si noti che è un numero inferiore di eps).

>> format long e

>> 0.0001 % di seguito si prema il tasto di INVIO.

ans =

(13)

Primi esempi sulla command window

Funzioni predenite

Funzionielementari comunemente usate

abs valore assoluto sqrt radice quadrata sign segno rem resto della divisione Funzionitrigonometriche

sin seno cos coseno

tan tangente cot cotangente

asin arco seno acos arco coseno atan arco tangente acot arco cotangente Funzioniesponenziali

exp esponenziale log 2 logaritmo base 2 log10 logaritmo base 10 log logaritmo naturale

(14)

Primi esempi sulla command window

Funzioni predenite

Attenzione al primo esempio, il risultato non dovrebbe essere 0?

>> sin(pi) ans =

1.22464679914735e-16

>> cos(pi) ans = -1>> atan(1) ans =

0.785398163397448

>> exp(0) ans = 1

(15)

L'help di Matlab per l'esame!

Help

Uso consentito (anzi consigliato)dell'help anche durante l'esame.

Per tutte le funzioni viste, e tutte le altre che fanno parte

dell'ambiente Matlab, la chiamata help <nome funzione>, permette di avere un aiuto sul contenuto delle stesse.

Se per esempio avessimo dei dubbi su exp:

>> help exp

oppure:

(16)

Denire le variabili

Assegnare variabili

Una variabile è un contenitore di dati; dati che però (anche per ERRORE) possono essere modicati (sovrascritti) nel corso dell'esecuzione di un programma.

Una variabile è caratterizzata da un nome (inteso solitamente come una sequenza di caratteri e cifre).

In Matlab l'assegnazioneavviene come segue

<nome variabile>=<valore variabile>

1 >> a=3

2 a =

3 3

4 >> b=pi;

5 >> a

6 a =

7 3

(17)

Denire le variabili

Controllare variabili

1 >> % Era "a=3" e "b=pi"

2 >> who

3 Your variables are:

4 a b

5 >> whos

6 Name Size Bytes Class Attributes

7 a 1x1 8 double

8 b 1x1 8 double

9 >>

Se avessimo avuto dei dubbi ora sappiamo che:

abbiamo due variabili a, b,

che sono MATRICI 1 × 1 ovvero scalari, occupano 8 bytes,

sono double ossianumeri in precisione doppia.

(18)

Denire le variabili

I vettori in Matlab

Nel caso del vettore colonna

3.1415 2.71821

, digitiamo:

1 >> % l'utilizzo del ";" "andare a capo

2 >> [3.1415; 1; 2.7182]

3 ans =

4 3.1415

5 1.0000

6 2.7182

7 >>

(19)

Denire le variabili

Trasporre in Matlab Trasposizione:

1 >>a=[1;2;3]

2 a =

3 1

4 2

5 3

6 >> b=a'

7 b =

8 1 2 3

9 >> c=b'

10 c =

11 1

12 2

13 3

14 >>

15

(20)

Denire le variabili

Dimensione vettori in Matlab

Succederà, (e succederà....) che Matlab vi dica che in un'operazione le dimensioni dei vettori/matrici non sono consistenti (è un errore che si commette di frequente).

Cosa fare?

Il comando size ci dirà la dimensione di un vettore.

1 >> vettore_colonna=[2;5;1]; % vettore 3 X 1

2 >> size(vettore_colonna)

3 ans =

4 3 1

5 >> vettore_riga=vettore_colonna';

6 >> size(vettore_riga)

7 ans =

8 1 3

9 >>

(21)

Denire le variabili

Vettori utili

In Matlab ci sono altri vettori di facile denizione, quelli che hanno tutte componenti nulle, generabili conzeros, quelli in cui queste sono uguali a 1, generabili conones.

1 >> zeros(5,1) % (vettore colonna)

2 ans =

3 0

4 0

5 0

6 0

7 0

8 >> zeros(1,5) % (vettore riga)

9 ans =

10 0 0 0 0 0

11

(22)

Denire le variabili

Vettori equispaziati

I vettori riga v = (v1, v2, . . . , vn) con componentiequispaziateovvero tali che

vk+1− vk = c per k = 1, . . . , n − 1,

sono particolarmente facile da descrivere. Supponiamo di voler denire il vettore riga

v = (3, 5, 7, 9, 11).

Notiamo che vk+1− vk =2, per k = 1, . . . , 4 e quindi il vettore riga v, di dimensione 1 × 5, ha componenti equispaziate, in cui la prima vale 3 e l'ultima vale 11.

1 % Due modi alternativi:

2 >> v=linspace(3,11,5);

3 >> v=3:2:11;

(23)

Denire le variabili

Concatenare vettori

Sia v = (v1, . . . , vn). Per accedere alle singole componenti di v in Matlab, si utilizzano comandi del tipo v(i) dove i è un numero intero positivo minore di n o più in generale un vettore di interi con

componenti in 1, 2, . . . , n.

>> v=[3.1 1.2 5.7 7.1 2.3]

v =

3.1000 1.2000 5.7000 7.1000 2.3000

>> v(2) % seleziona la seconda componente del vettore ans =

1.2000

>> v([3 2 4]) % seleziona terza, seconda, quarta comp.

ans =

5.7000 1.2000 7.1000

>> v(2:4) % seleziona dalla seconda e alla quarta ans =

1.2 5.7 7.1

>>

(24)

Denire le variabili

Accesso alle componenti di un vettore Dati due vettori riga (o colonna)

u = (u1, . . . , um), v = (v1, . . . , vn) è utile un comando con cui ricavare il vettore che si ottiene concatenandou con v ovvero

w = (u1, . . . , um, v1, . . . , vn).

Se sono vettori riga o colonna, bastano rispettivamente i comandi w=[u v] e w=[u; v].

>> u=[1 2];

>> v=[3 4 5];

>> w=[u v]

w =

1 2 3 4 5

>> u=u'; % vettore colonna.

>> v=v'; % vettore colonna.

(25)

Denire le variabili

Operazioni tra vettori

Siano u = (u1, . . . , un) e v = (v1, . . . , vn) vettoridella stessa dimensione ed s unoscalare.

c=s*u, assegna alla variabile c il prodotto dello scalare s con il vettore u, ovvero c = (c1, . . . , cn) con

c1= s · u1, c2 = s · u2, . . . , cn = s · un;

c=u+v, assegna alla variabile c la somma del vettore u col vettore v, ovvero c = (c1, . . . , cn)con

c1 = u1+ v1, c2 = u2+ v2, . . . , cn= un+ vn; La scrittura c=u'*v calcola l'usualeprodotto scalare u e v. Cioé

u ∗ v =

m

X

i =1

ui· vi.

Osserviamo subito che in Matlab invece di u ∗ v scriviamo c=u'*v.

(26)

Denire le variabili

Operazioni tra vettori

>> u=[1; 2]

u = 1 2

>> v=[3; 4]

v = 3 4

>> u'*v ans = 11

>> u.*v % prodotto puntuale dei vettori "u" e "v"

ans = 3 8

>> u./v % divisione puntuale dei vettori "u" e "v"

ans = 0.3333 0.5000

(27)

Funzioni Matlab

Graci

Example

Si denisca la funzione f (x) = x · sin(x), applicabile a vettori

x = (x1, . . . , xn), cosicchè f (x) = (f (x1), . . . , f (xn)). Di seguito la si valuti nel vettore di 1000 punti equispaziati in [0, 1], in cui il primo è a e l'ultimo è b e se ne esegua il graco mediante il comando plot.

Scriviamo nella command window

>> f=@(x) x.*sin(x); % definizione di funzione vettoriale

>> % f=inline('x.*sin(x)'); % il comando 'inline'

>> x=linspace(0,1,1000); % vettore di ascissa.

>> y=feval(f,x); % valutazione di funzione

>> plot(x,y); % grafico di funzione

>>

ottenendo il graco di f in [0, 1].

(28)

Funzioni Matlab

Graci

Mostriamo come disegnare graci partendo da soli punti.

A tal proposito consideriamo la funzione

f (x ) =exp(x) · sinh (x) · x2·tan(x) · log(x + 0.001) nell'intervallo [0, 1], e disegniamo un suo graco.

>> x=linspace(0,1,1000);

>> y=exp(x).*sinh(x).*x.^2.*tan(x).*log(x+0.001);

>> plot(x,y,'r-')

Viene eseguito ilplot della funzione f campionandola nei punti xk =0 + k−9991 ∈ [0, 1], con k = 1, . . . , 1000 e pone il risultato in yk; Digitare il comando help plot per tutte le opzioni.

(29)

Funzioni Matlab

Graci

E' interessante osservare che con due comandi plot successivi come in

>> plot(x,y,'r-');

>> plot(x,y,'b-');

Matlab avrebbe

1 disegnato il primo graco,

2 lo avrebbe cancellato,

3 disegnato il secondo graco.

Per ovviare a questo problema si può usare il comando di plot scrivendo:

1 hold on che permette di sovrapporre più graci nella stessa gura,

2 hold off che non permette di seguito di sovrapporre ulteriori graci nella stessa gura.

(30)

Funzioni Matlab

La scala semilogaritmica

Nel descrivere gracamente gli errori, si ricorre spesso allascala logaritmica, mediante il comando semilogy. Se x = (x1, . . . , xn), y = (y1, . . . , yn), il comando

semilogy(x,y)

descrive il graco ottenuto unendo tutte le coppie (xk,log10(yk)), (xk+1,log10(yk+1)), k = 1, . . . , n − 1, mediante un segmento. Di seguito digitiamo

>> z = y+rand(size(y))*10^(-6);

>> err=abs(y-z);

>> plot(x,err,'b-','Linewidth',3);

>> pause; % si guardi il grafico e si

% prema un qualsiasi tasto.

>> semilogy(x,err,'b-','Linewidth',3);

(31)

Funzioni Matlab

Il comando format

Per una spiegazione esaustiva, vedasi l'help; come sempre...

I formati piú comuni sono

format short: notazionedecimale con 4 cifre dopo la virgola;

format short e: notazioneesponenziale con 4 cifre dopo la virgola;

format short g: lamigliore delle precedenti;

format long: notazionedecimale con 15 cifre dopo la virgola.

format long e: notazione esponenzialecon 15 cifre dopo la virgola.

format long g: la miglioredelle precedenti.

(32)

Funzioni Matlab

Il comando format

>> format short; pi ans = 3.1416

>> format short e; pi ans = 3.1416e+00

>> format short g; pi ans = 3.1416

>> format long; pi ans = 3.141592653589793

>> format long e; pi

ans = 3.141592653589793e+00

>> format long g; pi ans = 3.14159265358979

>>

(33)

Funzioni Matlab

Comando fprintf/disp

>> s=pi/10 s = 0.3142

>> disp(s) 0.3142

>> % "s" formato decimale, 1 cifra prima della virgola, 6 dopo

>> fprintf('%1.6f \n',s) % "\n" manda a capo.

0.314159

>> % s in formato esp., 1 cifra prima e 6 dopo.

>> fprintf('%1.6e \n',s) 3.141593e-01

>> fprintf('La variabile s vale: %1.15e \n',s) La variabile s vale: 3.141592653589793e-01

>>

Riferimenti

Documenti correlati

blocco di istruzioni 1 sarà eseguito solo se la condizione1 risulta essere verificata, il secondo solo se la condizione1 risulta essere falsa e la condizione2 vera ecc. Il blocco

E’ importante l’ordine e il tipo delle variabili di input e output e non il nome (che può essere diverso da quello usato nel file .m) La funzione stat è chiamata

• livello di rete: si deve stabilire quale cammino deve essere scelto nella sottorete e gestire gli eventuali problemi che possono sorgere per la congestione della rete, o

• livello di rete: si deve stabilire quale cammino deve essere scelto nella sottorete e gestire gli eventuali problemi che possono sorgere per la congestione della rete, o

Raccogliendo i moltiplicatori in una matrice triangolare inferiore L con diagonale unitaria e considerando la matrice triangolare superiore U ottenuta al passo n-1, si ottiene

5.9) Utilizzare Matlab per calcolare quanto tempo occorre per accumulare un miliardo di lire in un conto corrente con 10 milioni iniziali e tenendo conto che vengono depositati

Tutte le variabili usate all’interno di una function sono variabili locali, cio` e esistono solo durante l’esecuzione della funzione e non modificano il workspace. Ad esempio,

• Quando Matlab entra nella funzione MySum, le variabili note sono SOLO quelle presenti nella funzione o passate alla