ml - Introduzione interattiva di MATLAB       Vai all'indice del corso

Primi calcoli di funzioni
Versione 0.83 [2003-10-14]

Indice del modulo

1pcf.05 - Funzioni e functions di MATLAB
1pcf.06 - Tipologia delle funzioni
1pcf.07 - Librerie di functions
1pcf.10 - Operazioni sui componenti dei vettori e delle matrici
1pcf.11 - Aumento e diminuzione dei componenti di un vettore
1pcf.12 - Moltiplicazione e divisione dei componenti di un vettore
1pcf.13 - Prodotto di vettori componente per componente
1pcf.14 - Divisione fra vettori componente per componente
1pcf.15 - Esponenziazione dei componenti di vettore
1pcf.16 - Esponenziazione fra vettori componente per componente
1pcf.18 - Calcoli di espressioni algebriche
1pcf.20 - Rappresentazioni grafiche di sequenze numeriche
1pcf.22 - Presentazioni di sequenze numeriche con la function plot
1pcf.40 - I numeri triangolari
1pcf.41 - Sequenze di numeri triangolari
1pcf.42 - Poligonale dei primi numeri triangolari
1pcf.43 - Grafici di numeri triangolari
1pcf.45 - La function primes
1pcf.46 - Grafico di numeri primi

torna all'indice del modulo - del corso

1pcf.05 - Funzioni e functions di MATLAB

In questa esposizione attribuiremo ai termini funzione e function due significati piuttosto diversi.

Riserviamo il termine funzione alla fondamentale nozione matematica di relazione binaria che ad ogni elemento del dominio associa uno ed un solo elemento del codominio (relazione dotata di univocita`).

Useremo invece il termine function per i sottoprogrammi che MATLAB (ed ogni altro linguaggio di programmazione procedurale), consente di richiamare come componenti delle espressioni. Si tratta di sottoprogrammi che, richiamati con una determinata sequenza di argomenti, forniscono un risultato che viene reso disponibile per la valutazione della espressione. Si osservi che il risultato fornito da una function spesso e` un numero, ma puo` anche essere un vettore, una matrice o un altro schieramento di dati numerici; oppure una stringa, una sequenza di stringhe, una matrice di stringhe. Inoltre varie functions hanno effetti riguardanti files ed altri dispositivi in dotazione del computer utilizzato

torna all'indice del modulo - del corso

1pcf.06 - Tipologia delle funzioni

La nozione di funzione e` molto generale e, per quanto riguarda le applicazioni, puo` rivelarsi generica, poco qualificante. Infatti in molte circostanze risulta necessario distinguere le funzioni:

torna all'indice del modulo - del corso

1pcf.07 - Librerie di functions

MATLAB mette a disposizione una vastissima libreria di functions; queste sono descritte in tre volumi di riferimento facenti parte della documentazione accessibile liberamente sul Web.

Molte functions di MATLAB riguardano il calcolo di valori di particolari funzioni matematiche.

MATLAB inoltre consente agli utenti di definire altre functions (v. 2prin Programmazione: introduzione;).

In genere un utilizzatore sistematico di MATLAB organizza una propria libreria di functions dalla quale puo` attingere quando si presentano problemi simili a quelli che ha risolto in precedenza. Alcuni utenti professionali arrivano a mettere in commercio i loro prodotti software a cominciare dalle librerie di functions che possono risolvere problemi di natura generale. Queste azioni contribuiscono alla progressiva crescita della portata computazionale del sistema.

Numerose functions costituiscono le implementazioni di funzioni definite in termini matematici. Bisogna pero` osservare che molte functions effettuano calcoli approssimati che in determinati casi possono dare risultati insoddisfacenti, cioe` lontani dai valori che assumono le funzioni. Queste differenze spesso trascurabili ma talora drammaticamente rilevanti, ci inducono ad utilizzare i due termini diversi.

torna all'indice del modulo - del volume

1pcf.10 - Operazioni sui componenti dei vettori e delle matrici

MATLAB mette a disposizione numerosi operatori che permettono di richiedere attraverso comandi concisi varie utili manovre riguardanti i componenti dei vettori e delle matrici. Osserviamo che i vettori si possono considerare funzioni aventi come dominio un insieme del tipo {1,2,...,n}, mentre le matrici si possono considerare funzioni avento dominio della forma {1,2,...,m} x {1,2,...,n}.

Alcuni operatori consentono di effettuare una operazione su tutti i componenti di uno di tali arrays. Altri operatori consentono di effettuare operazioni di natura aritmetica sulle coppie di componenti corrispondenti di due vettori simili o di due matrici simili: si parla allora di operazioni componente per componente.

MATLAB mette a disposizione anche molte functions in grado di facilitare le elaborazioni sui componenti di vettori e matrici. Varie functions sono in grado di fornire interi vettori ed intere matrici. Inoltre molte functions sono in grado di agire sulle totalita` dei componenti di vettori e matrici.

Bisogna poi accennare alle numerose functions grafiche che sono in grado di fornire efficaci visualizzazioni servendosi delle collezioni dei componenti di vettori e matrici. Tutti questi strumenti consentono di operare efficacemente su vettori e matrici che costituiscono campionature di funzioni ed in definitiva permettono di simulare efficientemente i comportamenti delle funzioni e di altre entita` matematiche ad esse collegate.

In questo modulo vedremo le manovre sui componenti dei vettori; le prime manovre riguardanti le matrici saranno viste in ml1mat.htm

torna all'indice del modulo - del volume

1pcf.11 - Aumento e diminuzione dei componenti di un vettore

E` semplice chiedere che a tutti i componenti di un vettore venga sommata o sottratta una data quantita`.

>> [10:3:30] + 4
ans =
  14  17  20  23  26  29  33
>> 20 - [9:-0.5:7]'
ans  =
   11.0000
   11.5000
   12.0000
   12.5000
   13.0000
>> k=3.3;
>> 4 - [4.4 5.5 6.6] + k
ans =
    2.9000    1.8000    0.7000

Il risultato di una di queste somme e sottrazioni che coinvolgono un vettore ed uno scalare e` un vettore simile al vettore di partenza.

torna all'indice del modulo - del volume

1pcf.12 - Moltiplicazione e divisione dei componenti di un vettore

In modo analogo, come abbiamo gia` visto in ml1vet.htm, si possono moltiplicare e dividere tutti i componenti di un vettore per un fattore scalare espresso da una costante o da una variabile.

>> [10:3:30] * 4
ans =
  40  52  64  76  88  100  112
 [9:-0.5:7]' / 5
ans  =
   1.8000
   1.7000
   1.6000
   1.5000
   1.4000

Anche il risultato di una di queste moltiplicazioni e divisioni che coinvolgono un vettore ed uno scalare e` un vettore simile al vettore di partenza.

torna all'indice del modulo - del volume

1pcf.13 - Prodotto di vettori componente per componente

Due vettori simili si possono comporre con varie operazioni componente per componente, operazioni che riguardano i componenti nelle posizioni corrispondenti, individuate dallo stesso valore dell'indice.

Si richiede il prodotto componente per componente di due vettori simili con l'operatore binario ``.*`` . Si tratta di un'operazione utile in molte circostanze, come suggeriscono gli esempi che seguono.

>> pesiInKg = [1.5 3.2 2 5.3];
>> costiAlKg = [20 18.5 16 11.3];
>> costi = pesiInKg .* costiAlKg
costi =
   30.0000   59.2000   32.0000   59.8900

torna all'indice del modulo - del volume

1pcf.14 - Divisione fra vettori componente per componente

Si tratta di un'operazione molto simile alla precedente. Si richiede la divisione componente per componente fra due vettori simili con l'operatore binario ``./`` .

>> areeRettng = [23.3 7.2 21 0.4 5.8];
>> altezze = [3.1 0.9 7 2.6 2.6];
>> larghezze = areeRettng ./ altezze
larghezze =
    7.5161    8.0000    3.0000    0.1538    2.2308

torna all'indice del modulo - del volume

1pcf.15 - Esponenziazione dei componenti di un vettore

Per elevare ad un dato esponente tutti i componenti di un vettore va utilizzato l'operatore ``.^``

>>[2 4 7] .^ 2
ans =
     4    16    49

torna all'indice del modulo - del volume

1pcf.16 - Esponenziazione fra vettori componente per componente

Si possono anche elevare tutti i componenti di un vettore alle potenze fornite dai corrispondenti componenti di un secondo vettore

>> [2 3 4 5 6] .^ [1 2 3 4 5]
ans =
     2           9          64         625        7776

torna all'indice del modulo - del volume

1pcf.18 - Calcoli di espressioni algebriche

Gli operatori visti in azione singolarmente permettono di valutare espressioni algebriche arbitrarie (purche` ben definite e non portatrici di problemi di approssimazione) per collezioni anche estese di valori. Vediamo alcuni esempi di evidente utilita`.

>> qpi = 4*pi, qtpi = 4/3*pi
qpi =
   12.5664
qtpi =
    4.1888
>> raggi = [3.5 7.25 4.5 1.97];
>> areesf = qpi * raggi.^2
areesf =
  153.9380  660.5199  254.4690   48.7688
>> volsf = qtpi * r .^ 3
volsf =
  1.0e+003 *
    0.1796    1.5963    0.3817    0.0320

torna all'indice del modulo - del volume

1pcf.20 - Rappresentazioni grafiche di sequenze numeriche

Una sequenza numerica puo` essere efficacemente rappresentata mediante un opportuno grafico. MATLAB consente di ottenere diversi tipi di rappresentazioni grafiche. In particolare si possono utilizzare le functions plot e bar.

Puoi vedere le diverse opzioni relative a questi comandi battendo le richieste help plot ed help bar.

torna all'indice del modulo - del volume

1pcf.22 - Presentazione di sequenze numeriche con la function plot

La function plot si puo` richiamare con diverse scelte di argomenti. Consideriamo Vx, Vy, Vy2 e Vy3 vettori con lo stesso numero n di componenti:
plot(Vy) produce il grafico di una poligonale che presenta le componenti di Vy in corrispondenza dei valori 1,...,n del suo indice;
plot(Vx,Vy) traccia invece la poligonale dei valori di Vy in funzione dei corrispondenti di Vx.
Si ottiene invece la sovrapposizione di tre grafici corrispondenti ai valori di Vy, Vy2 e Vy3 in funzione dei valori di Vx con il comando plot(Vx,Vy,Vx,Vy2,Vx,Vy3).

In questi grafici le poligonali sono inserite in un quadro rettangolare che riporta alcuni valori di riferimento in orizzontale ed in verticale. Ad un tale grafico si possono aggiungere scritte varie mediante functions come:

xlabel aggiunge una scritta sull'asse orizzontale;
ylabel aggiunge una scritta sull'asse verticale;
title aggiunge un titolo sopra la cornice;
legend aggiunge un riquadro esplicativo all'interno della cornice

Per le linee usate nei grafici, mediante argomenti della function plot costituiti da stringhe, si possono specificare: colori, stili, segni marcatori corrispondenti a dati. In particolare:
'c', 'm', 'y', 'r', 'g', 'b', 'w', 'k' richiedono rispettivamente i colori ciano, magenta, giallo, verde, blu, bianco e nero;
'-', '--', ':', '-.' richiedono risp. linee piene, a trattini, a punti. a trattini e punti;
'+'. 'o', '*' sono i caratteri inseribili come marcatori;
's', 'd', '^', 'v', '>', '<', 'p', 'h' richiedono come marcatori risp. quadratini, rombi, triangolini nelle quattro direzioni, pentagoni ed esagoni.

torna all'indice del modulo - del corso

1pcf.40 - I numeri triangolari

Si abbiano oggetti a forma di disco di uguale estensione, ad es. pedine del gioco della dama o fishes circolari. Disponiamo un gruppo di questi dischetti in modo che le loro circonferenze si tocchino e complessivamente formino un triangolo regolare. Se la fila di dischetti allineati costituenti un lato e` n, indichiamo con nTrin il numero complessivo di dischetti costituenti il triangolo. Questi numeri costituiscono la successione dei numeri triangolari.

Si vede facilmente che nTrin = 1 + 2 + ... + n = n*(n+1)/2.

Un modo consiste nel trasformare il triangolo regolare in un triangolo rettangolo, ad es. con l'angolo retto in basso a sinistra, di considerare altrettanti dischetti disposti in modo da formare un triangolo rettangolo con l' angolo retto in alto a destra, di accostare i dischetti in modo di formare un rettangolo con n+1 dischetti nelle righe ed n dischetti nelle colonne. A questo punto basta osservare che nel rettangolo si hanno n*(n+1) dischetti e che tale numero e` uguale a 2*nTrin.

torna all'indice del modulo - del volume

1pcf.41 - Sequenze di numeri triangolari

Costruisci in un vettore riga i primi dieci numeri triangolari.

>> n=1:10; 
>> nTri=n.*(n+1)/2; 
>> nTri 
nTri = 1 3 6 10 15 21 28 36 45 55

Costruisci il vettore riga y contenente i numeri triangolari relativi ad n che va da 15 a 25.

>> n=15:25;
>> SeqNtriang=n.*(n+1)/2
SeqNtriang =
   120   136   153   171   190   210   231   253   276   300   325

torna all'indice del modulo - del volume

1pcf.42 - Poligonale dei numeri triangolari

Disegna la poligonale che rappresenta i primi undici numeri triangolari.

>> n=0:10; 
>> nTri=n.*(n+1)/2; 
>> plot(n,nTri)
>>

Si osservi l'andamento approssimativamente parabolico della poligonale

torna all'indice del modulo - del corso

1pcf.43 - Grafico di numeri triangolari

Disegna il grafico dei primi 101 termini della successione an = n(n+1)/2. Aggiungi poi delle opzioni a piacere.

>> n=0:100;
>> s=n.*(n+1)/2;
>> plot(n,s)
>> plot(n,s,'r')
>> plot(n,s,'.r')
>> n=0:50;
>> s=n.*(n+1)/2;
>> plot(n,s,'pg')
>> plot(n,s,'hg')

torna all'indice del modulo - del volume

1pcf.45 - La function primes

Il comando primes(n) fornisce in un vettore riga la sequenza dei numeri primi inferiori o uguali ad n.
Si osservi che 1 non e` considerato numero primo e se n>1 la sequenza inizia da 2.

>> primes(24)
ans =
  Columns 1 through 12 
     2     3     5     7    11    13    17    19    23    29    31    37
  Columns 13 through 24 
    41    43    47    53    59    61    67    71    73    79    83    89

torna all'indice del modulo - del volume

1pcf.46 - Grafico di numeri primi

Disegna, servendoti della function primes, il grafico dell'andamento dell'altezza dei numeri primi inferiori a 300.

>> y=primes(300)
y =
  Columns 1 through 14 
     2     3     5     7    11    13    17    19    23    29    31    37    41    43
  Columns 15 through 28 
    47    53    59    61    67    71    73    79    83    89    97   101   103   107
  Columns 29 through 42 
   109   113   127   131   137   139   149   151   157   163   167   173   179   181
  Columns 43 through 56 
   191   193   197   199   211   223   227   229   233   239   241   251   257   263
  Columns 57 through 62 
   269   271   277   281   283   293
>> x=1:62;
>> plot(x,y,'r')

torna all'indice del modulo - del volume