Sei sulla pagina 1di 38

FONDAMENTI DI INFORMATICA a.a.

2004/05 8 giugno 2005 Indice

Installazione ed uso di R Matrici Algoritmi


R 1 Matrici 12 Lo schema di Horner 18
Le funzioni d’aiuto 1 Il prodotto di Kronecker 12 Rappresentazione binaria 18
La matematica del futuro 1 Operazioni matriciali 12
Installazione di R 2 Indici matriciali 13 Testi
Il file .Rprofile 2 dimnames 13 Stringhe 4
Installazione di pacchetti 2 length, dim, ncol ed nrow 13 letters e LETTERS 9
head e tail per matrici 13 nchar 10
Operazioni fondamentali drop 13 sprintf 11
Programmare in R 2 rbind e cbind 14 paste 24
Nomi in R 2 Il gruppo simmetrico 
14 substring 24
I commenti 2 Il gruppo diedrale 14 chartr 24
Alcune costanti 3 La classe array 15 abbreviate 24
Assegnamento 3 row e col 15 Espressioni regolari 25
Variabili globali e locali 3 upper.tri e lower.tri 15 I modificatori (?m) e (?s) 25
Operatori di arrotondamento 3 diag 15 I metasimboli 25
abs (valore assoluto) e sign 4 det (determinante) e traccia 15 toupper e tolower 25
typeof 5 Sistemi lineari con R 16 I metacaratteri 25
Potenze 7 Autovalori 16 Il modificatore (?i) 26
Gli operatori %/% e %% 8 I cerchi di Gershgorin 16 grep 26
.Last.value 9 Alcune funzioni per matrici 20 regexpr 26
Conversione di tipo 9 strsplit 26
Teoria dei numeri Sostituzioni con gsub e sub 26
Input/output Il crivello di Eratostene 8 I riferimenti  1,  2, ... 26
Options e print(x,n) 3 v[v%%p  0] 8 Parentesi tonde speciali 27
Output con cat e print 10 Il teorema di Green e Tao 8 Lettura a triple del DNA 27
Input dalla tastiera 10 Divisione con resto 10 Numeri esadecimali 32
L’opzione fill in cat 11
Scrivere su un file con cat 11 Ordinamento Grafica
La funzione O.s 11 Ordinamento (sort) 21 plot 27
Data e tempo 31 rank 21 Grafici di funzioni 27
Files e cartelle 32 order 22 Octobrina elegans 27
Curve piane parametrizzate 27
Funzioni Matematica Curve di livello 28
Funzioni 3 Il volume della sfera unitaria 9 L’iperbole  28
Programmazione funzionale 3 L’ipercubo 19  28
Argomenti ignoti (...) 4 La distanza di Hamming 19 Il nodo    !   29
do.call 17 Sistemi di Lindenmayer 19   29
expression ed eval 17 La successione di Morse 20   29
system.time 17 La funzione Mlin 20  29
formals e body 17 Numeri complessi 22 Il foglio di Cartesio 29
on.exit e system 18 Il teorema di Rouché 22 La chiocciola di Pascal 30
Recall 18 Radici di un polinomio 23 Spirale di Archimede 30
lapply ed sapply 19 Le formule di Euler e de Moivre 23 Spirale logaritmica 30
mapply 20 Radici  -esime dell’unità 23 La cissoide 30
apply 21 Radici di un numero complesso 23 Cicloidi 31
Proiezioni lineari "$#%&'"$ 31
Istruzioni di controllo Tabelle L’elica 31
Operatori logici 4 Tabelle 33
Operatori di confronto 5 attach 33 Varia
if ... else 5 subset 34 Un premio a John Chambers 9
ifelse 5 transform 34 Un confronto 20
Cicli 5 rbind e cbind per tabelle 34
Evitare i cicli 5 merge 34 Bibliografie
P.quale 6 read.table 35 Numero 2 9
Una sorpresa nel for 7 save e load 35 Numero 5 20
Creare una tabella vuota 35 Numero 7 27
Vettori Aggiunta e sostituzione di righe 35 Numero 8 32
Gli operatori c e seq 4 Selezione di righe 35
L’operatore di ripetizione rep 4 Aggiunta di colonne 35
sequence 4 Sostituzione di colonne 36
Suddivisione di un intervallo 6 Ordinamento di una tabella 36
Indici vettoriali 6 La matrice dei dati 36
L’espressione v[] 6
NA 7 Una banca dati


Piccoli operatori 7 Gestire una banca dati con R 36
Proiezione su 7 La sezione DBC 36
Operazioni insiemistiche 7 La sezione DBR 37
Assegnazione vettoriale 8 Funzioni ausiliarie 37
which 9 Caricamento con Db 37
match 9 Db.nuova e Db.salva 37
any e all 9
head e tail 9
Prodotto scalare e lunghezza 15
Liste 32
             
    

Corso di laurea in matematica Anno accademico 2004/05 Numero 1

R In questo numero

R è un linguaggio di programmazione ad altissimo livello orientato so- 1 R


prattutto all’uso in statistica. In verità lo sbilanciamento verso la stati- Le funzioni d’aiuto
stica non deriva dalla natura del linguaggio, ma dalla disponibilità di La matematica del futuro
grandi raccolte di funzioni statistiche e dagli interessi dei ricercatori che 2 Installazione di R
lo hanno inventato e lo mantengono. R è gratuito e molto simile a un lin- Programmare in R
guaggio commerciale, S, creato negli anni ’80 e anch’esso molto usato. S Il file .Rprofile
viene commercializzato come sistema S-Plus. Le differenze non sono gran- Installazione di pacchetti
Nomi in R
dissime se non sul piano della programmazione, dove R aderisce a una
I commenti
impostazione probabilmente più maneggevole. 3 Alcune costanti
R ed S-Plus sono particolarmente popolari nella statistica medica, ma Assegnamento
vengono anche usati nella statistica economica o sociale, in geografia, nel- Variabili globali e locali
la matematica finanziaria. L’alto livello del linguaggio permette di creare Funzioni
facilmente librerie di funzioni per nuove applicazioni. Il punto debole è Programmazione funzionale
la velocità di esecuzione in calcoli numerici in grandi dimensioni, mentre Options e print(x,n)
sono ricchissime le capacità grafiche. Operatori di arrotondamento
4 abs (valore assoluto) e sign
Benché cosı̀ indirizzato verso la statistica, R non deve essere conside-
Gli operatori c e seq
rato un pacchetto di statistica. È un vero linguaggio di programmazione, L’operatore di ripetizione rep
anzi un linguaggio di programmazione molto avanzato, e ciò permette di sequence
adattarlo ad ogni compito informatico. Nella stessa statistica questa fles- Argomenti ignoti (...)
sibilità è molto importante proprio oggi, dove continuamente si scoprono Stringhe
nuovi bisogni applicativi, nuove necessità di tradurre metodi matema- Operatori logici
tici, ad esempio nella statistica di complessi dati clinici o geografici, in 5 Operatori di confronto
strumenti informatici. typeof
if ... else
ifelse
Cicli

!
Le funzioni d’aiuto Evitare i cicli
R dispone di numerose funzioni d’aiuto.
Da un lato ci sono varie guide disponibi-
li sul sito, dall’altra parte si possono invo-
45 $! 0 4 4
R si esce con o, equivalentemente, con
. Per saperne di più si può usare il
comando ; le informazioni che ci vengo-
La matematica del futuro
care gli aiuti mentre si sta lavorando con no fornite a questo punto sono più com- R è un linguaggio molto ricco di funzioni e varia-

!
il programma. Con plicate del necessario, come invero acca-
de spesso, d’altra parte il sistema di aiuto
in linea di R è veramente molto comple-
zioni e perciò non facile da apprendere. Questo
corso vuole perciò essere un’introduzione siste-
matica alla programmazione in R. Faremo tra
appare una pagina web (mantenuta sul to anche se non perfettamente organizza- l’altro vedere come R può essere utilizzato per
vostro PC) attraverso la quale si accede to, perché richiede che si sappia già come creare un semplice, ma piuttosto efficiente siste-


a manuali e informazioni generali. Clic- si chiamano i comandi e perché i comandi ma per la gestione di una banca dati. Gli esempi

01 / 0  "  " 


cando sulla voce Packages si trovano elen- non sono raggruppati bene secondo le fun- che proporremo saranno spesso tratti dalla sta-

 !
chi dei molti pacchetti di base o aggiuntivi zionalità. Per sapere di più su guar- tistica, ma R si presta anche molto bene a com-
disponibili. dare e . piti di grafica e matematica.
Dopo le informazioni di Esiste comunque un’altra funzione che

" #$ "% &' ( #)*#+#,#-./


aiuto appaiono sullo schermer del brow- permette di cercare informazioni su co-
The main scientific challenges of the twenty-first

/61
ser; per disattivare questa modalità si può mandi di cui non si conosce il nome o
century may no longer be divided into the classi-

01 61
usare dal termi- su gruppi di comandi. Questa funzione è
cal disciplines of mathematics, informatics, phy-
nale. Infatti spesso si lavora più veloce- ; per capire come bisogna uti-
sics, chemistry, biology, etc. For example, theore-
mente rimanendo sul terminale. Ci sono lizzarla battiamo . Assumia-
tical biology is currently in the phase of formu-
diversi modi per ottenere le informazioni mo adesso che cerchiamo le funzioni trigo-
lating laws of nature in terms of mathematical

76 819!/$: " 9


d’aiuto. Il modo più semplice, ma molto ef- nometriche. Proviamo prima con
statements; quantum chemistry has already be-
ficiente è di anteporre un punto interroga-
come an important research field in applied ma-
tivo al comando su cui si desidera sapere

01 #
thematics; physics needs more and more input

; $:
di più; con
from computer science and mathematics, inclu-

0 ; $:
trovando una breve pagina d’aiuto che ci ding logic and informatics; and, outside of the

2#
rimanda al pacchetto . Se adesso bat-

3 3 !
vengono fornite i dettagli sull’utilizzo del- natural sciences, financial mathematics has de-
tiamo , troviamo l’elenco delle fun- veloped highly reliable tools for economic mar-
la . R distingue tra il nome di zioni disponibili ket and stock analysis. But how will researchers
6"$ &77<<
una funzione e la sua invocazione con ;
naturalmente la parentesi può anche con- be motivated to do interdisciplinary research in

#6 %% =7<<
tenere argomenti. Proprio su questi argo- a university environment, given the current sy-
stem in which academic careers (typically) ad-

#"$ % <<
menti si consulterà spesso l’aiuto in linea.
Leggendo più attentamente il testo della vance based upon a record of publication in a
single field?

 %%/> ?A@</


guida si osserva che le funzioni di R han-
no spesso argomenti opzionali determina- www.wpi.ac.at/
ti dal loro nome; ciò è tipico dei linguaggi
in qualche modo derivati dal Lisp e verrà And the missing ingredient in facing those pro-

0
ancora trattato con più dettaglio. blems ... is mathematics.
Per uscire da un file informativo chia-
mato con basta premere il tasto . Da 4 con l’indicazione degli argomenti, seguito
da un’esposizione sull’uso.
D. Donoho: High-dimensional data analysis
- the curses and blessings of dimensionality.
Internet 2000, 32p.
FONDAMENTI DI INFORMATICA a.a. 2004/05 Numero 1 2

Installazione di R In questo modo ogni cambiamento in pro- ciente premere il tasto $ che utilizza la storia
gramma o in uno dei files della cartella Li- dei comandi dati in precedenza che si trova
Dalla pagina del corso scegliere la pagina di breria diventa effettivo. nel file nascosto .Rhistory nella nostra stessa
R e su questa CRAN. Vengono offerti i pac- La prima riga di alfa serve a cancellare cartella.
chetti per Linux, per Windows e per Mac. tutti gli oggetti definiti precedentemente.
L’installazione per Linux è molto sempli-
ce. Si ritira il file .tar.gz che si installa nel    
 '  (#
solito modo con ) ))))) ))))) ))))) ))))) ))))) ))))) ))))) ))) Il file .Rprofile
*  
  
+ 
 ', 
-&
 
   ./01
32
4#5
+ 
 6 Se la nostra cartella (la stessa in cui si trova-
       '7468    
9'7: no alfa e programma) contiene un file .Rpro-
  
   0 ; file, i comandi contenuti in questo file ven-
gono eseguiti all’inizio di ogni sessione in R.
)3<   >=
2? 3     ! Inseriamo quindi in esso l’istruzione
A questo punto, basta battere  dalla tastie- ) 1A@        !
ra e il programma parte.   ' 
-&               !
Sotto Windows bisogna andare in base e ".
/ B
 ( C87 55 C& GF+    9  &
risp.

scaricare il file rw2001.exe.   H     "DE " potendo cosı̀ successivamente fare a meno di
*  
  
+ 
 & battere questo comando ogni volta che apria-
  HA@    ; mo R. Siccome il file .Rprofile rimane nasco-
sto nei normali cataloghi delle cartelle e tal-
Programmare in R )
2 

I
 >2    I

) 2
J  
 
volta anche nel browser, conviene creare pri-
Benché si tratti di un linguaggio ad alto li- 'K :
L& ma un file Rprofile e di questo un alias con il
vello, gli ideatori di R preferiscono presen- %. & nome .Rprofile riconosciuto da R.
" 
4
% A 9'HC8 C&;
tare R come linguaggio con cui lavorare in % 
linea e non mediante l’esecuzione di pro-
grammi scritti su files. Oggigiorno ciò non )
  M 2

  ,
M 
>2 
>
  
D Installazione di pacchetti
è perfettamente comprensibile ed è possibi- 
le scrivere programmi e farli eseguire nel Il modo più efficiente per installare un pac-
modo familiare ai programmatori con la tec- A parte l’aggiunta dei suffissi, il file al- chetto alfa è di chiamare R come root, bat-
nica che adesso descriviamo e che permette fa non deve essere modificato. La funzio- tendo successivamente il comando
allo stesso tempo il lavoro interattivo. ne ausiliaria " % (che scriviamo in un file
   @    (C    C6 
+ h  i(&Hj ak 
separato che contiene le funzioni ausiliarie
Prima creiamo una nuova cartella Pro-
F+   9  &
generali) chiama il comando per
grammi in cui vogliamo svolgere un deter- salvare le modifiche nella nostra banca da- Il pacchetto viene poi caricato con
minato lavoro. In essa creiamo le due sotto- ti; questo comando verrà trattato più avanti
cartelle Esempi e Libreria. Nella prima con- nel corso. 
+    lHC     C&

4&  9'4CN C&
serveremo i nostri esempi; essa non è neces- L’istruzione % richiede
saria per la programmazione. Il contenuto l’uscita senza domanda di conferma. Si possono installare più pacchetti con un so-
della seconda può essere copiata dal sito del lo comando:
corso. Scriviamo adesso la nostra prima funzione.
Sotto Windows dobbiamo creare in Pro-
   @    (A(C    C 6CN+   C 6  !6
grammi un alias per R, in modo che i nomi 3'K :
L0  
+ h   i:(&j ak 
dei files possano essere indicati in forma ab- . @OBPQ ;
breviata. Bisogna poi cambiare le proprietà   484AR!6CBSOC&
del programma impostando la voce Da alla
nome completo della cartella Programmi. Nomi in R
Nella stessa cartella Programmi copiamo

La funzione cosı̀ definita Ucorrisponde
X alla
 
, mentre  è
adesso il file alfa dal sito del corso. Il pro- Nomi (detti anche identificatori) in R consi-
funzione matematica T U,V W
gramma principale (che cambia ogni volta stono di lettere, cifre o punti. Un nome non
@ 
 
a seconda dell’esperimento che stiamo ese- insieme a la funzione di base per la vi- deve iniziare con una cifra e un punto inizia-
guendo) risiederà nel file programma che sualizzazione (un po’ complicata anch’essa le non deve essere seguito da una cifra.
avrà quindi funzioni simili a quelle del fi- come tutte le funzioni di input/output di R)
le alfa.c dei nostri programmi in C. Quan- che qui visualizza Y[Z0\] per \G^-_ .   
CASOC  cd
do un esperimento ci sembra interessante e è il carattere di invio che, nell’out-  d bb @
put, fa in modo che dopo la visualizzazione
 ee
ben riuscito, lo copiamo da programma in
un file della cartella Esempi. il programma torni su una nuova riga.
Poi lavoriamo in questo modo: Facciamo
Per eseguire il programma battiamo R sono nomi ammissibili, mentre non lo sono
partire R e battiamo, solo in questa fase, c d  bm  e  dn c ee e
      
dalla tastiera e poi, una volta in R, diamo , , , ,  . R distingue tra mi-
il comando nuscole e maiuscole.
   !  &
risp.    sotto Windows. "   Bisogna anche evitare i nomi riservati di
R, tra cui alcuni caratteri singoli:
Possiamo fare a meno di questo comando, se
che, in accordo con la sua definizione, carica   * FporqJ7
utilizziamo il file .Rprofile. Successivamen-
il file programma e la libreria ed esegue le %
te, dopo ogni cambiamento nel file program-
 #
ma, è sufficiente battere "  
istruzioni cosı̀ raccolte. Viene visualizzato il che però possono essere usati come nomi di
dal termi-
risultato: variabili locali all’interno di funzioni.
nale oppure ripetere questo comando usan-
& ` ` abc adef
do il tasto $ . Si esce da R con % , rispon-
dendo no alla domanda se vogliamo salvare
l’ambiente di lavoro. In verità abbiamo ride- cioè V W[g , come possiamo verificare aggiun-
I commenti
finito la funzione % in modo che la domanda gendo nel file programma la riga
non venga posta. @
 4A@OBP f  Se una riga contiene, al di fuori di una
Lo scopo del file alfa è quello di rendere )
stringa, il carattere , tutto il resto della ri-
disponibile la funzione di esecuzione gene- ga è considerato un commento, compreso il
 Cosı̀ possiamo continuare a lavorare, rima-
rale "   che a sua volta carica le funzio- nendo in R, ma scrivendo il programma e le
)
carattere stesso.
ni contenute nella cartella Libreria. Il co- Molti altri linguaggi interpretati (Perl, Py-
       sue modifiche in programma, usando il ter-
 &
mando è necessario solo al- minale solo per ripetere il comando "   . thon, la shell di Unix) usano questo simbolo
la partenza di R perché, come si vede dal A questo scopo in ambiente Linux è suffi- per i commenti. In C una funzione analoga è
listato, verrà automaticamente eseguito ad 
 svolta dalla sequenza .
ogni chiamata di "   .
FONDAMENTI DI INFORMATICA a.a. 2004/05 Numero 1 3

Alcune costanti Funzioni in due righe:


 ,  
Mentre in R è una costante predefinita Come abbiamo già visto negli esempi, l’in-   D 9; B =# , ;F D ƒP I#
( ), ciò non vale  per il numero  che, essen- testazione di una funzione in R ha la forma D 9 ; B = , ;F  D ƒ I>  
do uguale ad  , può essere ottenuto come seguente:
 
 . Ciò richiede però che ogni volta che
^ Nell’esempio che segue formiamo
lo utilizziamo deve essere ricalcolato; ponia- 9; ED 9; B =# , ;F 777 Œ
„†…[‡#ˆ[‰GŠ ‹ ‰GŠ ‹ ‰GŠ ‹ Œ
mo quindi le righe p € r  ‚{ pir  
    Ad essa segue il corpo della funzione, in ge-
       !  !  * 
 !  9 "  D 9; B =# , ;F  z  Ž2
nere incluso tra parentesi graffe che pos-
 ! 
 "#   
#     #! ! $ sono mancare quando il corpo consiste solo
"      W  * -* , 
di un’unica semplice istruzione. In caso di
 * 9 H " =  "  +(H  ; ,
dubbio mettiamo sempre le graffe. 9 " < ; , 
9 * "4P H <;z
in un file della libreria che conterrà le co- La parte indicata con 777 corrisponde agli

stanti e le variabili globali. Gli altri due va- argomenti della funzione. Nell’utilizzo deg- W - <;=
9 * " H < ;
?z# 
lori che%&abbiamo
' aggiunto corrispondono a li argomenti R prevede alcuni meccanismi , 9=9=T: 
%&' e . veramente potenti ed eleganti (per la mag-
’ “
gior parte risalienti al Lisp), soprattutto ‰GŠ ‹ ‘ “ , il risultato 'U” • è cor-
la possibilità di usare argomenti facoltativi Siccome p
con impostazioni iniziali e argomenti ignoti. retto. Per la stessa ragione è semplicissimo
Una funzione restituisce l’ultimo va- rinominare funzioni, ad esempio:
Assegnamento
lore calcolato o il valore ) se si usa
L’assegnamento di un valore (spesso rap- l’istruzione - =9 - ;
) . Non dimenticare le N * BhH–-
" N =
presentato da un’espressione) a una varia- parentesi! - =9 - ;
G da solo corrisponde a W - < ;=
* " B — 
- =9 - ;
L_`` . Questo punto nasconde una , 9=9=T !
bile  avviene mediante l’istruzione
piccola debolezza della sintassi di R; infat-
(()*+,-
ti quando, come accade non raramente nel-
le funzioni interattive, si vorrebbe avere la
Esiste anche la forma tradizionale (legger-
mente più generale)
possibilità di uscire in modo immediato da Options e print(x,n)
un punto interno della funzione, l’istruzione
./)*+,- - =9 - ;
G fa in modo che la funzione restitu- Il numero delle cifre significative che vengo-
isca il risultato
L_``
invece di nessun risul- no visualizzate mediante B* = o  - <;= in un
sicuramente meno leggibile. Per saperne di tato. Se si vuole solo impedire che questo ri- numero reale è preimpostato a 7 e può esse-
più usare 0#1 ./ 1 . sultato nullo venga stampato, si può usare re modificato mediante il comando
Più istruzioni sulla stessa riga devono es- <; )  H <a + G al posto di - =9 - ;
G . , =# , ; H ƒ"I2= H 
sere separate da un punto e virgola, mentre
il punto e virgola alla fine di una riga è (a Useremo da ora in avanti per le funzioni per avere ad esempio 12 cifre significative.
differenza dal C) facoltativo: sempre nomi che iniziano con una maiusco- Il valore massimo è probabilmente 22, ma
la, ricordandoci che sono riservati i seguenti sembra che la precisione arrivi a circa 16 ci-
 2 4365 78 3:9 8 5 fre significative. , = , ; H funziona quindi in
nomi:
 - <; => ?9@  modo simile a  *- . Per vedere anche gli altri
b
... contrasti parametri provare , =# , ; H G .
... derivata
^ Se si vuole stampare un valore solo una
... falso
c volta con un certo numero di cifre, si può uti-
Variabili globali e locali M
... inibizione di interpretazione lizzare il secondo parametro di  - <;= .
... vero Esempio:
Talvolta, e con parsimonia, si usano anche
variabili globali. È possibile modificare il  - 
W ,  G  @3:  < ;=>
 
valore di una variabile globale dall’interno
9 =9=T  
di una funzione seguendo il procedimento Programmazione funzionale
degli esempi che seguono. W - < ;=
 PG 2  
Nel primo esempio vogliamo aumentare R è un linguaggio funzionale; ciò signifi- , 9=9=T        
di uno il valore di un contatore globale, ca che, nei limiti imposti dalle condizioni
necessarie di finitezza, dati insiemi d ed , =# , ; H ƒ"I2= H  2 #
nel secondo esempio invece il valore di una e egf
qualsiasi variabile (che naturalmente deve , gli elementi dell’insieme
e delle app- W - < ;=

essere numerica). Si osservi attentamente licazioni da d in possono essere defini- , 9=9=T        
l’uso degli apici! ti e usati come gli elementi di un qualsiasi
altro insiemi. Ciò corrisponde al fatto che
A   *B, * ,-CED B , nell’istruzione
9 ; = ;= = 9; =# ;F G
*HH I;
J KLMAMKNO JP KLMAMKNO 8 @P? ,H  Operatori di arrotondamento
DhD 9; B =# , ;i 777 AAAA
KLMAMKNO   denoti un numero reale. R prevede le se-
AAAA AAAA
l’oggetto D 9; B =# , ;V 777 , in cui guenti funzioni di arrotondamento:
D,- QR2;S UT A 9   ; = *B, ;= * = ,- G denota il corpo della funzione, è un oggetto -, 9;">  P?;z ... arrotondamente a ; cifre de-
KLMAM#KNO
W - <;=V di R a pieno titolo. In particolare funzioni
, 9=9=XTY cimali con arrotondamento alla cifra pari in
possono essere non solo argomenti, ma an- caso di equidistanza.
che risultati di funzioni. Ciò costituisce, sia H I; D  P?;@ ... arrotondamento a ; cifre si-
A   ;= *ED 9; B =# , F
Z 9  ;  sul piano teorico che nella espressività pra-
I  =>  P? ,H 
gnificanti.
9 tica del linguaggio, una differenza sostan-
*HH I;
 P?9 8 [P? ,H  \ ziale con il C in cui funzioni possono essere = - 9; B  ... arrotondamento intero in dire-
argomenti ma non risultati di altre funzio- zione dello zero.
 D+,,-  ... parte intera di  ; fornisce un
A   *  W A B ni o, più precisamente, funzioni possono es-
9 ;= J GJ  >] sere definite soltanto nella stesura del pro- risultato corretto anche per argomenti nega-
W - <;=>  gramma da parte del programmatore e non tivi.
, 9=9=XT  B  + 2;I4  ... intero più vicino alla destra
generate nel corso del programma stesso.
di  .
In R variabili locali sono le variabili defi-
Possiamo ad esempio definire l’operatore di Queste funzioni possono essere applicate an-
nite all’interno di una funzione, ad esempio
composizione di due funzioni, che corrispon- che a vettori numerici, le prime due anche a
mediante un’assegnazione.
de a jlk#monqpst?ur v wxzyg{}| p~t?ur v wx r  yX€?|4€4‚G‚ , numeri complessi.
FONDAMENTI DI INFORMATICA a.a. 2004/05 Numero 1 4

abs (valore assoluto) e sign Un operatore molto utile per generare suc- sequence

è il valore assoluto del numero reale cessioni di valori equidistanti è la funzione
OP . Il risultato di Una funzione che si applica più raramente è
o complesso  . OP . O72O . Se 0
2S79;:
8:&QQQ è un vettore di
OP":7 .
Secondo la filosofia di R, se è un vetto- numeri naturali, con OP O 2O
si ottiene
re, con  si ottiene il vettore dei valori il vettore 2,9YZ;9;:,9YZ8:&QQQ? . Esempio:
assoluti degli elementi del vettore; lo stesso è la successione
vale per una matrice dalla quale otteniamo ": G 9;:? G 8:&QQQ 0&2<":,9;:8&
. & 0 OP . O2O"&
quindi la matrice dei valori assoluti dei suoi
) ' #3 .
coefficienti. che è continuata fino a quando non si supe- W 98C<C9J918
 

è il segno di un numero reale ra  . Il passo di progressione è quindi R se
(uguale a zero se  è uguale a zero). non viene impostato come terzo argomento:
OP"::S)7
Argomenti ignoti (...)
restituisce la successione
Gli operatori c e seq In una funzione si possono usare anche argo-
": G ):? G 8):
QQQ
menti non noti in anticipo; essi vengono indi-
Uno dei punti forti di R è che molte fun-
cati con tre punti che nel corpo della funzio-
zioni sono definite direttamente per succes- anch’essa continuata fino a quando l’ultimo
ne possono poi essere trasformati in un vet-
sioni finite di valori. Ciò significa che se valore non supera  . Esempi:
tore con
definiamo una funzione in R per la fun-
. 0&OP"I":>& ;FT) #3@ . 0&2&QQQ
zione matematica   , la possiamo im- '
. 0&OP"I":8:IUQ<& ;FT) #3@ .
. 0&OP"?<@QV:A
;FT) #& '
mediatamente applicare a una successio- ' 3@ . oppure in una lista con
ne 
 ! per ottenere la successione . 0&OP"?<@QV:>":IQ8& FT) #3 .
'
" #" ! . In C allo stesso scopo bisogna 0 \  3@&QQQ?
W IB98C<1=J>
lavorare con un ciclo, ad esempio un $&% ' , e
W I1IQ<JIQDIUQAB9Q8C9Q>K9QN Spesso in tal caso si usa un’istruzione che
riflettere sulla struttura di dati che si vo- W <@QV=UQVJ>@QV1D@QVCV@QV1N@QV ha lo scopo di determinare il numero degli
gliono utilizzare; in Lisp e Perl si può usa- W <@QV1<QA1=Q?9X=Q<J=Q>=QV1=QA
re la funzione ( ) che, data una funzione $ , argomenti, per esempio
trasforma la successione nella successione &0 \ O
3]

*+  ! *+ !,! . In R è tutto molto più @YZ è un’abbreviazione per OP"::S&[09 .
semplice e automatico: I tre punti possono essere usate anche diret-
Si può anche indicare il numero degli ele- tamente in un’altra funzione, ad esempio
-. /10 .
$ 23
% 4
576#8 menti della successione mediante il para- d 0 $ .   23
% 4&QQQ
. 0
2,9;:8":<:=":?>& metro \ O&3] : e 0 H HH fF [0 H H H Fhg@":[":&QQQ i
-. /" .
0 . 0&OP"L9;: O
3]&0V

) ' #3@ \
) ' #3@ .
W . 3) . 3UY^958C<1=B>1DJV
%
con output
. 0&OP"L9;:S&[0IQ9;: O&3]
0=

Stringhe
95=BAC9 DC8> \
) ' #3@ . Stringhe in R possono essere racchiuse in-
W . 3) . 3UY^9QIB9Q9C9Q8C9Q<
. % differentemente tra virgolette o apici. Virgo-
Si osservi qui che la successione è stata
lette e apici all’interno di una stringa sono
creata utilizzando l’operatore 2 , il cui nome . 0&OP"L9;:=": O&3]
0D&
\ rappresentati da jk e jl .
viene da concatenate e che unisce una se- ) ' #3@ .
quenza di valori in un unico oggetto. W . 3) . 3UY^9QIB9QDC8@Q818@QNJ<@QS=J=QSI
E 2 %
per dettagli.
. 0&OP"L9;:=": O&3]
0>&
\ Operatori logici
) ' #3@ .
Anche le operazioni algebriche vengono ese- W . 3) . 3UY^9QIIB9QV>18@Q>IB<@Q8>1=QSII
guite su tutti gli elementi di una successio- % Vero e falso in R vengono espressi da mnop
ne; possiamo ad esempio moltiplicare una e q&rst p abbreviabili a m e q . Quando riporti-
successione con un numero oppure anche Questa rappresentazione è spesso da pre- amo l’output, scriviamo sempre m e q benché
due successioni tra di loro. Esempi: ferire quando si vuole generare una sud- sullo schermo R stampi invece mnop e qrstp .
divisione di un intervallo in sottointervalli; Le abbreviazioni m e q sono comode ma
. 0
2,9;:8":<:=":?>& ;F 0&28:,9;:?<:>:D
;F bisogna solo ricordarsi che per _ sottointer- pericolose, perché a differenza da mno&p e

) ' #3@ .
G valli bisogna impostare \ O&3] a _X`aR . Un q&rst p l’utente può ridefinirle. Ad esempio do-
) ' #3@ .7H .
esempio è la funzione b @Q // a pagina 6. po m 0 qrst p e q 0 mnop i loro significati vengono
) ' #3@ .
G 9I
addirittura scambiati!
) ' #3@,9 I H#. In un contesto logico il numero 0 viene va-
lutato come falso, ogni altro numero come
con output L’operatore di ripetizione rep vero; viceversa in un contesto numerico mnop
viene convertito ad 1 e q&rst p a 0.
<1<CDJAK99 Per la ripetizione di elementi in un vettore u
(AND) E v (OR) sono effettuati com-
818CAJ8IC<I (o in una lista) si usa l’operatore ' O ) : ponente per componente,
uu
e vv sulla pri-
99J9 8B9 <B9=K9 > ma componente di ogni vettore; le forme più
. 0 O)L9YS=":8

9IC8IC<IJ=IC>I '
) ' #3@ . lunghe si usano nelle istruzioni di controllo.
W 958J<J=K958C<1=  % ' è l’OR esclusivo, w la negazione.

2L9 8:8=@:DI":<D& M2=":<:8


. 0 O)L9YS=": O&3]cQ . 30&V& . 0&2I@:8:<:I":>&
' \ %
) ' #3@ . 0&2,9:<:I":=":8&
dà il risultato <JNC<IJA perché il vettore più W 958J<J=K958C<
.&u
) ' # 3
corto in una tale espressione viene ripetu- W . 3 ) . 3U Y
to ciclicamente. Viene però emesso un mes-
. 0 O)L9YS=":O2#]&08

' %  qCmJq1qCm
) ' #3 .&uu
saggio di avvertimento e quindi si dovrebbe ) ' #3@ .
. . 3UY
W
evitare di usare questo tipo di espressioni
W 9198C8J<1<J=J= % 3) q
all’interno di un programma. . 0 O)L9YS=":?2,9;:<:?8:I
 x0&2 m : m : q :=":8&
' ) ' #3x
) ' #3@ .
W . .
Un singolo elemento è identico a un vetto- W 958J8C8J<1< % 3) 3UY^9C95I1=B8
re con un elemento solo. In questo senso R 0 ' O)L9YS=":?28:I":I":<&  ) ' # 3 & . u x
non possiede oggetti scalari che sono invece ) ' #3@
W . 3 ) . U
rappresentati da vettori di lunghezza uno. W 9195=C=J= %  3 Y qCmJq1qCm
FONDAMENTI DI INFORMATICA a.a. 2004/05 Numero 1 5

Operatori di confronto if ... else con output


Per uguaglianza e nonuguaglianza si usano All’interno di una funzione o di un blocco tra 6%
 e  . Naturalmente sono presenti anche parentesi graffe l’ 32 di R viene usato nelle for- 4="61
4="61
gli altri confronti numerici. Gli operatori di me
6%
confronto vengono eseguiti componente per 129 ' !41W ' !5X=1#%W ' !5 4="61
componente: 6%
oppure

      12Y ' !41W ' 
! 5Z=1#%W ' !5 Un uso tipico di 1257=%5 è illustrato dal se-

 
  57=%5(=1#%W ' !5 guente esempio:
 "!#$%  6%
     
&(' #%#*),+(-.-(-/+.- Quando il comando complessivamente occupa
più righe e non si trova all’interno di un bloc- N
    
 "!#$  %  co o di una funzione, bisogna racchiuderlo tra
3257=56%%NA ; G ; ; F ;

&(' #%#*),-(+.+(+/-.+ parentesi graffe.
 "!#$ 
& P P(P P/P P.P /
 "!#$ 01  G F G G P P F ( P P F P
&(' #%#*),-(+.-(+/-.-
ifelse 3257=%5 (nella sua forma non vettoriale)
Come si vede,  applicato a due vettori re- K sia un vettore di valori booleani o di oggetti è una funzione molto importante anche
in informatica teorica e nella teoria dei
stituisce un vettore di valori booleani. Tal- convertibili a valori booleani, 6 e N due vetto- circuiti digitali, dove appare nella descri-
volta questo non è ciò che si vuole (ad esem- ri qualsiasi, non necessariamente della stes-
pio tipicamente in un 32 ). La vera uguag- sa lunghezza di K . Allora
zione diuwx
pq^1rstv pq^1rs booleane (cioè funzioni
funzioni
lianza (anche più stretta di quella fornita ) mediante diagrammi bi-
da  ) di due oggetti in R deve essere deter- 1257=%5K 6 BNC nari di decisione. Invece^"\ di^1_
3{ 257=%5K 6 $N 
minata con 1453!#%67 : si scrive allora spesso y z . Questo ope-
è il vettore che si ottiene sostituendo in K ogni ratore ternario esiste anche in C dove vie-

   valore + con un valore di 6 e ogni valore - ne scritto nella forma KI|(6Y)@N .

   con un valore di N , percorrendo (ciclicamente,
quando necessario) i vettori 6 e N .
 "!#$%  1257=%5 è effettivamente una funzione che
&(' #%#*),+(+.- Cicli
può generare delle configurazioni piuttosto
8 1 29$ :3!#;$<167;
 complicate e matematicamente interessanti. R possiede tre istruzioni per l’esecuzione di
'
57=%5>3!#;$! ' !/<1 67;
%?
Assumiamo che vogliamo generare una suc- cicli: 2  , } R %75 e 5356%# ; esse vengono uti-
&(' #%#*)@<167 cessione della forma lizzate con questa sintassi:
[\]^3_3`^3\Ca ^3_"b^3\ cC^3_3d^3\ e ^1_"f^3\Cg ^1_%]EhC^3\]3]C^3_%]
`i
8 1 291451!#%67$A BCD"!#;$<%67;E 2 ' 9KI3!( /=3#%W ' ! 
57=%5>3!#;$! ' !/<1 67;
%? Allora possiamo procedere come in questo es-
&(' #%#*)@! ' !.<167 ' ' '
empio: } RC%75x !41W !5Z=3#%W ! 

   K ) 1 51561#I=3#%W ' ! 
6
3 Fj  % Fj % Fj  k
8 1 291451!#%67$A BCD"!#;$<%67;E '
57=%5>3!#;$<167;
1?
N Fj
Fj   dove =3#%W !  è un’istruzione singola op-
3257=%5Kll  6 BNC
&(' #%#*)@<167 61#$A ;m3!A;

pure una successione di istruzioni che al-
lora deve essere racchiusa tra parentesi
graffe.
In R F%GHH coincide con 
 : con output Per uscire da un ciclo si usa N561~ , men-
1I X ( (n / 1. . %I /%( tre !5K%# interrompe il passaggio corrente
 "!#I1453!#67 F%GHH E di un ciclo e porta all’immediata esecuzio-
&(' #%#*),+
Infatti, siccome i vettori 6 e N vengono ripetuti ne del passaggio successivo, cosicché
ciclicamente, abbiamo questa situazione: 2 ' 9  KI3!o )B % 
8 129Kll 0%:! 5%%K #
x a b
typeof  "!#K 1?
1 100 NA
' 2 K 
Con #J1 5  si ottiene il tipo di un singolo 2 NA 1
stampa sullo schermo i numeri pari com-
oggetto K . Esempi: 3 200 NA
presi tra 1 e 20.
4 NA 2
#J15 ' 2 5 300 NA
 "!#9$  &.' #L)M4 ' N75 6 NA 1
7 100 NA Evitare i cicli
#J15 ' 2OB
8 NA 2
 "!#9$  &.' #L)M4 ' N75
9 200 NA R non è particolarmente veloce nell’esecu-
#J15 ' 2"P"67%26 P1 10 NA 1 zione di cicli. Le operazioni vettoriali per-
 "!#9$  &.' #L)Q3R6161#51 11 300 NA mettono però spesso di evitare i cicli, sem-
12 NA 2 plificando non solo il lavoro del program-
#J15 ' 2B+S GT  matore ma rendendo anche molto più ve-
 "!#9$  &.'   #L)U7 ' <%67 Secondo il programma, per un valore dispari loce l’esecuzione dei programmi. Quindi ad
nella colonna K viene scelto il valore da 6 , per esempio per creare una tavola dei quadrati
#J15 ' 2  un valore pari un valore da N . dei numeri da 1 a 100 non useremo
 "!#9$  &.' #L)M4 ' N75 6 e N possono anche consistere di valori sin-
goli, come in #6%

' 2 ' 9$!o3!o ) 3#61*€!‚1!ƒ"
Un’nformazione meno fine è fornita da V 45 K  
   
e 
 
7 
6 
= = . Comunque in un linguaggio che 3257=%5Kll  "PE4="61 P "P 61P1
non prevede dichiarazioni queste informa- 2 ' 9Bo"!(C/%61#BA ;m3!A;E ma semplicemente
zioni un po’ difficili da imparare sono neces-
sarie molto raramente. ! ) 3kM#611!C„"!

Corso di laurea in matematica … Fondamenti di informatica †x‡‰ˆ Docente: Josef Eschgfäller


             
    

Corso di laurea in matematica Anno accademico 2004/05 Numero 2

Suddivisione di un intervallo In questo numero

Illustriamo l’uso degli argomenti facoltativi


nella seguente funzione che calcola i punti
'-2"/'-3"40+'-51 , 6 Suddivisione di un intervallo

 
poi Indici vettoriali

768$90!'-:;<'=6>"/?:
corrispondenti alla suddivisione di un inter-

     
vallo in sottointervalli. L’unico argo-
P.quale
mento obbligatorio è , mentre e sono L’espressione v[]
7 Una sorpresa nel for

& '=@6>29"/0!7' :
preimpostati ad e . per cui
Possiamo inoltre indicare un margine a NA

 !#"$% '()+*-,  &


cui corrisponde quindi una suddivisione di Piccoli operatori
„ …#†D‡%ˆ
A-BDCDCEBGF!H
, inizialmente impostato a , Proiezione su

,
oppure il rapporto
hezza dei sottointervalli.
tra e la lung-
Con la funzione di R si può control- Operazioni insiemistiche
Potenze
 , , , 
lare se un parametro è stato usato in una
funzione. Inseriamo le funzioni riguardan- 8 Gli operatori %/% e %%

  ti le successioni nella sezione MS della no-


stra libreria. La funzione cercata può essere ‰
Il crivello di Eratostene
v[v%%p 0]

 ' I C#J>CGK+LDLNMNODKDF-PQ+BDRFSTFVUXWDMDY#UTZ!M-[?U
quindi cosı̀ programmata: Il teorema di Green e Tao
Assegnazione vettoriale

,. "/. "/0! ' , a BOLE\D]%S+Q!bcA-W%MDBDY#CDCDU>^%BF!_+H#R%MDS8^%Y-_-` R!`D`


Per calcolare da usiamo le relazioni
9 which

LEC%\D\%j#]dQ!SXWDWDM%hD^%LE_+\DRE]dQ+e=W=STZ+UTZ+fDW!f%L!`%g=\D]dSTF!Q!hEW=i!Uk]De^%\_+F!H%R!QD` _!MdF!h+[E`dl
e match
any e all
Il volume della sfera unitaria

' "/1. "/0!


da cui
head e tail

]D\dF!H%Q%_!M%F!h+[ C%\%j $m 


Si osservi che alla fine usiamo l’opzione letters e LETTERS
in perché per sottointerval- .Last.value
e li abbiamo bisogno di punti. Conversione di tipo
Un premio a John Chambers
Bibliografia
Indici vettoriali
R possiede dei meccanismi molto generali e Una caratteristica avanzata di R è che co- q
P.quale

C B Q-PG_
sofisticati per l’uso degli indici in vettori e me indici si possono anche usare vettori di Creiamo adesso una funzione, simile allo

n M+[E[=oX[dp
matrici. Consideriamo il vettore
€ 
valori booleani, cioè vettori i cui componen-
ti sono o o . Se in questo caso il vettore
booleano ha una lunghezza minore di quella
e all’operatore ternario punto inter-
rogativo del C, che permette di definire ra-

Š J8jdK+WD]D\#S>‹#U w U n [?UXp=U n i!n ` n


pidamente funzioni mediante un elenco dei

i ‹ [ ‹
del vettore da cui vogliamo estrarre, i valori valori che la funzione assume. Esempi:
Indicando un singolo indice o un vettore di booleani vengono ciclicamente ripetuti.

q
indici ne possiamo estrarre singoli elementi è uguale a se è

q
Esempi:

n M!PuS‚[#o8p!`
uguale a 5 e uguale a , se è uguale a 8,

‹DMEM w~ŒŠ n [moŽ‹DMEMEp w Œ n n i n n


o parti:

Mtq ^-n1BGFEr Qi%s S ` K!tO+^+MB%n1]dBGFEQDr ^+O-QVR%B%STK7M!]dQDPu` ^!S8VRDs U8U8€U>€U8U8€VU8U8-`


e corrisponderebbe quindi in C a

q JTjdK+WD]E\=S>‹#U U [?UXp#U i=U v!`


Mtq ^-n1BGFEr QPuSXS i#`UXv=UXp!`ds nv
mentre assume

‹
gli stessi valori dell’espressione precedente

q K v~(y n
per uguale a 5 o ad 8, e il valore in tutti

Mt ^-n1BGFEr8Qw So8xDs` ‹DMEM w~Œn [moŽ‹DMEMEp Œ n i<o n v


con output . Infatti vengono riprodotti gli altri casi, corrispondendo quindi in C a
in gli elementi di che corrispondono a po-

O-B%]d€ QD^!RDM!Pun S8€U>-` O-B%]dQD^!RDM!PuS8U>€-`


sizioni in cui il valore del vettore booleano è

qŠa J8jdK+WD]D\NMNO%KDF7PQ+B%RFS>‹#U!JDJEJX`
uguale a . La funzione è cosı̀ definita in R:

n
Con otteniamo ogni secon-
con output
WDME]EBDCQVS!JDJDJX`uBdM+[?.F!ME]D\F+H%Q%_VSXW+`
a _7BdO<B%]D\mS>‹DMESkMEBD‘W F7rD` r B%sDs+`@^!\dQDKE^%FVSXW rDr Bdh+[dsDs+`
do elemento di , con ogni se-

[d[dii4[dv4[dp condo elemento di , saltando il primo:

n M!PuS‚[#o8p!`
[ w [dy4[dz4[dp|{E} BdBOM+BdhESkiDBdMDl M%F7`’^!\dQDKE^%FVSXW rDr F!sDs-`dl
K!tO+^+MB%n1]dBGFEQDr ^+O-QVR%B%STK7M!]dQDPu` ^!S8€VRDs U8-`
q
Mediante l’uso di indici negativi possiamo
K!tO+^+MB%n1]dBGFEQDr ^+O-QVR%B%STK7M!]dQDPu` ^!S8VRDs U8€-` ‹ e i valori con cui viene confrontato devono
escludere alcuni elementi:
q essere numerici.

Mtq ^-n1BGFEr QfDi%S s `


q
Mt ^-n1BGFEr QfEPuS Ski=` UXv=UXp+`s
con output

w nn
L’espressione v[]

iN|[ ~v y(zp n1r s


Un po’ sorprendente è che per un vettore

n1r n sDMEz
con si ottiene il vettore dei valori di

t
stesso e non un vettore vuoto. Con ciò si può
ottenendo

[D[D[~[~[d[/v4[[ /w [[dwy4[d[dy/z [dz([dp


Potremo cosı̀ con grande facilità riscrivere in
R un famoso e antico algoritmo (il crivello di ^
n1r s r v%sDM!i
usare l’abbreviazione
zione per + \. X
S =
z k
U D
] 
\ !
F %
H
come abbrevia-
D
Q V
_ S `D` n1r v%sEMEi
ƒm
Eratostene) che permette di trovare i numeri
primi per un dato numero naturale .  è invece equivalente a
tutto una notazione contraddittoria.
; in
FONDAMENTI DI INFORMATICA a.a. 2004/05 Numero 2 7

Una sorpresa nel for V  Y I  è il prodotto degli elementi del vet- Per invertire un vettore si usa
 CI
:
I
tore ; anche questa funzione può essere ap-
 Y V 4"
 C I*
Assumiamo che vogliamo eseguire una cer- plicata a matrici, infatti V 1 è uguale a & R 
ta operazione per  
se
è maggiore V  Y '  1% . Esempi: W
R]G]F]E]/J
di 0, mentre l’operazione non viene eseguita
se
 . Allora dobbiamo usare la sequenza V 
 4* V  Y
& R 
     W  H 4 VH 4

  
 ZQ/
Proiezione su efhg*i*j
V 
 4* V  Y
/&,R&N>,E&(F.E 
che in C corrisponderebbe a W  H 4 VH 4 In statistica conviene spesso trasformare i
XFE/ I
    valori contenuti in un vettore di dati nu-

   !
" ##
I C "  I merici in valori compresi tra 8 e k . Ciò può
2 H
 e
)  sono la somma e la media
Il programmatore in C sa però che non è ne-
  I essere ottenuto con l’operazione
cessario in questo caso anteporre al la del vettore . Esempi:
 lm 5n;^o
condizione
  , perché, se
non fosse V 
 4* H  p
;^o
maggiore di 0, il ciclo non verrebbe eseguito. W  H 4 VH 2 4
   R 
Perché in R dobbiamo allora inserire Z/  I
$    applicata agli elementi di , dove o è il mini-

%  ? La ragione è che il percor- V 
 4* C "   I p
W  H 4 V
H 4 ) & R 
mo in , il massimo. In R programmiamo
re l’insieme &
che, quando
è, come nel ZE*(G
nostro programma poteva accadere, uguale q 4   H  4 I
 r  ) "
O
I  I '   I
a 0, corrisponde al vettore ' ( % , e quin-
   Queste funzioni vengono naturalmente usa-

 -
s
) B  -
 t
di l’istruzione che segue il verrebbe ese-
te molto spesso in statistica.
guita due volte, prima per uguale a 1 e poi
Questa funzione fa parte della sezione S
per uguale a 0. I Y " I
R infatti definisce )*+ per + minore di ' H
2 H
 e  sono i vettori delle som- (statistica) della nostra libreria. Esempio:
 I
) come il vettore ' ),)- .)-/&   + , con me cumulative e delle differenze di .
B & G
gli elementi elencati in ordine decrescente.  V   4",q 4 
 )  B  
) ' E&./&,G&,S,Q&,R&[ ,\  W
Questa piccola comodità può confondere pa- V 4* )  "  K " /G] " G ]"  QGJ& 
recchio il programmatore. W  H 4 VH 4
ZEK/PG]SPQKR^ ^\

2 'H
% H ) 
V  4*2 
Operazioni insiemistiche
NA W  H 4 VH 24 
ZEKGJ JSK/G]E_F_G
R contiene alcune semplici, ma potenti fun-
In statistica accade molto spesso che serie Y " zioni insiemistiche:
+ 2
di misurazioni contengano dati non validi V 4* +  CDC C4" B
o non disponibili. A questo corrisponde il W  H 4 VH 4 2
(1 ... u 5cvcw?x
Z/KGPS]QPRP P\ H %y 1 z% w|{_}
valore 01 (un’abbreviazione per not availa- 4 C  C 4*
...
4
ble). La funzione 2 3 che calcola la radi- V 
 4*,Y * 
' .2 
2 ' 1 z%
C 4Y  *
... w|~_}
ce quadrata reale di un numero reale 5 non W  H 4 VH 4 2 1(z% ... w|@}
ZEK/PG]SPQKR^ ^\ C 4 C H D&
è definita per 57698 , anche se nel campo 2 3 ) 1* z% ... u w$€}x
complesso 5 possiede le due radici : ;<5>= e  CDC C4* B d  d
;?: ;@5= (ad esempio le radici quadrate di
L’operatore che forma le differenze è inverso 2
(1 è equivalente a B 1 .
all’operatore di sommazione! Insiemi vengono rappresentati da vettori,
;@A sono : A%= e ; : A= ). Se è dato un vettore
B di numeri reali, non necessariamente tut- C  Y
astraendo dall’ordine degli elementi e da ap-
ti positivi, di cui, se sono positivi, vogliamo
2 H
,
) eV possono essere anche appli- parizioni molteplici dello stesso valore.
cate a vettori di valori booleani che in que- Per ottenere da un vettore un vettore con
calcolare le radici quadrate, possiamo usare
 CD C sto caso vengono convertiti a 1 (per ` ) e 0 gli stessi elementi, che però appaiono una
2 per convertire tutti i valori negativi % H C
(per a ). Questo implica che combinando 2 H
volta sola, si usa H 3 :
in 01 :
con le operazioni logiche vettoriali si posso-
H 

B  I  H' % >,/&C&N .E&(FN>,/&(F.G 
no contare gli elementi di un vettore con de-
 ' - ./&( ,E,-F,G
B    CD 2 C& B   B  0 1 terminate proprietà. Esempi: 4"3  HI H 
H 2 3 4* B  V
 $ IJ H 4* I  H  W  H 4 VH 4 
K') B LKL L,M LN  ' `*(`* * a  `" a% ‚K/]EcF^G
V  4* 2 H
 H  
W  H 4 VH 4 Y D 4CY H
ZE L’istruzione HV ')  restituisce invece
con output
I  un vettore booleano con ` in ogni posizione in
- O01 WP b' F"4%(S&
 ( c ,ET ,D/ c
 CDC C4  %_Y  cui appare un elemento presente già in una
/P FF/F
)

V 4* 2 H
 I !G 


G" posizione precedente di H :
K W  H 4 VH 4
XF H 
EP QE/ G  V 4*
C ) "(I !G  I  Y' HV >D,/&
 N4.E&
CY,/& H ,/(F
-FK01 W  H 4 VH 4 4" I ') 
X "(G V
GK/" /ER RS W  H 4 VH 4 
I ƒaPa]`KaP`]`Pa
Nell’ultimo esempio !G è il vettore
 H…„† Y HV 
D  4CY H
' )  ‡ è quindi probabilmente
' `* a*(a* a* a" `* `*(`% % H C& H
Piccoli operatori equivalente a H 3  .
I che nei contesti numerici viene trattato co-

La lunghezza di un vettore si ottiene con me il vettore ' ( , ( ( *NN[ . Altri
DC T4U" I
 . esempi:
(I " I
Potenze

) B
  e
 sono il massimo e il minimo I 
I WP
 b' &
/ %
4 .- E&,G&
c.T S&D,-cR&C.D- C (C .4\ O
 CT 4%I
Potenze possono essere scritte nella forma
 H (I )

) 
di un vettore ; si ottiene il vettore il vettore Bˆ ) ; l’esponente ) non deve essere necessa-
 " I B  I   TC& I
'

)  con )  :  2
! 
V 4*   W E riamente un numero naturale e può essere
I  anche negativo:
V % '4*
F" S( ," E&.(I/&N /   I I
W  H 4 VH ' 4

) B   WPb & /4%
 cT DcCDC C 4 V 4" W
X
 J

 / W ]C)
4  Y
D / ˆ E  S W
V %4*  )  TC&(I  Ec
H V 4" / ˆ  sE  W & /G\\/ 
W  H 4 VH 4  ' H (Idd2 F 
"
V 4" ˆ
X J /  2
WFE   -E    
"
V 4*   G
FONDAMENTI DI INFORMATICA a.a. 2004/05 Numero 2 8

Gli operatori %/% e %% Dimostrazione. Infatti il numero ; al • F • I–M%F • I–=M%Fbbb


punto (3) è il più piccolo numero che non
Per la divisione intera si usa l’operatore  , è stato eliminato da [ nel passaggio prece- (con M—@RA–I˜E ). Se la successione è fini-
per il resto nella divisione intera  . Prova- dente; esso non è quindi divisibile da nes- ta, chiamiamo il numero dei suoi elementi la
re   . sun numero primo tra = e ;jXE ed è per- sua lunghezza.
Purtroppo queste funzioni, come peraltro ciò primo, cosicché lo aggiungiamo ad Z . Soltanto nel 2004 Ben Green e Terence
in C, non sono programmate correttamen- Poi eliminiamo da [ tutti i multipli di ; . Tao hanno dimostrato uno dei più import-
te dal punto di vista matematico per il caso Dall’osservazione 8.2 segue che ci possiamo anti risultati della matematica, utilizzando
che il secondo argomento (il divisore) sia ne- fermare quando ;hgQS H . metodi difficili della teoria ergodica.
gativo. Correggeremo (nel prossimo nume- Essi hanno dimostrato che esistono succes-
ro) questo difetto con alcune funzioni appo- Possiamo trascrivere questo algoritmo di- sioni aritmetiche (finite) di lunghezza arbi-
site. Esempi: rettamente in una funzione in R: traria che consistono solo di primi. Quan-
to sia difficile la dimostrazione lo si può in-

    *U9/.,.$420/0/h k610$40>l tuire dal fatto che (secondo gli articoli di

  m 3 'nocpe6 1qrps 2tlr Green/Tao e di Pöppe riportati in bibliogra-
    $/0$/,. fia) la più lunga successione nota di questa
 m  3cu#v.w px0k$8.y5/,.zp
   ! forma ha soltanto 23 elementi; in R, se i nu-
6$ 1l6:{ meri non fossero troppo grandi, essa potreb-
3 3cu|3  $8 w}

 #"  $  be essere scritta nella forma
1~l6:{3}

%"&
 #"  $  2/t #  'vv.„Œ„&  „‡&~{#™/0š›$ '„~{
%' Per provare la funzione, anticipando, per 5     &„Œ ‡Œ  $
"   ("& ! ' ottenere un output tabellare, la funzione
-$,.$.
per la costruzione di matrici, usiamo
Possiamo invece verificare che la successione

   #"  

%"& $-. *c9/.,420/.$/~#'' D$Eœ$œIL=EžŸhBŸx\Ož~FbbbFœG
    )"   € .-$,..
l-{l5$4.‚ ƒ{l4‚ 

%"' $ €  consiste solo di primi nel modo seguente:
   %"& #"  "'
+*$,%%-$,./0-,.$1,2 3 2/t”v.‡‡~{5 'v. {#™/0$š› $v. $
+3$4./055$/76(/2048  :9 ottenendo l’output $:3
 v.‡‡  ‡  v.‡Œ'‡%v0 „‡(v.' ‡
' „  &…vv†v.„…v.&…v.‡  v0 ‡%v  ‡ v.Œ&‡' Œ‡
'„ˆ'‡‰„$vŠ„&ˆ $v‹ „ˆ &‰„
‡  v  &ˆ&v‹&„†&‡‰Œ„‰Œ‡ ¡  *c9/,.42./0$/~qv0    
Il crivello di Eratostene ‡&v0 vŽv0 „v0 &v0 ‡vv.„v.'&v.„v ‚ 3cu¢2 9/™/0-$/0:3{ ¡ .w
v„&v.„‡v0 ‡v.vŽv.&v  „v  &v.&„ $:‚
Definizione 8.1. Un numero naturale ; si v&‡v.Œ$vŽv.‡$vVv.‡„v.‡&v.‡‡Ž'vvV''„ +6-/.$1# $
chiama primo, se ;%<>= e se, per ?+@%A con
?B ; si ha ?C@%DEF); G .
Osservazione 8.2. H(@AJIK= sia un numero
naturale <L= fissato. M sia un altro numero v[v%%p ‘ 0] Assegnazione vettoriale
naturale con =NOMPNQH che non sia primo.
Allora esiste un primo ; con =LNR;QNTS H
Dobbiamo ancora analizzare questa miste- Le espressioni della forma 3cu,w possono es-
riosa espressione che abbiamo usato nel- sere anche usate per assegnare valori alla
tale che ;UB M . la funzione ’ $,.420$/0$/ . Intuitivamente è
In altre parole, se sappiamo che MVNWH , parte del vettore 3 descritta dall’espressione.
chiaro che dovrebbe rappresentare quegli Esempi:
per verificare che M sia primo, dobbiamo so- elementi del vettore 3 il cui resto modulo ; è
lo dimostrare che M non possiede divisori maggiore di zero. Ma come si inquadra nella 3 $v~nŒ
primi tra = e S H . sintassi che abbiamo visto finora?
Nota 8.3. Sia HX@YAIQ= un numero natu- La spiegazione è che in 3cu|3  $8 w viene 3cu1#„ {#~{#'.w 
prima calcolato il vettore interno che funge $:3
rale <R= fissato. Possiamo creare una lista
di tutti i primi con il seguente procedimento da filtro, cioè il vettore booleano 3  $8 che, %4066cn`v+   %  &Œ
che prende il nome di crivello di Eratostene; secondo il modo vettoriale delle operazioni
3cu#v~nl w 1#' {#„
di R, contiene il valore ƒ in ogni posizione
lo modifichiamo leggermente ai fini del pro- $:3
gramma in R con cui verrà realizzato. dove in 3 si trova un numero non divisibile %4066cns'%„'„  &Œ
per  , e nelle altre posizioni contiene il va- %£060¤7$0$/.$.¥$40$/+¤$+'~{#„:¢
(1) Definiamo due vettori variabili Z e [ e lore “ .
poniamo inizialmente All’inizio dell’algoritmo, quando 3 'no e 3cu"1)&~{#Œ0w 1 {)~{”v
 ' , 3  8 è uguale a 1 “ {ƒ:{ “ {ƒ{ “ {ƒ{999# , $:3
Z\^]_ nel passaggio successivo, in cui %4066cne ((v7 ((v&Œ
[`\^]=FaFbbbFHc_ 3 1#„~{)~{#&~{#‡ {”vvr{”v„~{”v.~{qv.&~{999#
3cu"1  {#&~{#Œ$0w 1)'~{ {#‡$
3  „8 è uguale a 
1  “ {ƒ{ƒ{ “ {ƒ{ƒ:{ “ {ƒ{$999# , $:3
(2) Calcoliamo la radice de\ S H . %4066cns' %‡'  v&Œ
(3) Poniamo ;C\Q[f . e cosı̀ via. *,%,.33/./0¥,c¢
(4) Se ;hgLd , andiamo alla fine (F).
In modo simile (anche questo esempio è im- 3cu1ƒ:{ “ 0w $1#~{#„$
(5) Aggiungiamo ; ad Z , ridefinendo portante nella teoria dei numeri), se 3  :n| , $:3
Z\^]ZiF);_ allora 3cu|3    $v0w consisterà di tutti i nume- %4066cns %„'%(v„Œ
intendendo con ciò che ; viene aggiunto ri naturali tra ed  con resto 1 modulo 4.
come ultimo elemento ad Z .
Nel penultimo esempio R ci avverte che la
(6) Eliminiamo da [ tutti i multipli di ;
lunghezza della parte dove vogliamo modifi-
(compreso ; stesso).
Il teorema di Green e Tao care i valori (in questo caso 5) non è un mul-
(7) Torniamo al punto (3). tiplo del vettore che contiene i nuovi valori
(F) A questo punto la concatenazione ]ZUF0[_ Una successione aritmetica è una successio- (in questo caso 3).
di Z e [ rappresenta la successione or- ne (finita o infinita) di numeri naturali della Sono operazioni piuttosto potenti.
dinata dei primi NLH . forma
FONDAMENTI DI INFORMATICA a.a. 2004/05 Numero 2 9

which .Last.value
7 : G.  5 27 
Se un vettore di valori booleani, con K   >  ! B L’ultimo valore calcolato sul terminale è

si ottengono gli indici delle posi- 
C D LE: u L * :H o ; usiamo una nostra funzione
zioni in cui ha il valore . Esempi: 
  2
L ( 2
L,. %  #    7  x 
*   5 M %0N@7 * =
L H  &_ yL?E: u L * :H o
  
  K   >  ! BCDJ BCDJ=EFD=EF D
 
 7
    "!$#&%')( :HH * 
K   >!
=EF D
7 : G. *  Conversione di tipo
*   +# -,. ( -/01,0 %  2-30-4 K   >!
 
*5 ,  BCD
Talvolta anche in R sono necessarie conver-
    "!
, ' 46 sioni di tipo. Queste possono essere effettua-
te mediante la funzione : u che si usa come
*  # # # % #
   2.  
*2.-2.#   -,0 -27 Il volume della sfera unitaria nei seguenti esempi:
 

  
    "!8% Il volume della palla unitaria in OQP è, come ;: u  i  o]o  i+
,)/6 si dimostra nei corsi di Analisi, uguale a 7
;7

,
Per trovare gli indici in cui i coefficienti di R PS
TVU 
un vettore numerico assumono il massimo P SXWZY[ ;: u  i  97o 7 i+
o il minimo si può procedere cosı̀: 7
;7

È chiaro che per ottenere il volume di una ,L # '7# 36,
*   60 % -,0-30140 #  %  # - 60 # palla di raggio \ bisogna moltiplicare que-
 
*  97:; *  
T
sta espressione con \P . La funzione è rea- ;: u  i  :  :   o  +i
    "!$# 7
;7
6 lizzata in R dalla funzione ]:997: . Possiamo hz z
 
*  9 
*   ,L #'7# 36 % /3,346 ( 6
    "! quindi scrivere il seguente programma:
/4 # 2
^7  7  `  ;: u i # ,30ii  o]o  il
a H&J_ % 9 

 # 7
;7
99 97b  #
,3
*  H  M 
9 97b]:997:  9 9c #
match  _ "d  # *  H *   H e 
M
9 v : u ,0i   9  Ho;i+
*  Hf 7
v
97: 7
;. * è la posizione della prima appa- 
,c2 
rizione di ; nel vettore * . Se ; non appare in
* , il risultato è <= oppure il valore impostato Con

mediante l’opzione  97: 7 .  g h#0!
Per il controllo del tipo si utilizza in modo
Se anche ; è un vettore, 97: 7 restituisce _ 9 / analogo la funzione u :
 :   9
iji ^7 H 9 i-k  il
il vettore dei risultati corrispondenti agli 7
1u ?  i  o]o  i+ 
elementi di ; . Esempi: 
otteniamo allora =EF D
*   +##  # %  # ,. #'  ##  #'  # 30 # 2
#j%
  % ,L # '7# 36,
 97: 7> +#'  * ' L # 44 ( 6
 ? )     > !@' , Un premio a John Chambers
 97: 7> -% 2. * 'm' L 6, ' 42 %
 ? )     > ! <= 3m3L % /, ( 46 Nel 1998 John Chambers, il principale idea-
/m3L # / ((# , tore di S, ha vinto il Software System Award
  
 97: 7> -% 2. *   7 9 : 7 2 della ACM (Association for Computing Ma-
 ? )   >  ! 2  
La funzione n>L * H 97o della nostra libreria chines) per la creazione di questo linguaggio
calcola invece il volume per la statistica che, secondo l’ACM, forever
  ”
 97: 7> 1 +# ,. 
# # A
* altered how people analyze, visualize, and
 ? )   >  ! , # R PS manipulate data ... S is an elegant, wide-
p TqU ly accepted, and enduring software system,
P P SXWZY[
with conceptual integrity, thanks to the in-
della palla iscritta al cubo unitario tramite sight, taste, and effort of John Chambers.“
any e all una formula di ricorsione (cfr. corso di Sta- S è stato sviluppato ai famosi Bell Labora-
tistica multivariata). tories ed è oggi commercializzato dalla ditta
Se * è un vettore di valori booleani (cioè Insightful (www.insightful.com). S has be-
uguali a BCD o =EF D ), : G. * è vero se e so- ”
come a kind of lingua franca of statistical
lo se almeno uno dei componenti di * è vero, computing ...“ (John Fox)
mentre :HH * è vero se e solo se tutti i com- head e tail
ponenti di * sono veri. Esempi:
I primi tre elementi del vettore * si ot-
*   
  tengono con  o:r * -, o più semplice-
Bibliografia
 :HH *  mente con *>s1#0! ,t , gli ultimi tre elementi
    "!
=EFD con *>s Ho  ] 
* I% ! Ho  ] 
* t oppure più 15609 J. Chambers: Programming with data.
 : G. *  semplicemente con  :  H * -, . A guide to the S language. Springer 1998.
    "!
BCD In particolare  :  H *  # è l’ultimo ele-
mento di * . 16699J. Fox: An R and S-Plus companion to
*   applied regression. Sage 2002.
Queste funzioni possono essere anche ap-
 :HH * 
    "! plicate a matrici e restituiscono in tal caso
BCD 17069B. Green/T. Tao: The primes contain
 : G. *  le prime risp. le ultime righe della matrice.
arbitrarily long arithmetic progressions.
    "!
=EFD Internet 2004, 50p.

  -I# 1,0-302 ' 17067 C. Pöppe: Arithmetische Primzahlfol-
  5 letters e LETTERS
 "7
2 gen beliebiger Länge.
   ! =EFD BCDJ BCD=EF D) BCD
  Ho  o 7u è il vettore che consiste delle lettere Spektrum der Wissenschaft 2005/4, 114-117.
:HH 5 27  minuscole : Iv , ED  DBF il vettore delle lette-
    "! P. Spector: An introduction to S and
=EFD
re maisucole = Iw .
17060
S-Plus. Wadsworth 1994.

Corso di laurea in matematica { Fondamenti di informatica |Z}~ Docente: Josef Eschgfäller


             
    

Corso di laurea in matematica Anno accademico 2004/05 Numero 3

Divisione con resto In questo numero

Definizione 10.1. Per un numero reale


  Possiamo porre . L’ultima parte `,R !D:

10 Divisione con resto
denotiamo con la sua parte intera, cioè segue dall’osservazione 10.3.

7h8;:&P= : i 
Output con cat e print
l’intero più vicino a sinistra di . Si ha sem-
Corollario 10.5. Siano con . Input dalla tastiera

 
pre
Allora nchar

  7STV0:XFE 11 L’opzione fill in cat

VP&TE ( HjE6Ak :lk V


con . è univocamente determi- Scrivere su un file con cat
nato e si chiama la parte frazionaria di . La funzione O.s
con e . Il quoziente ed
sprintf
 !"$#% '&)(
Naturalmente il resto possono essere ottenuti nel modo se-

V< @ 7: B E<T7m^PV2:
guente:

* +, - U Calcoliamo
:F>a EFA
ed . Input dalla tastiera

.0/213154
In R la funzione matematica è realiz-
zata dalla funzione che, come abbiamo
U Se
altro.
:GV[T  E)E L E,^J:
o

V
, non dobbiamo fare Per l’input di un testo terminato da invio

y
dalla tastiera si usa la funzione co-
yy 40y s3{tw2/0r]uls
già osservato a pagina 3, fornisce un risulta-
'6 U Se ed , allora sostituiamo me in

798;:<&= :<>6 ul‚t1{tvhstƒ3€t¤Z40¯0s2r3{3{tw21†/2… r]u¤3s†…ulƒ31 ¤Z¯2s†1 …2sz¤l±~vl¨;ufr ¤2‚]…?­Wrt—t{s œ €9r3°¤2¤žˆ¤žˆ


to corretto anche per . con ed con .
Lemma 10.2. Siano con .

7?A@ 7:CB :DFE


Allora Traduciamo l’algoritmo del corollario 10.5 in
tre funzioni in R che verranno incluse nella

nMo;p p p3y
Quando si impostano valori numerici, que-

GHE$: yy
sezione MA (aritmetica) della nostra libre-
ria. sti devono successivamente essere converti-

7: A @ 7I: B 6
con .

}‰tŠ{h|~w013r5q0rt€s;u2.vls ur]‚;u2vlv0rts5154luO1'ƒ„w0{†r …~‡-Š x'ˆ u st4lrz40s3{2/2r9| £3² €3€34040s3s3{t{tw2w2/0/0r]r]ululp3p3s†s†yy ƒ3ƒ3¤¢¤¢¬¬ œœ 1212—5—5v0v0{){ £² ¥¥ ¤ž¤žˆˆ
ti:
Dimostrazione.

JKLK 7M @ 7: B N: OD: n'r;.O–€t.0ƒ3/2ƒ‡l13t154h‘lˆ;ƒ„’2{2’9‹;‡Wƒ40ˆ-tŒ,‘42ˆ3p€0ˆ {3Š;‡€ Š3Ž “y2” p Œ Š2• y £3² €0€0{2{2——ƒZƒ £9² …2…2¤~¤~uu stst4l4lr3r3‚‚¤ž¤žˆˆ
PESR KTUD::): :'>Q ‚t{tvhƒ3¤Z£ “ ² – €H¤2…Z£ “ ² …2¤„¨;uf¤3…ž—ts œ €9¤2¤žˆ
con . Perciò con

}‰tŠ{h|~w0r;r50r3s5—340rt1;s2u—5v0s'1)s'€ 40.s2—5uv01‚;vl—3rtŠr15uO/5ƒ„v0{†{;…~u‡-s3ˆ { s;u0v0sh|


, perché . Possiamo porre

VW85: E
.

€t.0/213154hƒ„{2‹;‡Wˆ-Œ,42€0{3;‡Ž Œ ‡C|„—t{3/50{
nnr;‚.Oƒ ˜Š p3ƒ3…y4Wƒ‡lˆ t• ‘lˆ;’2’9ƒ40t‘ˆ3ˆ ‰tŠ € Š2“l” ŒS42€340;‡ •
Osservazione 10.3. ed siano numeri La funzione del programma che

V2:X6E,LYZV[3\]:UE_^P:
reali. Allora svilupperemo per la gestione di una banca

p
dati contiene istruzioni che richiedono una

798;:<&= :<6 u} {h|™40s2s0—5v0s5—;4lv01z1'rzul40€s3/2s2./3{3{'/2ur9w0‚;| vr;rtr31;u!—3rt1;ƒ„u{†s'…‡Ww0ˆ r – p p y


conferma da parte dell’utente con un mes-
Lemma 10.4. Siano con . saggio variabile:

7?A@ 7:CB :D6` ‰tŠ €t.0/213154hƒ„{2‹;‡Wˆ-Œ,42€0{3;‡Ž Š • ‡U|Z—t{3/5l{'€ . u‚;vlrt15uOƒ s2—2—t{t®3®0r31t€


‰ Ž2œŽ3¤³Ž 12r—t{3/50y{t40s /3{ v0{;‡ls3/2/3{2°6ƒ§—3‹;uWˆ ¥ ¤¢ˆ
Allora

r;.Oƒ3ƒ‡lt‘lˆ;’2’9ƒ40t‘ˆ3ˆ42€t405‡fŒS4
con
ESR T:J`da^J: `Fb `Fc . Se , allora, ponendo

‡ { ‡
40‰ s—t€t40s3{5s3v{tw0/2r]uls†ƒ s2—3—t{3®3®0rt10ˆ
r;r;.T.Tƒ§ƒ§—5—5€3€3€h€h¤§¤~uf—¤ž¤žˆˆ ‰‰ —5—5€t€t´h¶hŒ,Œ,‡0‡04040s3s3{5{5µµ ••2•
7?ae @ 7:fB H3gD:XFE
, abbiamo In tutti i casi e possono anche essere ne-

Ž3Ž2Ž •
gativi, ma deve essere diverso da zero.

GHE$: p
Riproviamo con l’esempio nella prima colon- –
nœ € } {h|w0pr;0s54ls2—;v01†ƒ„š3‘9…„3›lˆ
con .

‡C|„—t{3/50{9ƒžˆ
na a pagina 8:

7:  @ 7:CB 6
Dimostrazione. Abbiamo come prima Se si vuole utilizzare il messaggio preimpo-

4l3r]u2›'vfš ƒ ˆ
stato, è sufficiente il comando ;

–
per cambiare il messaggio la funzione viene
y p
JKLK 7M @ 7:CB :NOD:
usata come in
con
:_!U:<6 :<6
, perché
. Perciò
.
con
Infatti lmLYž^ Ÿ0\X¡WY¢^dŸl\IP .
‡U¤„|Z·3—t{3{3/5/5ll{5{†40ƒ ss2r¸—2—tu{t®315®0lr3r1t€ w2{5vlr3°ƒ§—t‹;uWˆ ¥ ¤žˆ
Output con cat e print

2n‚t€{5vh†” ƒ3¥„”¤¢‘¬5y/)0s5v2v01540sz­{†¤3…„/3s5yu0®tvt­fƒZˆ-…
nchar
œ 4r]u2v p y u ‚]­l{54fƒZ£lˆ
Il numero dei caratteri di una stringa £ lo si

y
In , come sappiamo, il secondo argo-

¬5¤„s3/)/2ls s5v3s;u2v0v154lr9sz|¨;­luf{ ¤¢ˆ ” ‘s3/3s s;u2vlr9| œn 4€tur]pu2‚]­lvhœ{5ƒ p4fˆƒ3¤¥S” ¹x3©3š2ª3›3« ¦2¹ ¤žˆ
ottiene con . Esempio:

œ 4r]u2vhƒ4l1 u0w9ƒ„£9…Zšlˆ3ˆ
mento può essere usato per indicare il nu-
mero di cifre significative. Talvolta si usa an-

1v v
che ad esempio .

‚t{5v
Piuttosto spesso è utile l’opzione in —ts œ €9¤3¤ — œ 4‚tr]{5u2v v3. œ {2—;v0s ‚3{5v
In casi più complicati si userà comun-

— œ 4lr]u2v2.
; naturalmente anche altri separatori que , eventualmente in combinazio-

n †” ¥¦ œ ne con o . riconosce, a differen-


¨;u Questa funzione può essere utilizzata an-

y ·5v0y {3©0—;v34
possono essere impiegati, come in

‚t{tvh” €3ƒ €2xt€3€0§… t©—t€3s €3š3€h€2¤Z€2€3ªt€9€3¤ž€2ˆ›3ŒS€3‚3€2{5«tvh€3€ ƒ3¦¤„¨5uf¤žˆ


za da , il carattere speciale . che in modo vettoriale, quindi nella funzio-
ne a pagina 11 abbiamo potuto uti-
lizzare l’istruzione

œ 4r]u2v ‚t{5v
Al terminale spesso è sufficiente battere il

Un tipico esempio dell’uso di ‚t{tv :


nome dell’oggetto che si vuole visualizzare e
non è necessario l’uso di o . € {t£9ƒ~uW‚]­l{54hƒž‚ƒZº9…»f…Z¯lˆ3ˆ3ˆ
FONDAMENTI DI INFORMATICA a.a. 2004/05 Numero 3 11

L’opzione fill in cat


   -#'1(N2#+jrW  "6js  1
Un’opzione talvolta utile in  è  con cui :; L-6gS1#"6%G #1$  
D    ;#5tun2;vtwn#8t5%!%SV$
si può impostare il numero di caratteri per ri-  
con output K   ;#5tun2;vtwn#8t5%SWN%SV$
ga (se gli oggetti da visualizzare sono elementi    SDx%QCD  E$
separati). Per stampare i primi
 , invece    KN%QCD  E$
di creare una matrice come a pagina 8 avrem- -dc'e1 p
(e2c+a3 t-#'1 (;2#+xtS1t
mo anche potuto usare le istruzioni p
/*-"h-#-,- ts"N"#"tu1yt
      !"#"$ -'*-1h-(4-2
 -+*-3.-/," Nonostante avessimo utilizzato la stessa
   &%##'#($ -i#*#',1 sigla di formato n2; per  e W , prevedendo
#()#2*#+,#3 lo spazio di 6 caratteri per ciascuna di esse,
ottenendo però un output meno soddisfacente: #/)'"4' -0'# l’allineamento non è più corretto, perché la
'#')'14'#(,'#2  impiega più dei 6 caratteri previsti.
)'*(,+.-#-)-'.-+*-/*#',#/,' -0'#+,1- '#+)'#3*'#/)1#" I formati più usati sono:
1')1+,(#',(#/,2 -)2#+)+ -)+#',+/)3#',3/
/#+4-"-,-"'*-"+.-"/*--'4-+*-' -*-'#+ n#8 intero
-'/*-1/.-( -)-(+4-2#'4-2#+4-+#'*-+#/   
:; L-6gS1#"6%G 2 $ n 8 D#W#
-3-)-/ -*-/#'*-/+4-/#/ 
n stringa
con output n#@ rappr. esadecimale

-dc'e1c(a2 Per specificare un segno di n nella sigla di


Scrivere su un file con cat 
+e3c/4-".-#-,- formato di     si usa n#n . Mancano alcu-
 -'*-1h-(4-24-+4-3
Con  è anche possibile scrivere su un file, ne possibilità previste nel C, in particolare
-/)"4 -0#,#',1
ad esempio 5!zN5 non viene riconosciuto come carattere
#()#2*#+,#3,#/,'"
' -i'#*'#','1*'#(,'#2 di invio.
 
 #5!# 5#%#65 57$ '#+)'#3*'#/)1#"
All’interno della specificazione di forma-
oppure, se il testo deve essere aggiunto alla to si possono usare U per l’allineamento a
   sinistra e " per indicare che al posto di
fine del file, :; L-6gS1#"6%G 2%QKD 65!U#U57$
uno spazio venga usato " come carattere di
 
 #5!# 5#%#65 5%! #  8#9$ con output riempimento negli allineamenti a destra.
Quest’ultima opzione viene usata spesso
-dc'e1c(a2 per rappresentare numeri in formato esa-
+e3c/4-".-#-,- decimale byte per byte. Vogliamo ad esem-
< €
La funzione O.s -'*-1h-(4-24-+4-3 pio scrivere la tripla di numeri {| }&~~
-/)"4 -0#,#',1 in forma esadecimale e byte per byte (cioè
 #()#2*#+,#3,#/,'"
Creiamo adesso una nostra funzione :; per riservando due caratteri per ciascuno dei
la stampa in forma matriciale di vettori anche ' -i'#*'#','1*'#(,'#2 tre numeri). Le rappresentazioni esadeci-
non numerici. Possono essere impostati il nu- '#+)'#3*'#/)1#"*U#U,U#U mali sono '# , W e 2 , quindi con
mero di colonne o il numero di righe e il sim-
bolo da usare per le posizioni mancanti nel-  (#3jsW -#-Hj 2
 
la matrice (le ultime posizioni in una matrice D    ;#5Qn @#n@n@65#%G%SWN%G $
<>=0? sprintf    SDx%QCD  E$
se il vettore da stampare ha meno di 24
elementi). Anche qui anticipiamo la funzione Per una formattazione ancora più preci-

  @ che verrà discussa nel prossimo nume- sa dell’output, soprattutto nel caso di ti- otteniamo '#‚Wh2 come output; per otte-
ro. Nell’ultima istruzione usiamo due ulteriori pi o formati misti, si può usare la fun- nere il formato desiderato '#"W " 2 (richie-
 
opzioni di   , da un lato ;   per im-  
zione    , che restituisce una stringa sto ad esempio dalle specifiche dei colori in
postare il simbolo con cui vengono stampati i formattata che può successivamente esse- HTML) dobbiamo usare invece
 
valori AB , dall’altro CD #E per togliere le vir- re stampata con    . Questa funzione è
 
golette nell’output. molto utile e imita la     del C, con  (#3jsW -#-Hj 2
 
qualche piccolo difetto. D    ;#5Qn"@#n#" @#n#"#@65#%!%WN%G$
        SDx%QCD  E$
:;
M  )D  F!%G -H%   IJ#AB6%K#D ;5#5L$ Consideriamo prima un esempio:
D# # I JNG $

FO   I6  IJ$#$
  3#jk@#  
 ;8 K;!D#N%  IJ $P
Vogliamo adesso stampare tre stringhe va-
 
  D    ;lHmSn'80n U#3;S1 oVl%SN%!@$
Q ;   !D#N%  IJ $R#"$
riabili su righe separate; per allinearle,
     SDN%QCD  EV$
#   IJ NS8 K;GD#N%G  $P p calcoliamo il massimo  delle loro lunghez-
Q ;  
  
!D#N%G  $R"$
mq3#*';!-1-2fo ze, usando la funzione J  :

&!%    AB;%  IJT# U#D#V$$   ƒ     

B#  @6!%SV  %SW X 
  Y
9V$ Il primo parametro di     è sempre M #' 0D#  F!B6%„;%Q…$
   QB;%S;     #KD  %QCD  E$Z una stringa. Questa può contenere delle @6J  G&QB6%Q„;%Q…$#$$
      
sigle di formato che iniziano con n e in-      ;#5Vtwn#n#n#8 t5#%SH$

M  Q@4.&QB6%Q„;%Q…$#$
   
#   ;  
Esempi: dicano la posizione e il formato per la vi-
%Q@$
sualizzazione degli argomenti aggiuntivi.    !6%QCD  E$ZZ
     Nell’esempio n'8 tiene il posto per il valo-
 !'"#"$
   IJ36%KD  65GT&57$
:;   &% re della variabile  che verrà visualizzata Con
come intero su uno spazio di tre caratteri,
ƒ      
con output mentre nU#3;S1# indica una variabile di tipo #' #5E     5%#5† 5#%#5† KI 5L$

8 D#W# che è visualizzata su uno spazio di 8
caratteri, arrotondata a 4 cifre dopo il pun- si ottiene l’output desiderato:
' ( + -#-[-' -+\-/
#'\#/[' -]'#+]1-^1'[1+](' to decimale, e allineata a sinistra a causa
(#/\2 -_2#+\+ -_+#'[+#/\3#']3/ del U (altrimenti l’allineamente avviene a tE  #   xt

/#+`-"-a-"'`-"+b-"/c--'b-#+c-'- destra). Quando i valori superano lo spazio t‡† t
 
-'+c-'#/b-1/`-( -a-(#+c-2#'b-2#+c-+' indicato dalla sigla di formato, viene visua- tˆ† KI t
-+/c-3 -a-/ -c-/#'b-/#+c-/#/a-#-d#' lizzato lo stesso il numero completo, ren-
 
#+e##/a#'#'c#'#/a1-d( -f(#+e#2' dendo però imperfetta l’intabulazione che Anche    può essere usata in modo
#2/e#+ -f#+#+c#3 -f#3#'e/#' T T avevamo in mente. Esempio: vettoriale, raramente necessario.

Corso di laurea in matematica ‰ Fondamenti di informatica ŠŒ‹Ž Docente: Josef Eschgfäller


             
    

Corso di laurea in matematica Anno accademico 2004/05 Numero 4

Matrici In questo numero

do  
Matrici possono essere definite con il coman-
. I componenti di una matrice pos-
Definiamo una nostra funzione per la crea-
zione di una matrice, in cui è preimpostato
12 Matrici


Il prodotto di Kronecker
sono essere numeri reali o complessi, strin- il riempimento riga per riga:

 R ) ?
Operazioni matriciali

 I#QS1T#% ) <WX&<Y/,>U, !"% #&#\1,,6[ ?/,( VWXY/, #Z(


ghe oppure avere il valore .
ha come argomento obbligatorio un 13 Indici matriciali

 
vettore di dati; inoltre si possono indicare dimnames
con il numero delle righe o con il length, dim, ncol ed nrow

!" #$ 
numero delle righe. La matrice viene riem-
pita colonna per colonna, se non si indica
. Se è una matrice, con si ot- &%'( Scegliendo l’opzione anche con la no- ? #$ 14
head e tail per matrici
drop
rbind e cbind
stra funzione la matrice viene riempita co-

œ˜ ™›š
tiene il vettore dei suoi elementi, elencati co- lonna per colonna. outer

) #&%+*-,')./,'01,321,'4/,65/,'7/,'81,'9/,:*<;=,:**-,:*.( 
lonna per colonna. Esempi: Una matrice è direttamente convertibile Il gruppo simmetrico
Il gruppo diedrale

?# @=%'1(-%A ?@&,>=%6&%'#0(((


in un vettore mediante l’operatore , come
abbiamo visto prima, ma anche in ogni con- 15 La classe array
testo in cui R si aspetta un vettore. Quindi è row e col
corretta la sequenza

?# R@ ]]%+*/%3^'*( ./,:#0(


upper.tri e lower.tri
con output semplificato diag

*B2C 7D**<;*
Prodotto scalare e lunghezza

.0E
E 4E D
8
5E9D*. ? @]%6&%3(( 16
det (determinante) e traccia
Sistemi lineari con R

?_ # R@ ]]%'1% _ ,6( #21, ? #$(


Autovalori
*F.G0H2I4H5J7G8J9G*<;K**J*. I cerchi di Gershgorin

?# @=%'1(-%A ) ?@&,>=%6&%'#0/(( , !" #$(


e invece, con gli stessi dati, con output semplificato Operazioni matriciali

N *`.M
27O 4M 05 Abbiamo due operazioni di moltiplicazione

*<;D*8M *C*9.
per matrici: da un lato il prodotto elemen-

b }
to per elemento (prodotto di Hadamard),
con output dall’altro la moltiplicazione matriciale.

*L.M
49D
N M*0L
5*<;P 7O 28 *F2J7a*<;G.G4H8I**H0H5J9a*. e siano due matrici con le appropria-

b
te dimensioni (cioè stesso numero di righe e

* *. .E *B2CE
4 D
8 7D**<;* }
stesso numero di colonne per il prodotto di

*F4G9J.G5G*<;G0G7G**Q2G8I*. 0E5E9D*.
Hadamard, numero di colonne di ugua-

~ cUb|£¤} Ÿ¢¡
ž  
le al numero di righe di per il prodotto

ž
matriciale). I coefficienti del prodotto di

›ž Ÿ¢¡ Uc b Ÿ¢¡ } Ÿ¢¡


Hadamard sono definiti da

¥ ~ cUb‡c§} ¦©¨Ib ¥ Ÿ¢¨ ¡ } ¨


Il prodotto di Kronecker
i coefficienti del prodotto matriciale

rs rs
bdcfegghji&k<kLlllmi/k:n t s u egghwvk<kxlllqvk+y t s
Il prodotto tensoriale o di Kronecker di due matrici da

. . . .
¥ Ÿ¢¡ Ÿ ¡ .
. . B= . . è la matrice
. . . .

} ipo n } r ss v<z k lllqv<z y


Possiamo naturalmente anche formare la

ipo k lllq somma di due matrici della stessa forma

b|{|}~ c egghji k@k lll€i k+n t


e moltiplicare una matrice con un numero

 bKª«} Ÿ>¡ cUb Ÿ¢¡ ª|} Ÿ¢¡


reale o complesso:

} }
. .
. .

>¬ b ’ Ÿ¢¡ c ¬ b Ÿ¢¡


. .

i o k lllqi o n r sss ’
eggg i k<k v k<k llli k<k v k@y lll€i k:n v k<k llli k+n v k+y sss
c gggg i&k<kv z kLlll€i&k<kv z yOlll€i&k:n‚v z kLlll€i&k+nƒv z y sssss
. . . . In R le operazioni matriciali corrispondono
. . . .

 ­®_
. . . . ai seguenti comandi:

ggg lll ... addizione

gh i o kvk<kxlll„i o kvk@y…llllllqi o n‚vk<kxlll„i o ln†lvl k@y t ¯® _®¯ _


... moltiplicazione di una
. . . . matrice con un numero

²b ± ²b ´ b|£³b
. . . . ... prodotto di Hadamard
. . . .

b‡} ipo k v<z k lllqipo k ˆ\v<z ‰ƒy ŠJ‹QllŒ lqipo n v<z k lllqipo n v@z y <Y<Y=%31, _ ( TY =p°<%'. ( ... prodotto matriciale

<µµ ?  ) %31, _ ( b‡´<}


... non , ma !

<YŽ< Y]%31, _ ,3S( Ž Y<Y


è quindi una matrice . In R essa corresponde a . Come in ... trasposta di A

¯®¯ !
(pagina 14), anche in invece del prodotto si possono usare altre funzioni, con ...
si ottiene la matrice
Ž Ž r sss !
eggg i&k<kp‘<vk@k’“lll i/k@k‘<vk+y’xlll i/k:n”‘<vk<k’xlll i&k+nF‘<vk@y’ sss
L’espressione denota anche il prodot-
to di una matrice con un vettore , in ac-

ggg Ž Ž Ž Ž s


. . . .

ggg Ž i k<k ‘v@z k ’“lll Ž\ i k<k ‘<v<z y ’xlll Ž\ i k:n ‘<v<z k ’“lll Ž i k+n ‘<v<z y ’ ssss
. . . . cordo con la notazione matematica; confon-

¯®¯
. . . .
de invece probabilmente che si possa usare
l’operatore anche per il prodotto scalare

ggh i-o lk l‘l v k<k ’•lll ipo k ‘<v k+y ’–llllll ipo n ‘<v k<k ’–lll ipo ln ll‘<v k+y ’ t
di vettori.

Ž Ž Ž Ž


. . . .
. . . .
. . . .

i o k‘<v z k’•lll i o k‘v z y’—lll i o n”‘<v z k’—lll i o n˜‘<v z y’


FONDAMENTI DI INFORMATICA a.a. 2004/05 Numero 4 13

Indici matriciali Se usiamo un filtro, otteniamo il vettore dei length, dim, ncol ed nrow
A#03. $ / 1
coefficienti della matrice che soddisfano il
Il coefficiente nella -esima riga e  -esima criterio espresso dal filtro, elencati colonna è la lunghezza di un vettore (pagi-
colonna di una matrice  viene denotato con per colonna: na 7) o di una matrice. Nel caso di una ma-

. trice questa viene considerata come vettore,
Anche qui possiamo però usare espres- @
A $ -B'%''C'C'#%'%) la lunghezza è quindi uguale ad []\ , se la
sioni più complesse, cosicché ad esempio 2 )- 43 $ @
A $ -)B matrice possiede [ righe ed \ colonne.
con       otteniamo la matri- ! 4, 1
ce 2x3 che consiste dei coefficienti nella pri- < %' @ 'A $ -B
è allora il vettore ^[`_4\Ga .
2 -)43 $ < 
ma e terza riga e nella seconda, quarta e 3Z
B'A 1 restituisce il numero delle colonne,
sesta colonna di  . 3-Bb? 1 il numero delle righe di  .
Se  e  sono vettori di indici, allora  con output po’ a sorpresa, se  è un vettore,
è la matrice che consiste delle righe di  con ! 4,Un
 1 , 31 'B'A 1 e 3#-)Bb? 1 sono tutti e tre
indici da  , mentre  consiste delle co- >D>E=F>D>F> uguali a c
de'e ; ciò mostra che in R un vettore
lonne con indici da  .  è invece la ma- =D>E>F>D=F> non viene automaticamente considerato co-
trice da cui abbiamo tolto le righe con indici >D>E=F>D>F> me una matrice (a una riga o una colonna).
da  . Anche vettori booleani di indici posso- =D>E>F>D=F>
no essere usati per matrici. Esempi:
) G) E
F'E#7E#7 #%) (H
!#"
$ %  & ' (  (# (') (*# '%
+
, ?
B'A'%) '
2 )- 43 $  ! 03 $ ' " A ?)#
f >#'eUg
'%'+
, !#"
$ -)
./)0
%'1
Anche indici matriciali possono essere usati
2 -143 $ 1 per assegnare valori a parti di una matrice:
< %
+
, ?-).
/)0
%) '
  '%)  H (H' 2 )- 43 $  ! 03 $ ' " A ? < #
2 -)43 $ ) f >#'eUg
con output

'%)  I (I
)
' 5 6   78
 2 -)43 $ )
 9'5'8
8'7:#
 9'5'8
8'7:# con output head e tail per matrici
) ;#:#5'5#79
Le prime tre righe di una matrice  si otten-
H) ;H'8H'5H
8H'78H' gono con /)0
"
!  oppure con  ( , le
e, continuando con la stessa matrice  , ) ;'8'5
8'78' $"
ultime tre righe con
A  opppure con
) ;'8'5
8'78'  *3#-B
b? )#(h3#-)Bb? ) . Cfr. pagina 9.
< %#    1 J#5#:'5#75#
2 1- 43 $ < 
H) ;I :H'5H
8H'78H'
) ;I'8'5
8'78'
con output ) ;I'8'5
8'78' drop
1 ;I
8#:'5#75#
' 5 6   78
 Quando scegliamo solo una riga o una colon-
 9'5'8
8'7:# na di una matrice, queste vengono automa-
ticamente convertite in un vettore. Talvolta
< %#  7 dimnames però si vorrebbe poter considerare quella ri-
2 1- 43 $ <  ! " ga o colonna come matrice; per fare ciò biso-
!
gna aggiungere l’opzione -B 2 %
> all’indice.
La funzione 4,'3 ,)0#K è utile per la visualiz-
zazione di tabelle; altrimenti nella riga dei Esempio:
con output titoli e nella colonna dei nomi delle righe
apparirebbero solo gli indici. Infatti con
!#"$ %)   ' (  (
) (
)
 6 7
'5'7 " %
+
,   '
#I
L'L'L#L 7'I#M'7'I'L '%
+
, !#"$ -)./)0'%#
2 -)43 $ )
'5'7 ) ' I'H
L'L)
B'A
% 2 %'=1
#:#7 2 -)43 $ "  "$ 'i''''#''''#''''#''''#''''j3i
< %#  =>1 #%' 
otteniamo l’output 2 )- 43 $ 1
2 1- 43 $ <  " $ ' i''''#''''#''''#''''#''''j3i

  N


  O#
#IF#7'I
L #%' ' ! -B 2 %
>#
con output
 F
L#L'L'LP1 ' 2 -)43 $ 1
 Q
7'I'MFI#H
L'L
' 5 6   78

 9'5'8
8'7:# con output, stavolta completo, cosı̀ come ap-
che diventa più leggibile se aggiungiamo i pare sullo schermo,
significati dei numeri:
< %#  =>1  =?>1
2 1- 43 $ <  " %
+
,   '
#I
L'L'L#L 7'I#M'7'I'L   k

k
N'
2   ' 8 6  
! 4,')3 '" ,1I'0#H
KL' L)" %#A#
B''KA
$%   4 R&%''=1- " S " K "  
! T 1R   8 :'5'8

 8 :'5'8

R+B3).#B'A# " R14R4U)"S 0
V " R

con output
''''#''''#''''#''''#'''
 4RK 2)WX ,)YZR14R W L'L#LZR'   l # E m
m 
' 5 6 7 2 -)43 $ "  ''''#''''#''''#''''#'''
 9'5'7
  k

k
N'
con output   ' 8 6  
< #% #  7
2 -143 $ <  4K  2)WX ,Y "S W  L'L'L
' - "S " K" "  !T
Talvolta un’operazione matriciale restituisce
''#I '7'I
L un singolo numero considerato però come
con output +)B3.#B'A"
 L'L#L'L ) ' matrice npoqn ; in tal caso mediante la fun-
U
0
V  7#I'M I'H
L'L !
zione -B 2 possiamo ottenere il numero cor-
' 5 6   rispondente. Ciò avviene per CrC e -BK'K 2 -B
!
 9'5'8
 Si noti che nella lista vengono prima indica- quando entrambi gli argomenti sono vettori;
 9'5'8
 ti i nomi delle righe, poi quelli delle colonne. T " "
cfr. la funzione +' K' A -0 a pagina 15.
) ;#:#5'
FONDAMENTI DI INFORMATICA a.a. 2004/05 Numero 4 14

Y
rbind e cbind Per vedere tutti i risultati che otteniamo in AŠ 5—5AŠ;˜ ] ™8 5AŠ ; ˜ ^ ™85AŠ;˜ _™š;
 questo modo definiamo la tabella di molti- Y Y
Possiamo unire più righe con e più co- 5AE˜ Š˜ ] ™ ™8"AE˜ Š˜ ^ ™ ™8AE˜ Š˜ _ ™ ™š; A<˜ Š™
  plicazione (in questo caso la tabella delle
V
lonne con  ; le righe o colonne posso- somme modulo ) con le seguenti istruzio-
no essere date singolarmente o anche come ni in R: Quindi ad esempio
matrici. Esempi: Y
m ' M  no R N    M  PQpPqQ"r r n 5]8"_8^; 5_>8 ] 8^; 5]8_8^; ˜ _8]8^ ™

  * s Y

  
    P 
"m *
t
 M"$N  * 5^8]8_;
"!#$ !# $ !#$ m ' M  n
'
"' * m 
O *P

P   m 
% & ' 
  ()*    t#$t#$
 
  +   
"* 
 E infatti
+   %  ‰Ÿ œ 7   œ ž 7ŸOœ ‰   œ "ž
, & '
 
  ()* 
   ]›  _ › ^
+   ,  con output ‰œ 7 œ ž 7 Ÿ œ ‰   œ "ž
-    % , ^ › Ÿ  ]› O ]
    ‰œ 7 œ ž 7œ ‰ œ "ž
+   -  tuovw!x$ _ › Ÿ  ^ › ŸO  _
tvtuovw!x$
con output
vyxx!v$ot Per ottenere la tripla di indici che descrive
vww!u$wtu un elemento di ˆ#‰ anticipiamo di nuovo la

*
vo!v$xtzy funzione + m :
./ !v!x$wt{ow
0. $v$otzwxo! + M  M  M  R N    M  R# ( 
0. +
m * R<• (– Ž M 
+ m * O¡¡ 
"! $ Nello stesso modo possiamo definire un pro-
 !1$ dotto modulo 6, ponendo Adesso possiamo creare la tabella di molti-
 !1$ d}| e W Y 5 d e;[i@jk
V plicazione di ˆ<‰ nel modo seguente:

./ "! $ In R allora usiamo la funzione + M  M  M  R N    M  R# ( 


0.1 !1$ +
m * R<• ( – Ž M 
+ m * O¡¡ 
0.1 !1$ + ' M  no R N     M  POQ~PQ"r r n
¢v£ ( M o* *"'*" yx£
'  O¤
- al posto di m M . Otteniamo per questa ope- 1
e, continuando con la stessa matrice ,  —>Ž
  >
razione la tabella di moltiplicazione
2   -
+   2 
  33$44$   —>Ž
tuovw!x$   Ž—
tvtwtxtvtxtwt    Ž—
otuovw!x$   >
con output xtxw!vtvo! £  & ' 
xtxwtuwtx   Ž    Ž  Ž  >
./ "! $ !vtw!vxtx!x  M 
0.1 !1$ $xtx$w!uxv
0.1 !1$ %  & ' M  n  ()*  n
303.313 !13$ ¢w&
 t Ž *wn n  M x N  
Nel corso di Algebra si dimostra che  P  t#¤
404.414 !14$ SUTV SUTV |
5 8c€; è un gruppo abeliano, 5 8 ; è MR ‚ w  n R M ‚¥   n 
un semigruppo commutativo con unità e %  – + M  M  M £  – £ –
• ¥  O•   #•¥ 
che le due operazioni sono legate dalla legge
 M '  % –x¢[¦¦
outer distributiva •>
Y d}|~ M§ 
'* m  %    M 
"'* m  %   M ' 
Questa funzione crea da due successioni fi- 5 d c~e"; |f 5 ; c‚5e |~ ;
E
nite 56#7899 986:<; e 5=>7899 98= ?@; e una fun- SUTV +   %  s N M *  ¨ 
La tripla 5 8ƒ c 8 | ; è quindi un anello
zione A la matrice
commutativo con unità. Se guardiamo bene
BC JK
C AE56#78=>7;F99 9GAE56#78= ?@; K la seconda tabella, vediamo però che con output
Y„\
D
.
.
.
. L ^ | _  wzw oy
. .
AE56 : 8= 7 ;H99 9IAE56 : 8= ? ; \  u wzw oy
benché ^ e _ siano diversi da . Questo anel- xvvyu w
In R a ciò corrisponde l’espressione
lo possiede perciò divisori di zero. u wzw oy
M"N * OPQOR  . o ywv x v
o ywv x v
Quando l’argomento R manca, viene usa- xvvyu w
*
ta la moltiplicazione. Quindi M"N OPOQ è la Il gruppo simmetrico …‡†
matrice *
CB
C 6 7 = 7
J K
K Non è difficile imitare la funzione MN
999G6 7 = ?
. .
in situazioni più generali di quanto questa Il gruppo diedrale ©«ª
funzione preveda. Vogliamo ad esempio cal-
D .
.
.
. L
colare la tavola di moltiplicazione del grup- Il gruppo delle simmetrie di un poligono pia-
6 : = 7 999I6 : = ? Z
po ˆ#‰ delle permutazioni di ]8^8_b . Ogni no regolare con l­¬®_ vertici possiede ^l
M"N *
può essere usata in molti modi, non elemento Š{‹„ˆ ‰ può essere rappresentato elementi ed è detto gruppo diedrale di ordi-
nella forma ne ^l e denotato con ¯ƒ": (da alcuni autori
solo per impostare la matrice dei valori Y
Y anche con ¯ : ). Convincersi che ¯ƒ°²± ˆ ‰ .
per curve di livello, ma ad esempio anche Š 5Œ8Ž8 ; ¯²³ è il gruppo delle simmetrie del qua-
per creare la tabella di moltiplicazione per
WY WY WY drato; ogni simmetria trasforma i vertici in
un’operazione binaria. con Œ Š5] ; , 
Š5^; ,  Š5_; . Non
vertici e induce quindi una permutazione dei
Consideriamo l’insieme scambiare questa notazione con quella per
vertici che a sua volta determina la simme-
SUTVXW Y[Z \ il ciclo 5Œ„; che scriviamo senza virgo-
8]8^8_8`8"a b tria. Fare un disegno e convincersi che ¯@³
le tra gli elementi. Se A è un’altro elemento
V Y’‘ “ consiste esattamente dei seguenti elementi:
con l’addizione modulo ; ciò significa che di ˆ<‰ , la composizione AŠ AE5”Š56;; in R
(– ¢ M 
´ M  
può essere scritta semplicemente come RE•  !u !y¢!o
 ! * 
introduciamo per gli elementi di questo in-
 M  y
( x
mm 
sieme un’operazione c definita da per il modo in cui sono utilizzati gli indici "! x!  ¢  R * mm  M  y
*x
( M 
 
d cfe W Y V "! v"! R mm
5 dhg e;[i@jk
vettoriali. Infatti, assimilando la notazione
matematica a quella che usiamo in R, ab-
V
dove l[i@jk è il resto di l modulo 6. biamo Trovare la tavola di moltiplicazione.
FONDAMENTI DI INFORMATICA a.a. 2004/05 Numero 4 15

La classe array upper.tri e lower.tri O


J!2
M  -')2
R prevede anche oggetti lineari a più di 2 Sia 2 una matrice 3V4W3 . Allora con
dimensioni (analoghi ai tensori dell’algebra XMMY 
 Z.) 2 si ottiene la matrice booleana
con output
multilineare della matematica) che possono
[]\^\_\
essere creati con la funzione  : O
[][^\_\ SfSgS
O
[][^[_\ S SgS
 
    O
[][^[_[ SeS S
O
S e SfS
La struttura di un tale oggetto può essere \
anche definita in un secondo tempo: con XM'MY Z.)' 2!J  anche gli elemen-
Se o è una matrice k_4Vk , la matrice oqp_r,s
ti nella diagonale principale vengono posti
\ può essere ottenuta con 2't*u+J!.-a :

 uguali a :
   \]\^\_\ 2L
I
+( /1
b
[]\^\_\ 2'tu+J 
Naturalmente adesso possiamo ottenere [][^\_\ M   -')2
[][^[_\ M -') b 
l’elemento con gli indici  !#" con $% "'& .
Le istruzioni
con output
In modo analogo opera 1/0 Y `Z.) . Esempio:


 !(
vwx
2'L# Y+M S!
+(aI/1 O
(wPTQ
R
sono equivalenti ad )'+*!
, !.-/0' . b
+Sy

f
+
 XMMY Z.),2
+y
+y

O

+(
b b \
$   & 
(
M  b tTwx
 -')   O
row e col wPTQ
R

+SxQz
+
O
Sorprendentemente utili sono le funzioni con output
+y
+y

+
/0 e /1 (da non confondere con -'/0 e
-/1 ). Se 2 è una matrice 35476 , queste fun- Sc
de
O
zioni hanno i valori SfSe
89 ;<;<; >? SfSgSh( Prodotto scalare e lunghezza
9 ? SfSgSfS
=<=<= Nel prodotto scalare usiamo la funzione
/02 = :
6<6<6 @ Si noti che anche qui la matrice viene riem- +/ii M / di R che calcola il prodotto o|{}
3<3<3 pita colonna per colonna. per matrici; evitiamo la possibile, ma un po’
89 ;A= > ? infelice abbreviazione ~u+~ a cui abbiamo
9 6 ? accennato a pagina 12.
;A= ; ;
6 / M trasforma una matrice 4 in uno
/1!2 = : ;A=
6 @ diag scalare, come sappiamo dalla pagina 13.
;A=
6
La funzione J restituisce risultati diver- L‚ N %Z i1 Y ^€ X -a)/+-.a
Adesso si a seconda degli argomenti che vengono M /ii M 
/ !#aaƒ„/ M  M +…
usati.
2 $#/0 2+B/1!2& L N Z 1 X -]^€ X -)/-†*
1. Se 2 è una matrice, J!2 è il vetto- i+‡) L N Z%i1 Y *!*'
re degli elementi diagonali di 2 . Possiamo
è il vettore
quindi con i X J!2 ottenere (nel caso
CDEFCGEFCH'EFCGD FCHD FCHG che 2 sia quadratica) la traccia di 2 , come
faremo più avanti su questa stessa pagina. det (determinante) e traccia
che consiste degli elementi in cui l’indice di =
riga è maggiore dell’indice di colonna. Con 2. Se N è un vettore di lunghezza j ,  Y ) 2 è il determinante della matrice 2 .
J! N  è una matrice diagonale con diago- Per la traccia sembra che non ci sia una
2 $I/12/0 2& nale N . apposita funzione che però possiamo facil-
; mente definire:
3. Se - è un numero naturale j , allora
otteniamo gli elementi della diagonale di 2 J!.-a è la matrice identica kl4mk .
(più semplicemente però con J!2 ), con L‚ `Z.)^^€ X -a)/+-2
Per alcune variazioni meno importanti con- €†%1 Y -J)ˆ2+B
7i X J!2
Y 1i Y  2+…
2 $#/0 2/'12K
& sultare nJ .

J può essere anche usata alla sinistra Esempio: Con


gli elementi che si trovano una posizione
di un’assegnazione:
più in basso della diagonale: O O R O
2L   P!
%Q! 
, #! S!Q aI/1 
2'L# Y+M S!
+(aI/1 M  -')2
2L

+(I/'1
M  -') 2 O
J!2 !! %Q M -') Y ) 2
M  -') 2 M -')#L`Z.)'2
N '
 2 $./02/12K
&
M -')  N 
con output otteniamo
con output O
eSgSfS Pz
df
O
SfgSfS  QgPf(

   O O
O SfS S hgz

( P Q SfSgShQ
R eegh

S

T
+ R
O y
‰SeQ

+ 


+(
oppure R
O O ( (

+SU

(
2'L# Y+M  S!
+(aI/1
FONDAMENTI DI INFORMATICA a.a. 2004/05 Numero 4 16

Sistemi lineari con R Autovalori 7,*3 - 7*2 3 -


?l`
trovando per la prima matrice e
R permette, per matrici che devono essere
on e
Situazione 16.1. sia un campo ed m per la seconda; quest’ultima è reale e
simmetrica e possiede quindi solo autovalori
quadratiche e invertibili, la risoluzione di m pp una matrice quadratica. reali.
un sistema lineare
 Teorema 16.2. Consideriamo l’applica-
zione
q r ft e
m p u mep I cerchi di Gershgorin
mediante l’istruzione
s Se
 
  Per una matrice reale o complessa
Allora i seguenti enunciati sono equivalenti:
 Œ‰‘ 
Proviamo prima con il sistema
(1) q non è biiettiva. ’”“ 
  ! #" (2) q non è suriettiva.
!$&% ! #' q definiamo i cerchi
(3)
(4) v wx YYN
non è iniettiva.
.
•– t ˜— ]…ne™›šš ][ ‘ šœ˜š  š 
*( ),+ -  ./102 35467  •Mž t ˜— ]…ne™›šš ][ “ /š œoš ’ š 
  8,9: (*),+ - <; -,=> ,*3  È chiaro che la condizione (3) si verifica se ezY
y N
* ./?@  YN
solo se esiste un vettore in tale che mlp   
 
,  A<B . similmente per una matrice
C*; -ED*+ AB ‘ –E– ‘ –až ‘ –a¢
Dimostrazione. Corsi di Geometria.  ¡Ÿ ‘ ž– ‘ žEž ‘ žE¢
L’output è 3:F<G,HIHJF<0 @ , in accordo con quanto
{n mlp ‘ ¢– ‘ ¢Ež ‘ ¢E¢ £¤
Definizione 16.3. Un vettore si
|}y N
~ n m   ~ 
si trova con la regola di Cramer, infatti chiama un autovettore di , se e se
KK "LM KK
~‚*ƒ YN
esiste un elemento tale che . poniamo
K KK € •– t #— ]ne™›šš ][ ‘ E– – š œ˜š ‘ 5– ž ,š $š ‘ a– ¢ š 
 K '  N % PO "M $RN Q N  '  N"
Ciò accade se e solo se .
= 2.9 Denotiamo qui, come altre volte, con la ‚ •Mž t #— ]ne™›šš ][ ‘ žEž š œ˜š ‘ ž,– ,š $š ‘ žE¢ š 
matrice identica.
KK  " KK • ¢ t #— ]ne™›šš ][ ‘ ¢E¢ š œ˜š ‘ ¢,– ,š $š ‘ ¢Ež š 
K ' KK ~ n m
  K QT  *Q 'U  V "  W YNZ  ' Definizione 16.4. Un elemento si
S  N N X  N „n mep Y
y N … ~ 
chiama un autovalore di , se esiste un vet-
tore con e .
In tal caso diciamo anche che è un auto-
 Questi cerchi, che si definiscono in modo
analogo per le dimensioni superiori, si chia-
Proviamo con il sistema vettore di per l’autovalore e che è un ~  ~ mano i cerchi di Gershgorin di .
[ $& \V]UYQ N autovalore di per l’autovettore . I centri dei cerchi di Gershgorin sono
O ^ U$& ]UR% ~ n m ~
gli elementi nella diagonale principale del-
!$&\_Q O ]UR Osservazione 16.5. Sia
un autovalore di se e solo se
. Allora è la matrice; se la matrice è reale o se almeno
gli elementi nella diagonale sono tutti reali, i
*( ),+ -  ./1032 46A`2*G3a4/a462 4`  vwx,€  ~‚ ƒ YN .
centri dei cerchi di Gershgorin si troveranno
  8,9: (*),+ - <; -,=> ,*0  quindi sull’asse reale.
* ./a4bH173 
 
,  A<B Teorema 16.6 di Gershgorin. Gli autova-
C*; -ED*+ <; bc D ( A`  
In R gli autovalori di una matrice reale o
complessa si trovano con la funzione .  - =  D lori di sono tutti contenuti nell’unione dei
suoi cerchi di Gershgorin.
Essa calcola, se non si pone l’opzione
La risposta è D ,i:F† ) bc *
,,‡ Dimostrazione. Corsi di Analisi numerica.
3dF<G*0,H*@eH:FA7 7 4 4fHJF4 40 g Non difficile.
anche un sistema di autovettori; ciò può ral-
Se vogliamo le soluzioni come numeri razio- lentare il calcolo per matrici molto grandi.
Definiamo una funzione che restituisce il
-
nali, nell’ultima riga del programma possia- Il risultato è una lista in R, un concetto che
centro e il raggio dell’ -esimo cerchio di
Gershgorin della matrice : 
ˆ  ) b c *
ˆ  *. + ;

tratteremo fra poco, e le componenti si ot-


8,9‰F = ,;
> = ,; -ED eh c D . + - D A - 
mo usare
C*; -bD*+ <h ; ) . + - D
/A * tengono con la sintassi e
Creiamo due funzioni per la nostra libreria:
.
Š ., D*+ ; , :¥ -  -¦
) +- D
; ),= = - ,
Ec 9J ) B
/:¥ -  ¦  2 ) 
/1., D + ; 
La funzione h ; . richiede però la lib- 8 9‰F ) c +  ) ,; - lh,c D . + - D A   ./1., D + ; <; ),= = - ‹
reria MASS, che dobbiamo caricare con Š  -=  D A D ,i:F† ) bc *
 ‡B ˆ  ) b c *

-  ; ) ;*iA8**j j  8 9‰F ) c +   + + ; - lh c D . + - D A   Calcolare i cerchi di Gershgorin di
Š  -=  D A  ˆ  *. + ;B
,‹ Q Q 
Otteniamo allora l’output
 §Ÿ§¡ L O Q O'¨MN  £ ©
40 G*3 k,`*g @I0 4b`*k,` g @l@,`*k `*g @  
Calcoliamo gli autovalori delle matrici
Œ %LM Œ %Ž O   Q " ¤©
L’inversa di una matrice non singolare  è  %„ Ž%B
e con
data da

, , A  con (*)+ -  ./a46A`da460132 46`AH
03@2 3A`2 0a46? 
(  +   * ,8,9:1.72 337 /1., , 3   ,8,9: (*)+ - A; -=>   ` 
) 9  (*) ,8,9‰F ) c +  ) ; -  
Per verificare se la matrice è invertibile si
può calcolare il determinante con .
C ; -ED*+ A; bc D (  ) 9  (*) 3 * h ;# -l-ED 4ª` 
= -ED 
La libreria MASS contiene la funzione
C*; -bD*+ <8,9«F = ;
> = ; -bD A -  
che calcola l’inversa generalizzata nel
*,8,9:1.73137 6a., ,*3  ¬ 4e?o­U2 4l7˜­U@zg˜­®?I?
senso di Penrose di matrici non necessaria- ) 9  (*) ,8,9‰F ) c +  ) ; -  
mente quadratiche. C ; -ED*+ A; bc D (  ) 9  (*) 3 *

Corso di laurea in matematica ¯ Fondamenti di informatica °R±³² Docente: Josef Eschgfäller


             
    

Corso di laurea in matematica Anno accademico 2004/05 Numero 5

do.call In questo numero

R possiede alcuni meccanismi molto poten- Per poter usare anche vettori di argomenti 17 do.call


ti per la trasformazione degli argomenti di senza conversione a una lista (ciò ha senso

 
expression ed eval
una funzione. Assumiamo che una funzione naturalmente solo se si tratta di argomenti

C
system.time
%%&%   "!#"!#$
sia definita per gli argomenti , e , dello stesso tipo), definiamo una nostra fun-
zione formals e body

)&/-* D *#1 D(&E,, F- !9(& 1  (H!&2',  G1  -23 $$!9(.$
18 on.exit e system
Lo schema di Horner
che però nel nostro programma non "!#"!' Recall
Rappresentazione binaria
appaiano direttamente come valori singoli,
ma in forma di una lista . Allora possiamo ( che può essere usata nel modo seguente:
19 L’ipercubo

)&+*# (,, - !'(.$


eseguire la funzione con il comando
I CJ &  "!#/!#$K4&4 La distanza di Hamming
lapply ed sapply

:& ; C<&*-+D 1  DE$K=H- 5? !',  1 /35 !'7"! 58 $&$


Sistemi di Lindenmayer
20 La successione di Morse

:& ; <&*-+D 1  DE$K=H- 5 B ! @9A ! ? !'B$$


Si noti che il primo argomento deve essere La funzione Mlin
il nome della funzione (prima della versione Alcune funzioni per matrici
2.1.0 doveva essere una stringa che contene-
va quel nome), il secondo una lista. Se /!#"!#0  mapply


Un confronto
sono disponibili sotto forma di un vettore ,
Bibliografia
)&+*# (,, - !'(&1  0/!2',  1  23$&$
dobbiamo usare oppure, con la stessa ,

L@L LLC <M LD +   (L$ 


(.$N! ( ($N! ( (.$$
. D 1 .&1 [..D L *dD& L D 
system.time

   "!#"!#$


Esempio:
:& ; <&*-+D 1  DEH- ! LL&L 35HO'5P $$ Possiamo usare per verificare

4&4 :&; <&+ LL$KL = 65HO'5P $&$>= 5JQ/*#QR5P


la lentezza di ; dei 5 tem-

(1 &)&, / 1 *#/ (&6,5 , !#7"- ! 5!98(.$$


pi che vengono indicati (in secondi) biso-

)./*# (,&, ^ 1.1 .D L *d L D


gna guardare soprattutto il terzo (tempo

:&; <&/ 1.$>= 5? trascorso) e il primo (tempo di CPU usato

&_  &Q"Y &ZH-Y  $  % 5


In alcuni casi non funziona corret- dall’utente, cfr. ):

01 &)&@/'A *# ! ?(&,!',B.$- !9(&1  0/!&2',  1  23$$


tamente, ad esempio

:&; <&/ 1.$>= 5 B :& ; S<&)&++ *#$K(=,, 5F L TFD (  !'U(&1 35";O'; 5DP  !.29/, * 1  26$$ ._ ; L 2# 9:S;eDH5H-OfD $ & &4 2
D 0(, 9( L 1$cc  $
:&; P+<&*'/5AJ 1PI.1 .P+D *'L5AS*dP L PD"- /35P&PP $$$
expression ed eval
.2#. .7 D Y &&[.Z"Y D&%4+5 - 2 =
D :&; D  EI_ S  aY &GZHY - $ % 5
. ;L  ,( .D   :&; D 11&1 1 M 4 A $ 1:&;<&; +DH 9$K&=  8$ Q Y\ ,  1 DH9$  $ ._ ;2#. 9S7 D e&[&5HOf$ D&&4+V 2
R permette di creare espressioni formali con
la funzione . Mentre quindi dopo

. ;L  ,( 1  ; DH3 $ Y\ ,  1 D"9$  $cc


è un’espressione formale il cui va-

 :(;1D .D  .[&D. :&; <5H&*-/gAJ 1PM.1 *VP.D5L 5"*d*-g LAJD"PI#E"P 35P&PP $$$
=
lore non viene però calcolato (infatti questa e soprattutto sono
espressione è lecita anche quando non è però piuttosto lenti nell’esecuzione, come il-

0.(,  ; D&D 0.(, -  ;L  ,&(.$


ancora stato definito), con lustrato nella terza colonna, e quindi non
vengono usate nelle operazioni comuni che
devono essere ripetute molte volte.

. ;5LP  ,( &D  :&; D 11 + 4 A $ . ;L (,&1
ne possiamo calcolare il valore. Esempio:

1 ] 1 &.D &) D : ( ; 1 D


formals e body

. .D 0.(, # . ;L  ,(.$ Le funzioni e sono piut- Con si ottiene una lista degli argo-
menti di una funzione che comprende i va-
] ) 
:&:&;; <<&&//-V  ;L  ,&(.$
tosto versatili e generali; la prima restitu-
lori preimpostati; restituisce il corpo di

^1 &] 1 &.D


isce un’espressione dopo aver effettuato del-

$ R_ S a8HY :&G; & "/!#  5 $


le sostituzioni per le quali, nel caso genera- una funzione. Esempio:
le, bisogna consultare , la secon-
da trasforma un’espressione in una stringa.
 4a` $c
D W 5:&XR; D5A11 + J4 A $ ;:&( ; E<& ./  ;L; E(,&1 # $
con output L’utilizzo più semplice è l’uso in coppia:

I_ J L D &)&D :; DH  $ ] &.D"


 ( /V L D "!&( 2<` 8F1  1 2&!#a1 ` 8 !&2'b  2!31$D$ :  2&23$c =R=Rhi&  : .(  1$ D L: ,   ( ./O
Stringhe possono essere interpretate come
/'?? $ 8S =R= i5 
. L 2# :&QH; Y DH&-.ZHD Y & % 4 5 2
comandi anche secondo il seguente schema:

= ` 7&B
(1  $
:&D 0; (<&, /9  L$>$ = A.5 /1  1&5P$ 8SU5PP :&; ;_<:&/9];) :  - $ $ 8
=R1` == :&; <&+I 4$c a`
ma il metodo più generale e forse più fa-
D 0.?H(, Y 9& 8;:  $
= 55
cilmente comprensibile è l’utilizzo di una

1  ; D
connessione di testo (cioè di una stringa che Come si vede, in questo modo siamo in grado
viene usata come un file di testo) combinato di ricavare nell’output anche il nome usato
con : per l’argomento della funzione.
FONDAMENTI DI INFORMATICA a.a. 2004/05 Numero 5 18

` 9k8GS
on.exit e system con @ QT , come dimostriamo adesso. Recall

 
 Consideriamo il polinomio
All’interno di una funzione  D Nelle funzioni ricorsive la funzione chiaman-

 l:m 9 ` = ?@ F A ` D ?@ F[nAIHHHA ` D $$
fa in modo che venga eseguita quan- @ F . te se stessa può essere indicata con “%%+. ;
 >
do la funzione termina. Ciò può essere usa- `j 9 `jopDrq ; jopD possiamo cosı̀ scrivere }>  + nel modo se-
to in funzioni molto ramificate per non do- Allora, usando che Q per guente:
s 9ItEu u v q ]
iii , abbiamo
ver ripetere un’istruzione (in C si usereb-

D  

> € ( $ 6 

be    ) oppure per ripristinare pa- 9 ` =? G@ F A ` D? @ F[ A*HHHA ` D }  +'R " +  . %.
Q l Q Q Q @ F 
%
$
z&/ 2>:
rametri grafici o di sistema modificati dalla
9 S ` D q 1
w ; D ? @ F
D
AIS ` q ; ? @GF[ A $%   %$ } ‡ $  $ €Gƒ/E%0 „†( $
  Gƒ /„ ‰
funzione. T [ [ T iii  …. %. “%%+.  . %. ˆ %ˆ
AIS ` D q ; D ?xA ` q ;

 @GF @ F T @ @
Sotto Linux un comando della shell D
9wS ` D ? @ F A ` ? @ F[ A*HHHA ` D ?xA `
può essere eseguito dall’interno di un pro- [ @ F @ T

 
 D Rappresentazione binaria
gramma mediante  . L’output q Sy; D ? @ F AC; ? @ F[ A ; D ?xAf;
del comando appare sul terminale oppure, [ iii @ F @ T v

 D Ogni numero naturale possiede una rap-
con l’opzione   ! , diventa il risultato 9*?GS l qb` = ? @ F A ` q Sy8 q ; = ? @
T @ T presentazione binaria, cioè una rappresen-
della funzione. Quindi 9*? l q,` = ? @ A ` q 8xAC; = ? @ tazione della forma
@
j j D
" 
#$%'&$#(
  9*? l A ` q 8 vM9”;j• AC;j D• F AIHHHAC; D •–AC; =
   %! @ F
;— tEu]%™
J”˜
fa in modo che " sia un vettore di stringhe, quindi
con coefficienti (o cifre binarie)
vM9It s 9It ;>=š9It vK›bt
.
Per usiamo ed ; per
ognuna delle quali contiene le informazioni 8:9wSz? q A ` ; jb œ9 t
riguardanti un file contenuto nella cartella QGT l @ chiediamo che
s ;>—
. Con queste condizio-

ni e gli sono univocamente determinati.
di lavoro. Forse  funziona anche sotto Szv 9ŸSy; j u u;>=
Windows. Sotto Linux sono anche previste 8GS 9 ` Sia ž [ T iii T il vettore i cui ele-
e ciò implica QT @ . menti sono queste cifre. Dalla rappresenta-
le funzioni ) ) e  % per la creazione di
` = u u ` D zione binaria si deduce la seguente relazione
pipelines. iii
sono perciò i coefficienti del @GF
8 ricorsiva:
quoziente nella divisione con resto di per  ¡ Szv
? q ` 8GS vK¤”]
Abbiamo già imparato alle pagine 3 e 4 co- Q , mentre @ è il resto, uguale a QT . ¢ T se
me definire una funzione in R. Quando si Szv 9 ¡£ S ž [ S @ [ T Šu D t T v
ž [ T se è pari
batte il nome della funzione senza le paren- Questo algoritmo è detto schema di Hor- S S @ F u] v
ner o schema di Ruffini ed è molto più veloce ž [ [ T T se è dispari
tesi, si ottiene il codice sorgente; ciò può es-
sere utile per una veloce visualizzazione ad del calcolo separato delle potenze di Q (tran- |  6
ne nel caso che il polinomio consista di una La funzione .  .)) che definiamo accet-
esempio per ricordare dei parametri, senza 
sola o di pochissime potenze, in cui si userà ta un secondo parametro facoltativo +   ;
dover aprire il file nel nella libreria che con- quando questo è maggiore del numero di ci-
tiene la funzione. invece l’algoritmo del contadino russo (pagi-
fre necessarie per la rappresentazione bina-
na 16 del corso di Programmazione) oppure, v
in R, semplicemente l’operazione { . ria di , i posti iniziali vuoti vengono riem-
Funzioni e nomi di funzioni possono essere 
piti con zeri usando la funzione ) di R.
usati anche in vettori, ad esempio
Traduciamo l’algoritmo di Horner in una |  6
 (  
*  " (  (   .†  .)) ¥ " +   +  ¦§
%
 ,1 funzione in R; in essa il parametro alfa è /‘
/ 0+ / 2  ) - . preimpostato a 2. $%
 ¨


6 2: $$ 6>(z2>
)      %©©  + “%%+. ª
$%  $$†  &/ 6(Š/
|  
> € ( $ 6>   + “%+.  ª
  B $%
‚ ~}Gƒ>/„ R " +  . %.
con output   $


z
 +    
*  … 6†0 $
€  % % }  :  
33 ‚ ‚‡ $  Gƒ „ ‚ %‰ }  >«+  
$% € z2†(  & (€ ‰‰
4 567722
 . %.ˆ   g+ ) +   
3 3

Lo schema di Horner permette una elegante Per provare la funzione scriviamo in pro-
versione ricorsiva, descritta dalla relazione gramma queste istruzioni:
S u;=u;1D%u u;
val Q i ii
 @ T ” z 2 0/ 2 ( Š/’(62†(6’
Lo schema di Horner 9 H S  u ; = u; D u u; D AC;
@GF T @
%
  >  b
+  # 4 #( ¬ 1(##(
Q val Q i i%i

+. )   © - 
Sia dato un polinomio |  6† (  7>(#­ #
.† .))  +   
D (dimostrata a pagina 16 del corso di Pro-
8:9<;>=?@BAC;1D?E@GF AIHHHAC; ?P
@KJMLON grammazione), meno efficiente della forma
iterativa però per la ripetuta creazione dei Otteniamo l’output
dove L è un qualsiasi anello commutativo. Gƒ/10 „
8GS vettori  : 2®2R2¥2…2¥2R2…2¥2
Per Q JRL vogliamo calcolare QT .
8:9*U?EVAXW?YAXZ?E[AX\?EA^]_  >


> € ( $ 6> /¯2R2¥2…2¥2R2…2,/
Sia ad esempio . }>
  +'R " +  . %. 6°2R2¥2…2¥2R2b/'2
Poniamo $
€&/ 2 :
>
%  } ‡   % 4°2R2¥2…2¥2R2b/¥/
$% $  > €Gƒ/10 † „ ( $  ƒ / „ ‰
` = 9IU  R. %. }  +  . %. ˆ %ˆ ®2R2¥2…2¥2g/2¥2
3 2R2¥2…2¥2g/2,/
` Da9 ` = AbWc9dU AeW
5°2R2¥2…2¥2g/…/'2
Q Q Una frequente applicazione dello schema di
` 9 ` D AbZc9dU [ AbW AbZ Ž°2R2¥2…2¥2g/…/¥/
[ Q Q Q Horner è il calcolo del valore corrisponden-
7°2R2¥2…2,/‘2…2¥2
` 9 ` Ab\c9dU Y AbW [ AbZ Ab\ te a una rappresentazione binaria o esade- ’°2R2¥2…2,/‘2…2,/
Y [ Q Q Q Q cimale.
S]>uŠt1u t1u]>u]>uŠtEu]>u]u] / 2®2R2¥2…2,/‘2b/'2
` 9 ` Af]_g9dU V AbW Y AbZ [ Ab\ Af]_ Infatti otteniamo T [ /’°2R2¥2b/'2R2b/¥/
V Y Q Q Q Q Q
come 7°2R2,/…/'2R2…2¥2
` 9h8GS |   Š/(z2†(z2 (/(/(2†(/(/1(/ ŽŽ°2g/'2…2,/R/2,/
e vediamo che V QT . Lo stesso si può ~} > + / 25°2g/¥/2,/‘2b/'2
fare nel caso generale: S u ‹ru _1u Uu t1u W1u Œ D /4 3 /‘2¥2…2¥2g/…/¥/
e L T come /5 /‘2,/2¥2g/2¥2
` = 9<; =
|   Š/ 2†(/ 3 (Ž(4(2†( 3 (/>( $ /5> /’4 /R/'2…2¥2R2…2,/
` Da9 ` = Af;1D ~} > + . % . :
Q 666 /R/'2b/¥/R/…/'2
|   /(z2 (z2†(/(Š/(z2†(/1(/(/
iii  ~ }    +
>
‘  …4>//
`j 9 `j D AC; j )   Se nella prima riga scriviamo
F Q
|    / 2†(Š/ 3 (Ž(y4(z2†( 3 (/ >( $ /5
” 2G0z6 33 
iii  ~ }
>
>‘
 ,/
+ 74’Ž/’4 . % .
%  
` 9 ` D AC; ) 
@ @GF Q @
•>±
otteniamo i vertici dell’ipercubo .
FONDAMENTI DI INFORMATICA a.a. 2004/05 Numero 5 19

L’ipercubo La distanza di Hamming Questo teorema fondamentale è stato dimo-


Sia 



      
con . La distanza di Hamming è definita come il
strato nel corso di Algoritmi.

1 yz;–/—˜yyz z
Identificando con , geometrica- numero delle coordinate in cui due elemen-
Gli endomorfismi di (cioè gli omomorfis-
mente otteniamo un ipercubo che può esse- ti di differiscono e che in R può esse-
mi di monoidi ) sono noti anche co-
re visualizzato nel modo seguente. re calcolata con la seguente semplicissima

me sistemi di Lindenmayer.
funzione:
C.X M
D<J6E9SYFHG1I EI0J
X JLSTM1K#Z0VD
W
M
W NO P1Q
R NSTM6UVW
0
Aristid Lindenmayer (1925-1989) era un

 0 1
botanico olandese che utilizzò questi sistemi
per descrivere (soprattutto in modo grafico)
 ! 01 11
endomorfismo di y)z
ed analizzare l’accrescimento di piante. Un
può essere considerato
come un meccanismo di riscrittura; l’idea è
00 10
lapply ed sapply di imitare un principio generale della natu-

 "! 001 Siano 2[] \2 ? 



.
82  
un vettore o una li-
ra:

I _
_ SbacUDW ™
011

b]9X I 2 _.? _ 0^<^ 


`
Sb .a:
^<U D` ]9W 2  d
sta ed una funzione che non operi già in organismo semplice iniziale + leggi
111
101
modo vettoriale. Allora con ot-
010 teniamo la sequenza in
000
100 110
forma di una lista, con la stes- organismo complesso
sa sequenza in forma di un vettore quando
#%$& L’ipercubo a 4 dimensioni si ottiene
ciò è possibile.
Se la ha argomenti addizionali, que-
D Un semplicissimo, quanto antico, esempio di
riscrittura è il fiocco di neve di Koch (1905),

^ X I I _
_._ _ ^
^<` ` Sba:UD:X UYI I/_
U_E^
W `
dal cubo 3-dimensionale attraverso la rela-
sti possono essere aggiunti ai parame- discusso nel corso di Algoritmi: Si parte da

(')(*,+-./01
zione
tri di ed , quindi il risul- un elemento iniziatore, il triangolo equila-

Dobbiamo quindi creare due copie del cu- b]92 ?  e: f 0


( ]92   ec f d O
tato di diventa il vettore
. Talvolta è ne-
cessario applicare l’operatore al risultato.
tero, e da un elemento generatore (che con-
tiene le leggi), costituita da una linea spez-
zata orientata che consta di quattro parti
bo 3-dimensionale. Nella rappresentazio-
Esempio: della stessa lunghezza; quindi si sostituisce

M1_(Dk1K KXQ8N.I D<_


P:M
_ SNM^<`O W P1SYQ<h:R ibN%j/UDSba1W WaAg8h
ne grafica inoltre sono adiacenti e quindi
connessi con una linea quei vertici che si ogni lato del triangolo iniziatore con una ri-
distinguono in una sola coordinata. Oltre ga del generatore, ridotta in modo tale (se

2354687/51 2984: 7;<


 lR M.P<_.M.P3im-npo0q-h.j
ai legami all’interno dei due cubi dobbiamo si vuole che lo spazio occupato dalla figura

2954:87
perciò unire i punti e rimanga lo stesso) da avere gli estremi coin-

M1_(D(k1K<K D<XQ8M
N.I N_
P:_O0SMP1^<`Q<W R SYNh:ibj/SYacUD:Uk<UG1k
G1R
K1R<K.o
h(W[W ag8h
r<k<G1R
per ogni . cidenti con quelli del segmento da sostitui-
re. Iterando questo procedimento si perviene
ad un’immagine che assomiglia a un fiocco di

lR M.P<_.M.P3i)qLo.o-o0sLh
t neve. Per il disegno sul calcolatore natural-
mente bisognerà fermarsi dopo un certo nu-

^ I _
_ ^
` X I _
_ ^<`
mero di iterazioni, matematicamente si può
anche considerare il limite delle figure otte-
Le funzioni e sono caratteri-
nute, ad esempio rispetto a una metrica (me-
stiche di molti linguaggi ad alto livello e già
presenti nel più antico di tutti, il Lisp. Nel
Perl esse corrispondono alla funzione .
J1I0_ siemi compatti non vuoti di š›
trica di Hausdorff) sull’insieme dei sottoin-
.
La figura diventa molto più semplice, se si
.C D<E9FbO8M.E1R

pone uno dei due cubi (quello con la quarta La funzione restituisce l’ipercubo È importante che nei sistemi di Linden-


coordinata ) all’interno dell’altro (quello in forma di una lista: mayer la riscrittura avviene in parallelo,
con la quarta coordinata ):
C.D<I E9_
_ FbO8M.E1Sbu6Ri0K#SYhD
gvM
N1NZ(O o
P1W;Q
UC(R NI:Fwk1STNI _
W _1h/UdO
Q D
k(x
K0NW cioè le regole vengono applicate simultanea-

^ ^<`
mente ad ogni carattere di una data parola,
0011 0111
a differenza da quanto accada nei linguag-
gi di Chomsky (usati spesso per descrivere i

1011
1111
a .
hgvN1Z(o
Non dimenticare le parentesi attorno
linguaggi di programmazione).

0010 0110 Elenchiamo alcune delle principali applica-


zioni dei sistemi di Lindenmayer.
1110

1010 Sistemi di Lindenmayer Da un lato questi sistemi possono essere


0000 0100
yy
Sia un insieme. Il monoide libero genera-
impiegati per simulare l’accrescimento di un
organismo o di un intero sistema ecologico

yz!  |{ y 
to da è l’insieme e per analizzarne i meccanismi di crescita.
1100
1000 0101 Si possono cosı̀ individuare i parametri che

/}~
0001
determinano l’evoluzione di un organismo o

y‚ƒ  y € z…„ y.€1z y~


di un ecosistema.
Denotiamo con l’unico elemento di . Po- Due campi dove più intensamente si im-
niamo . piegano piante virtuali sono il cinema e i gio-

‹Š Œ  ‘ y Ž yŽ’z y‚y †#y‚‡‰ˆ


1001 1101
Gli elementi di si chiamano parole chi al calcolatore, dove vengono usate in sce-

= sull’alfabeto e siccome per ne esterne, in effetti speciali, nella simula-


: Teoricamente anche qui si può usare , per ogni esiste esattamen- zione di paesaggi che possono essere esplo-

“ €;“Ž  €
la relazione te un tale che ; questo si rati interattivamente.

1 (3>@?+-./01 “ Ž6“


chiama la lunghezza di e viene denotato
con . In particolare ; si chiama la
Sistemi di Lindenmayer possono essere
usati per la memorizzazione economica di
parola vuota. immagini. Infatti, invece di dover conserva-
ma la visualizzazione diventa difficoltosa.

y)z
Se usiamo la concatenazione di parole co- re tutto il contenuto di una parte intera dello
schermo (ad esempio 600x600 pixel = 360000
1 
Ogni vertice dell’ipercubo corrisponde a un me composizione, diventa un monoide,
altamente noncommutativo. bit = 45000 byte per un’immagine in bianco-

” • ~ ;y!–/— ”
elemento di che nell’interpretazione in-
nero) è sufficiente conservare la stringa che

(;5$ B18;
A8"; 5$
siemistica rappresenta a sua volta un sot-
sia un monoide e un’applica- rappresenta l’iniziatore (ad esempio 50 byte)

”
toinsieme di (il punto ad esempio

• ~ •p;yzA–c—
zione qualsiasi. Allora esiste esiste un unico e le stringhe che contengono le leggi di cre-
l’insieme se ).

y
omomorfismo di monoidi che su scita (ad esempio 20x30 byte = 600 byte),
coincide con . quindi in tutto 650 invece di 45000 byte.
FONDAMENTI DI INFORMATICA a.a. 2004/05 Numero 5 20

-; Nello stesso modo, se ‹ è una funzione di


>< =#< <6?
< ‡†RŒ  DŒ ˆg‰ , con
VVAW7N>q#Q>^#eQPW#seQ>ŽŒS otteniamo
La successione di Morse Rappresentiamo le parole di come strin-
ghe che contengono solo le lettere e .
KZ3O8variabili
†R‹†  DŠ DŒ ‰  ‹#† #ˆ DŠ ˆ DŒ ˆ!‰6‰ . Gli ope-
Questa successione è forse il più noto esem- La funzione in R è semplicemente il vettore
pio di un sistema di Lindenmayer. Essa
compare sotto molte vesti nella dinamica @ABDCFEHGICKJ8LKBM8C:NPO#QRGKSTJ
N6UO8VVAW#NPOQRGSS randi possono anche essere liste; in tal caso
simbolica (lo studio delle periodicità e qua-
 
siperiodicità di parole infinite, cioè di ele-
Per la successione di Morse è ad esempio
G il risultato è una lista. La funzione che viene
applicata (il primo argomento di
ZKO8VVAW ) può
menti di o ). Infatti la successione di
Morse è la più semplice successione quasi- @_YAXa` BDICYOXZKA\M [N>^#U\TQ E]QbJ
GN ICKQ J8LKSBQ M8C:Q6J
N>N ^KS Q SS avere un numero arbitrario di argomenti.
…
= = ? ? ? =
Argomenti opzionali di vengono aggiunti
periodica, ma non periodica. Essa è definita agli operandi:
nel modo seguente:

 Per provare usiamo
GFOA GE]OGIN>CK^‘J8LWBS M8C:N>^#QPW#QPOA GOE ? S
IGEM [= NRc'BDC S
     ’OEE ???d { db? {
generatore: 0
leggi: 0
f ?d>e
Quindi la successione si sviluppa in questo
modo:
IEJ@O L7ABDNaIgCgQNaI!<Ph QRC@A< BDQbCYU\8XVZEM[<U< \S S i IV[E ZBDCO8VL!VNaIAW#S NRG!QPOQa’!QbOA GOE u S
 “ uv”u}]xuFxe]v=
 con output
   ==K?
   
         =K=K???8?8==?8==? Un confronto
Si vede che la successione può essere ge- =K=K???8?8==?8?8====???8?8===K=K?8?8==???8?8==K?8==?8=K??8==??8=?8==K? ”
R has been changing and improving so fast
that it is difficult for any of the commerci-
nerata anche in altri modi, ad esempio ag-
giungendo alla successione ottenuta al pas- al alternatives to keep up. There are sever-
so precedente la successione che si ottiene al reasons for this. First, R is easily exten-
da essa scambiando 1 con 0. Vediamo in par- ded. Second, the R Foundation for Statisti-
ticolare che la successione si allunga sem- Alcune funzioni per matrici cal Computing has provided a supportive or-
pre senza mai cambiare nelle parti costrui- ganizational framework that makes it easy
Con le seguenti funzioni possiamo ottene-
te negli stadi precedenti. for people to share. Third, there are hundreds
re le liste delle colonne e delle righe di una
and perhaps thousands of competent profes-
matrice.
@AZYO8VX>VJMAW7A]N E]GCKIJCMJ8ALN>kBM8S
CjQ N>kS
La dinamica simbolica viene classicamen- sionals the world over who have been frustra-
te e ancora oggi utilizzata nello studio di ted in the past by the steep price of commer-
sistemi dinamici. Immaginiamo infatti un
punto che si muove in uno spazio in  GICKJ LB?M8d C:NblSmk!n QbloS cial software for many things, and R provi-
des a shockingly easy and open alternative

 ! #"  (*)


tempi discreti, raggiungendo le posizioni
@AZYO8VXpV[AB qW7rN \TCE][GM Is7CKN>kJ8LS
BQ M8CN>kS that helps people share their latest develop-

GICKJ LB?M8d C:N6BSmk!n>BQ>oS


ments with the entire world in a way that
$%'& 
. Assumiamo che sia data una
partizione di e che replaces that frustration with the pride of

,+ %) !-+ % # ",+ )  ./+ %) contributing to something incredibly useful.“


0/+ ) #1,+ %) # 2,+ % ) # 3,+ ) (Spencer Graves)

4,+ #5,+ ! 6/+ 7 8-+ Per il calcolo veloce di somme e medie del-
[M st8IZKU J MAt8IZKU [M s@\O8CKU
 le colonne o righe di una matrice R for-
JMA @\O8CKU
nisce le funzioni , ,
[M s@\O8CKUN>kS
John Chambers sarà il primo membro eme-
rito tra gli scienziati dei Bell Laboratories a
e . Ad esempio resti- Murray Hill.
k
Allora possiamo associare a questo movi-
mento la successione tuisce il vettore che contiene le medie delle

%9% ) % ) %% ) %9% ,) )  


righe di :

o, più brevemente, VkF[ETBDC@L7ZNPkS N ?dRuv QbJMAE v S Bibliografia

      ZV[F[BDCETL7[NRZMs[K@S \O8CU


N>kS 16035O. Deussen: Computergenerierte
Pflanzen. Springer 2003.
che fornisce già alcune indicazioni sul mo- 850H. Furstenberg: Recurrence in ergodic
vimento. Potremmo adesso raffinare la par- theory and combinatorial number theory.
tizione (lavorando con più sottoinsiemi e con output Princeton UP 1981.

{?wuy y?xz v}
quindi con più lettere nel nostro alfabeto)

e?8=€ |~
per ottenere rappresentazioni sempre più 14258W. Gottschalk/G. Hedlund: Topologi-

{???ue
fedeli del nostro sistema dinamico. Questa cal dynamics. AMS 1968.
tecnica è molto utilizzata in vari campi del-
??x‚ 8
? €
v ?
u|‚ ?„u? }ƒ u‚u? xuuv=
17057U. Ligges: Programmieren mit R.
la matematica pura e della fisica statistica. Springer 2005.

u XR{ e XR{ ?8= XR{ ?8v XR{ ? } XR{ uu XR{


Un ramo di applicazione più recente e inter- 2226 P. Prusinkiewicz/A. Lindenmayer:
essante della dinamica simbolica è l’analisi The algorithmic beauty of plants.
dei testi, ad esempi in informatica e bioin- Springer 1990.
formatica. In questo caso parole finite ven-
[Ms@\O8CU
N>kSn u o oppure anche con
La media della seconda riga si ottie-
Zne\O C!conN>k!n Q u oS .
1188 G. Rozenberg/A. Salomaa: The ma-
gono studiate come parti di parole infinite a
cui si possono applicare i metodi della dina- thematical theory of L systems.
mica simbolica. Academic Press 1980.
17060P. Spector: An introduction to S and
S-Plus. Wadsworth 1994.
mapply
La funzione Mlin … una funzione di 2 variabili ed W. Venables: Mind your language.
 sia
 †   ZO8ˆ!VVK‰ ,AŠ/W#NR‡G7QP^#†RŠ Q>W S  8Š ˆY‰ .
17117
È facilissimo, ma istruttivo, creare una fun- ‡ R News 2/2 (2002), 24-26.
zione per la realizzazione di sistemi di Lin-
…
vettore †  8Š ‰  † #ˆ DŠ ˆ!‰6‰ .
Allora con
… otteniamo il 15605W. Venables/B. Ripley: S program-
:  
denmayer. Nell’esempio ci limitiamo al caso ming. Springer 2000.
.

Corso di laurea in matematica • Fondamenti di informatica –˜—š™ Docente: Josef Eschgfäller


             
    

Corso di laurea in matematica Anno accademico 2004/05 Numero 6

apply In questo numero

Questa funzione è fondamentale per la tras- Per applicare la funzione introdotta N7O >& G< 21 apply

formazione di righe o colonne di una matri-
ce. Siano una funzione definita per vetto-
ri (a valori non necessariamente numerici)
a pagina 7 a tutte le colonne di una matrice,

PRQSUT VXW+PYS[QS Z\\'\'Z PY]_QS ^


ottenendo cosı̀ la matrice
Ordinamento (sort)
rank

  :
22 order
che per ogni argomento restituisca un vetto-
re della stessa lunghezza ed una ma-
Numeri complessi

N 0`O > #Gc R,)(*/N O a@<>&1<G?%;@b#c %


combiniamo questa funzione con : Il teorema di Rouché
trice (a valori non necessariamente numeri-
23 Radici di un polinomio
 !"# $$$&%%
ci). Allora

”
Le formule di Euler e de Moivre

1; N:a0<M
Radici -esime dell’unità

è la matrice che si ottiene da


  eseguendo Se, in analogia con le funzioni ecc.
Radici di un numero complesso

' )(*+ !$$$'%


su ogni riga di , ed viste a pagina 20, vogliamo calcolare mas-

 ' <!" 4 0 d % d < <e" 40 ?A@ % ?A@


simi e minimi di righe e colonne di una

&> @&
matrice , possiamo usare semplicemente rank

 $ $$ (*40 % e
(*40 %
per le ri- Con si ottiene la posizione di ogni ele-

' )(*+f > %


è la matrice che si ottiene eseguendo su ghe, e per le

a&'><, 1|?A@' 3) CM ;:!>")9* a"5*%%!"(&%


mento nella successione ordinata:
ogni colonna di . In entrambi i casi in- colonne.
dica eventuali ulteriori argomenti di . Nello stesso modo con si
 B ‚(‚3EC/9/5E

 *
1  h
V W
Esempi: ottengono le varianze delle colonne di .

-,/.0 *243(2+5*)672+8*!:972+5*!*2#6&%" g g S Z'\'\\Z gji ^


'><1?A@'; , 3<% <1 ,=<% sia un vettore numerico.
Come abbiamo visto a pagina 7, con k ?  ) % 'B ><?A@'+>@' a"%%
6-3E-C/9/8/(
BB -CDCE:( W gjlnm_g S Z gjoUm_gjl Z&\\\Z g i mKg i7p S ^
otteniamo il vettore
a&'><, 1|?A@' ") (M ;:)>6*)H* a")G%%)6*#3)C*)9*(*)6&%
(B F6F9D E
9  B GKY(F(/6/6/6-3FCF9-H
BB 3E8D H(FE5E:9:C8ED G5
gjqsrtgj!q p bS uwv g"qxmKgjq!p S rzy
Siccome
'B ><?A@'+>@' a"%%
BB 6F6E3J I( (/6O+C/9E--9/HF5FGF67O+C/9
3F3K:6D6 MAa'0  k ? ' ) %:{ G%
'L ><,?A@' L %  )(M ;:> %
indica quante volte un ele-
mento del vettore è maggiore di quello pre-
Come si vede, quando il vettore contiene va-
>&:@'
 ,;:1|& }|)(*)C* (*? !")6 )C*)(&%
cedente:

?} MO•0 }:‹<; k,–+ ?> M  – >&@'


lori uguali, assegna a questi elemen-
BB -6DCI '
 f 
> A
? '
@ 7
 ,& fMAa; 0:k} %  %:{G%
ti la media dei ranghi. Con l’impostazione

BB (/(F3J D
9 ( in i ranghi diven-

CD8D6 tano invece unici, assegnando un rango mi-

BB 6F6F9E8E:63KDG5 ~
nore a quelli tra due o più elementi uguali

a&'><, 1|?A@' ") (M ;:)>6*)H* a")G%%)6*#3)C*)9*(*)6&%


che nel vettore appaiono per primi:

3B E3EHE5E:C:9EE:(  )(*# a @<1 <?;@t#d %/MAa0  k ?  #d %:{G%%


Se è una matrice, con

B GKY(F(/6/6/6-3FCF9-H
zione M ;:>
Nel secondo esempio abbiamo usato la fun-
che restituisce un vettore ordina-
possiamo calcolare quante volte in ogni co-
lonna un termine sia maggiore di quello pre-
'dB ><, >&?A@'@'#d  a7%  ?} MO•0 }:‹; k,–# ?> M  –!%
to per grandezza, come vedremo. cedente.
(/6-CK/Y9FH/5KG-3F8
–40 ?@ – –40 d –
k }'1>} M ?A@„ ,= >&@'
Le scelte e sono spesso utiliz-
Ordinamento (sort) zate in classifiche sportive. Manca l’opzione
, per questo applichiamo

>&} ;:>/>&@'F;> k }:>


>&} f f_M
Consideriamo le seguenti funzioni: Per ottenere la somma dei 4 elementi più

>? MAa :&? , 1| 3'CG#3&6G#3C*#3'((


ai risultati negativi:
grandi di un vettore possiamo ordinarlo in

;:> 3'k }'6?A@G1>&:#<3&}'C? ,&(*M?A#@&3';:>'„CG+#>3'6? CMa #3':&(:6*<)3? :C &%


modo decrescente, poi fare la somma dei pri-
(che abbiamo già incontrato a pagina 7) mi 4 elementi del vettore ordinato:

'fk ,}'1|1>& }6*M 1#37}@'2+H} #G,&M !;:>'|!:( f*#)k6}')(*1>&!}3< M% ?A@&„ ,=<% >&:@&k „:?‹<} ? , >&}:M @'‹; ,Š:>=<?% MAa?@:&:? 
non è una vera funzione di ordinamento, ma

'B >;?A@'7  MAa 0  k }'1>&} M 1}@'}ˆ *243'‰%% MO—0 k,–40 –!%


restituisce semplicemente gli elementi di un

a&B , ;1|a  *2 +a6 )H*2#G‚(F62+6/9*)H‚(%"GE€ '6->3F?A@'7C/ aj9/% (


vettore in ordine invertito:

a a 2ƒCG ,.1 0; ,'1|(;: <> k1 ,?A@<=j:% ? M ;:>+>@&„:‹<? %%"


B? , >&; a} f   aa"%"€2ƒ'(/>9F?A@&C-3/? % 6/GFH/6/(E '><?A@' <%
M ;:>
Per calcolare la media di un vettore da
cui abbiamo tolto l’elemento più grande e

k }'1:>&} M ?@&„ ,†= M ;>


La funzione di ordinamento ordina un
vettore di numeri reali, in ordine crescente l’elemento più piccolo, procediamo cosı̀: con output
se non è indicata l’opzione . Per

a &
…  'f; ,,&M*2;:+>'8  f<% 3'3'C'CG( ((
'B; >,&;M?A@';:>'7 0  f<}% @Œˆ#Š');1|% "% }@&„‹7 f<%%:‰
il trattamento dei valori consultare .

1'>><}?A@'M 1}@&1:>&&}} ,&1M }:;@'>&}  aj%


Usiamo lo stesso :
3'3'C6'GC 3C
B }&;1a>&}  a1}@'2‡&M GK} -(;:/>% (- 6F6-}'1:3F>&}C/ 9/?@&H„ a a 2‡3 3'3'66GG C8
'kB ><;?A@'M  k }'1>&} ,M M1}@'&} a7% #k M ,=<% sŽzsŽ_nŽz‘’Ž[“ V  y 3'3'('('6( H5
a a 2ƒH/9FC-3/6F6/(/(EYG Infatti
questi 5 numeri è 4.
, e la media di
33CC 5
FONDAMENTI DI INFORMATICA a.a. 2004/05 Numero 6 22

order . può essere usata anche per trovare i La disuguaglianza è quindi richiesta solo sul
 restituisce successivamente la posi- valori di N per cui una funzione O P(QSRNT as- bordo del cerchio, non al suo interno.
Allora i polinomi Ž e Ž Z” possiedono
zione dell’elemento più piccolo nella succes- sume un minimo o un massimo su un insie-
all’interno del cerchio lo stesso numero di ra-
sione originale, poi quella del secondo e cosı̀ me finito di punti. Consideriamo la funzione
dici, se queste vengono contate con le loro
via: molteplicità.
O PVUW XSR/NY[Z]\,T[^=_ ` a.b cVde\.fdg4h

  Questo è un teorema molto importante
!#"$ % Essa k
dovrebbe assumere un massimo dell’analisi complessa. Non confondere 
& '()*)()')( cl
(uguale a \ ) in Nji d-\]im` n o
pp
p0\ . con • .
!#"$ + ,$ %, Proviamo a trovare il massimo con . :
& - *)'()'()( Il teorema di Rouché si usa nel modo seguen-
q  q ,"0 5$
"r D
'+#"= D0s5t
, te. Assumiamo che vogliamo studiare gli ze-
!#"$ . /0, ri di un polinomio Q . Allora decomponiamo Q
& $,$2134 '4 5()(6')7' D+u +.u$ %!v
,%wE,=x%,! , nella forma Q–i Ž Zr , dove Ž è un polino-
E q D
 mio sui cui zeri, almeno all’interno di un cer-
28 . %59 coincide con + $ %0 ! Questa chio, abbiamo sufficienti informazioni. Con-

  E
 sideriamo in altre parole Q come perturba-
zione di Ž mediante  . Se riusciamo a dimo-
funzione un po’ astratta ha molte applica- y $z > %= ,
zioni. D<
zD,,DS8 y 9 strare che sul bordo del cerchio si ha sempre
& S

#"$ D.<
zD
  x/6,, † Ž R/‚!T,†—‘˜† SR‚
T† , allora possiamo concludere
Per ordinare le righe di una matrice : ris- 
#"$ q D.<
z,D
, & S  x/7,7,7,77,7,6 che Q e Ž all’interno del cerchio possiedono
petto ai valori nella prima colonna si può
lo stesso numero di radici, tenuto conto della
loro molteplicità. Quindi se Ž nel cerchio pos-
procedere come nel seguente esempio:
Il risultato è ottimo, tenendo conto del fatto
> che nella successione degli N abbiamo uti- siede una sola radice tripla, non possiamo
: , ;<=   6  , %0 .?! dire che anche Q possiede una radice tripla,
!#"$ :  lizzato incrementi di `n ``\ .
possiamo però dire che Q nel cerchio possie-
#"
 .= 8. .9
 de esattamente tre radici se queste vengono
@  8 
#"
9 : contate con le loro molteplicità.
:
!#"$ @  Numeri complessi
La notazione per i numeri complessi in R è Teorema 22.2. Siano
con output l| in matematica. Ÿ
molto simile a quella usata Q~ir™0š›Z–™ œN}Zr,,,Zž™0Ÿ=N
Il numero complesso {3 | Z viene denotato
A con t , ma per {}Z bisogna usare t
 ,
un polinomio con coefficienti complessi,
 A 6   “]¡)Zr\ e ™ŸŠ£ ¢i ` . Allora esistono nume-
perché verrebbe interpretato come il nome
B ri complessi ˆ œ a,n,n,na5ˆ Ÿ , univocamente deter-
C , di una variabile. Numeri reali, ad esempio
minati, tali che
` o o , in alcuni contesti vengono interpreta-
B ti automaticamente come numeri comples- | | Q~ir™ Ÿ RN¤d-ˆ œ T=,,R/N~d¥ˆ Ÿ T
A6 si; quando necessario si usano `SZ~` e o=Z~`
> >
A oppure z+ , <, D e z+ 6, <, ,D . Questa uguaglianza è intesa come ugua-
C , Si possono formare vettori e matrici di nu- glianza di polinomi, cioè sviluppando il pro-
meri complessi, ad esempio dotto a destra si ottiene un polinomio con gli
 può essere applicata anche a più argo- stessi coefficienti di Q e quindi proprio Q .
F)) ,t  È chiaro anche che Q2Rˆ§¦0T¨i©` per ogni ª
menti; con .= DEF
 si ottiene l’ordine 
#"$ F
 e si può dimostrare che ogni radice di Q , cioè
degli elementi di D in cui in caso di parità & t,*,t*,t,*t
 ogni ˆ per cui QSRˆ2T«i]` , è uno degli ˆ¬¦ .
viene tenuto conto dell’ordine in E e in caso
di ulteriore parità dell’ordine in F . In questo Dimostrazione. Questo teorema si chiama
Vettori di numeri complessi possono esse-
modo le righe di una matrice possono essere il teorema fondamentale dell’algebra. Per la
re considerati come vettori di punti nel pia-
ordinate secondo più criteri: dimostrazione dell’esistenza di una radice
no e ciò è utilissimo per la grafica nel pia-
no. Se F è un vettore di numeri comples-
usiamo il teorema di Rouché e consideriamo
D,
   
 Q come perturbazione di
E,

 si, con <
,z."= F
 otteniamo il baricentro dei
F,
 6
 punti dati; se F
e F sono numeri complessi Ž ^ ir™0ŸSN Ÿ
distinti, con F
5t$!€ F,v,F
, otteniamo tutti i
 .= DEF
 punti della retta passante per F
e F . R for- mediante
!#"$ % nisce alcune funzioni di base per i numeri ŸS¯§œ
& 4()'64 ' ­^ i®™ Ÿ=¯§œ N Z°,Z–™ š

complessi:
Ÿ
,;<=  DEF! > %! ?!  F
 Per ogni ‚–“®• si ha † Ž R/‚!T,†¬i±† ™Ÿ«†G† ‚† e si
... parte reale di ‚
@:  8G=9 ƒ <S F

... parte immaginaria di ‚
vede facilmente che per † ‚† sufficientemente
:
!#"$ @  „ "
… F
 grande questa   -esima potenza domina lar-
... complesso coniugato ‚
z5w0+ F
 gamente le potenze inferiori e quindi † 2R/‚!T,† ,
... modulo † ‚†
: ‡ F

per quanto grandi siano i coefficienti di que-
con output ... angolo ˆ in ‚‰iŠ† ‚† ‹Œ
ste potenze inferiori rispetto al coefficiente
Ÿ
HI Invece di z5w0+ F
 si può anche usare ;  F
 . ™Ÿ di N .
>
HJ Anche le funzioni D , ‡ , + e +,5" pos- Perciò esiste certamente un ²³‘ž` tale che
HK sono essere usate per numeri complessi. per ogni ‚ che appartiene alla circonferen-
II za di raggio ² (cioè tale che † ‚†¬i´² ) si ha
II6 † Ž R/‚!T,† ‘’† 2R/‚!T,† .
II Il teorema di Rouché implica allora che Q ,
LJ Il teorema di Rouché il nostro polinomio dato, all’interno del cer-
chio † ‚†¶µ·² possiede lo stesso numero di
Ÿ
Supponiamo di voler trovare i 3 elemen-
Teorema 22.1 (teorema di Rouché).
Ž ed  siano due polinomi a coefficienti radici come Ž . Ma Ž i¸™ŸSN in questo cer-
ti più piccoli di un vettore M . A que- chio possiede la radice ‚~i¹` di molteplicità
complessi e  una circonferenza (cioè il bor-   . E quindi anche Q possiede all’interno dello
sto scopo possiamo usare sia l’istruzione
+ ,$= M 8 1/9 che M 8 . M 8 19,9 . In mo- do di un cerchio) nel piano tale che stesso cerchio   radici e quindi almeno una
do simile si trovano i 3 elementi più grandi. † Ž R/‚!T,† ‘’† 2R/‚!T,† per ogni ‚~“' . radice perché per ipotesi  4º \ .
FONDAMENTI DI INFORMATICA a.a. 2004/05 Numero 6 23

4658H%M žŸ ?  p  r Ÿ tR ¢¡£ 


Radici di un polinomio Per J ? possiamo anche più in gene-
rale definire
In R le radici di un polinomio possono es- un gruppo ciclico (e quindi abeliano) isomor-
sere ottenute con la funzione 
che h‚ƒk ? h"„'h i%… fo a ‘=¤ € . Questa isomorfia è molto impor-
prende come argomento il vettore dei coef- tante nell’analisi armonica (analisi di Fou-
ficienti di elencati iniziando con il coeffi- Allora rier) dei gruppi finiti e in teoria dei numeri
ciente costante. Per arrotondare i risultati h"‚ ry† ? h"‚ u h † perché introduce la possibilità di utilizzare
usiamo la funzione   vista a pagina 3. le funzioni trigonometriche in questi campi
Esempio: K
‡
]b . La funzione esponenziale della matematica.
per ogni J
è quindi un omomorfismo


 !! @x K#5:Dˆ0‰ @x K u D
"#$" % &"'(!!
Radici di un numero complesso
La formula
con output )*+)",(*).-*) . Infatti Siano P;Y¥[ un numero reale non negativo
h i ‚ ?eQST J 58H T V W J 5 ~
/10324658749:0;24<=584> ed € ]3‹ . Nei corsi di Analisi si impara
?A@ 4B03CD @ 4E0;FD @ 4G0;H%D @ 465IH%D che esiste un unico numero ¦ Y§[ tale che
rimane valida anche per J ]m non neces-
¦  ?cP . Denotiamo questo numero con ¨ P .
sariamente reale, ma hi ‚ si trova sulla cir-
conferenza unitaria se e solo se J ] O .
Sia adesso J\?© a [ un numero complesso di-
Le formule di Euler e de Moivre verso da [ . Allora J ?mP h ixª con PE«I[ e ¬ ] O .
4LK MND 9 Cerchiamo le radici € -esime di J , cioè le ra-
Ogni punto J ?A@ di O può essere scrit- Radici Š -esime dell’unità
4
dici del polinomio  ? J . Una radice la tro-
to nella forma 5 viamo subito; infatti la formula di de Moivre
K P T V WXU D Sia € ]Œ‹ ~ fissato. Consideriamo il nu-
J ?A@%PRQSTU R implica che
mero
dove PZY\[ è univocamente determinato ed ª
U;] O . Notiamo che  ? h 9$Ž i
U
”
k? ¨ P h i 

P1?_^ J ^?_` 4 9 58M 9 soddisfa l’equazione U  ? J . Se ­ adesso è
(che naturalmente dipende da € ). Dalla for- ”
un numero complesso tale che ­ ?}~ , allora
Se Jb?c
a [ , anche U è univocamente determi- mula di de Moivre segue che  elevato al-
nato se chiediamo [GdeU;f Cg
oppure, come la € -esima potenza è uguale a ~ . È anche
anche
D ?\U
@&U  ­ ?\U  ?cP
” ­ 
il matematico preferisce dire, univocamente chiaro che
Cg ” ”
determinato modulo . @  D  ?A@   D  ?}~  ?}~ Però noi conosciamo i ­ per cui ­ ?}~ ; sono
le € -esime radici dell’unità. Quindi ciascuno
Nei corsi di Analisi si dimostra che per ogni  ]Œ‘ . Consideriamo adesso i nu-
K K 9NK"’’"’K 
meri ~  
dei numeri
hi&jlk ?mQSTnU 5IH T V WoU L“R” .
ª
Dalla formula di Euler vediamo che gli    U
”
k? ¨ P h i 
(formula di Euler). Dal teorema di addizio- si trovano C
tutti sul cerchio unitario, con # U 9 k?  U
ne per le funzioni trigonometriche si deduce g F/ [ ”
immediatamente che ruotato di (cioè di gradi) rispetto ad U < k?  9 U
€ € ”
 “R” . Essi formano in altre parole (almeno ’’’
h ipqjrLs't ? h i%j.u h iqs Y F
per € ) i vertici del poligono regolare
con € vertici iscritto al cerchio unitario con U k?  n“R” U
Kv
per U ] O . Si vede che nel campo com-
primo vertice uguale ad ~ .
 ”
4 0
h 9 Ž– i
plesso il teorema di addizione assume una
è una radice di  J . D’altra parte la molti-
‡
plicazione di un numero complesso con 
forma molto più semplice.
‡
h > Ž– i corrisponde
F/ [
alla rotazione di per un angolo
Possiamo quindi scrivere ogni numero com-
plesso J nella forma J ?wP h i&j con P ed U di  gradi e, siccome J3?}a [ e quindi an-
U € ? ® [ U
come sopra.
v
che
” a , tutti gli  sono distinti tra di
Sia adesso anche ] O . Allora h• ?}~ loro. Dal teorema fondamentale dell’algebra
h xi s J ?cP h i&pxjrys't [ segue che
4 0
4B0 U D uuu @ 4G0 U D
come segue dal teorema di addizione appe- J ?¯@ 
na visto. Il prodotto h iqs J ha quindi la stes- hy— Ž– i 2
” 
€ ? e che ogni numero complesso U che soddisfa
sa lunghezza di J ed un angolo aumentato
v l’equazione U  ? J è uno degli U  .
di rispetto a J . Ciò significa che la molti- hy˜ Ž– i
plicazione con h iqs è la stessa cosa come una 5EFH
v K K’’’K 0 Troviamo con R le quarte radici di ~
rotazione per l’angolo in senso antiorario. Ciò implica che gli  per  ?e[ ~ € ~
4>:0 @~ 5IFH&D
, cioè
sono tutti distinti tra di loro e costitui- le radici del polinomio :
Prendiamo adesso un numero comples-
scono un insieme di € radici del polinomio
so z arbitrario. Lo possiamo rappresentare 4 0 ~ "


n'-"'&)&)&)°!!
 , mentre per altri  i valori si ripeto-
nella forma z ?|{ h iqs con {ZY}[ . Per il pro- "$" n% %'(!!
no. Dal teorema fondamentale dell’algebra
dotto z
J otteniamo evidentemente 4 0 ~
segue che ogni radice di  è uno degli
 e che
z
J ?\{P h i&pqjrys't L’output è
4
0 ~
e quindi vediamo che la moltiplicazione con  ±%(*)n±x²b)n±x²# *±%(""
?A@ 4X0 ~ D @ 4:0  D @ 4:0  9D uuu @ 4X0  n
 “R”
D
±%(")n±x²³)n±x²#
±%(""
un numero complesso consiste sempre di
K K N
9 
K "
’ 
’ 
’ K
I numeri ~    L“R” si chiamano le
una rotazione combinata con un allunga-
mento (o accorciamento se ^ z ^Nfe~ ). Con   *"-"!´# µ²! otteniamo solo la prima di
€ -esime radici dell’unità.
queste radici:
Sia J ?cP h i%j ]b . Per € Ym~ allora, secondo Se poniamo ¶   *-""!´#°
µ²!
le formule viste precedentemente, abbiamo ™ k ?}š#~ K  K  9NK’"’’K  L“R”› "· $" n%  ¶ (!!
 ±&(*)n±%²
J ?cP  h i  j ™
 diventa, con la moltiplicazione naturale
Questa è la formula di de Moivre. in œ” ?}š J ]bI^^ J ^?}~ › , in accordo con l’output precedente.

Corso di laurea in matematica ¸ Fondamenti di informatica ¹Œº¼» Docente: Josef Eschgfäller


             
    

Corso di laurea in matematica Anno accademico 2004/05 Numero 7

paste In questo numero

Questa potente funzione di semplice sintas- 8 3$5,-:4!M@E&.-:A 0 # @5?;AE-:@ 24 paste

-"%  !""*%2&,'(N%&%6,-'(+L+5 # 07+1@' +,'%2&55(H:AI+5(1,?'0 :+50'+


si, che abbiamo usato a pagina 14, permette substring
un flessibile concatenamento di stringhe (o chartr
di oggetti convertibili a stringhe). La funzio-
ne prevede due opzioni, per il carattere   8 3$5,-"4!M%%@&.-:%%0 A # %%@%%?;A-"%%@%%" abbreviate

 !"     


di unione tra le stringhe generate (preimpo-
25 Espressioni regolari
I modificatori (?m) e (?s)
-"3%$54!U !"&.-:*0&1@*OQP2+)R6OQS2+1@*OQT"0
stato a ), e , inizialmente uguale
a . Assegnando a una stringa I metasimboli
, restituisce un’unica parola che si ot-
tiene concatenando le stringhe del risultato 8 @VR<@"9WS9W;5TR;T9GP;SX@" toupper e tolower
I metacaratteri

#
standard con quella stringa . Esempio:
-"3%$54!U !"&.-:*0&1@*OQP2+)R6OQS2+1@*OQT*+1 "%2(>(10 26 Il modificatore (?i)

-"3%"$54!6 !"$&.-7%2'0& # &()*(+$()*0 (+(,$'(+(,*(+(.-/(10 8 @*>NR6>)@"W6>QS6>QW:5T6>QRU>QTGP/>QS6>)@"


grep
regexpr

88 95:$;5,-* -"% !"*&1 @*OQ%2P2(+)R6+EOQS2(10 +1@*OQT*+


strsplit

s:s s:s
  5-4<=="!!"6>
Sostituzioni con gsub e sub

# "$%'# &()*(+()*(+(,$'(+(,*(+(.-/(10 8 3$54@V!UR<&.-:@70 +LW9S9W*+YTR9T*+LP;S;@ 27


I riferimenti 1, 2, ...
Parentesi tonde speciali

-"3%$54!6 !"&.-720& $'+, %2((10 -"% !"*&1 @*OQ%2P2(+)R6+EOQS2(10 +1@*OQT*+1 "%2((+


Lettura a triple del DNA

8 $-* plot

8 3$54@!UR@7&.-:+Z0 WSW2+ZTRT*+LPS"@"


Grafici di funzioni

-"3%$54!6 !"&.-720&,'&55="+,?!":07+1@0
Octobrina elegans

8 ="<@",?!";@"
Curve piane parametrizzate

-"% !"*&1 @*OQ%2P2(+)R6+EOQS2(10 +1@*OQT*+1 "%2(>(+ Bibliografia

-"% !"2&,'&5 5%7="BAC+,?0 !":07+1@7+ 8 3$54@*!U>NR6&.-:>)@70 +ZWU>QS6>QW*+LT6>QR6>QT2+HPU>QS6>,@"


8 3$54!6="&.-7<0 @DAE?!";@" chartr

 %6()[4U( Questa è una semplice funzione di trascri-


5]3!36&Nt2+Nu6+)"0
 !"
Con possiamo unire un vetto- zione di caratteri: è il vettore

 t
re in un testo su più righe. che si ottiene sostituendo negli elementi di

3$\()]`"%"'4"&a(Q^E33$5_$\D63>$(\+ 6>(+
Si vede che opera in modo vettoriale,
ogni carattere che appare nella stringa

u t
riciclando i componenti di vettori più corti

-"%!6(Qb"&.-/ 3!"+*()V[&Q4U33$(G$\0 ]\6*+,>(10: %2()[4U(10


con il carattere che si trova nella stessa po-

-"%  !""2%7&,'&50,-*+5 # 07+1@7+,*&55+,?'+507+


dell’argomento più lungo. Esempi:
sizione in (che quindi deve avere la stessa
lunghezza di ). Esempio:

8 3$51-:4!F@;&.-70 # @G?'9,-:@ 88 ^3$_V3$\"6> -"# %%'5]&5G3v!w36xx&5bGbxv7vwb7+5Gw+5x5xiv@bWv:T::+5+.-:Gx0 xvbbvwwvv:0


-"% !"2&,'&5 ,-*%6(H+5 AI# 07(10 +1@7+,*&55+,?'+507+ 8 b"`34"Va3V$3\"6$\> 6> 3$54!6& # 0
8 3$51-J4!F@E&.-70 A # @D?;AE-K@ Stavolta abbiamo dovuto usare per
[4 3$4! ! con output
l’output, perché non riconosce il carat-
@WiiTT@"5Wii@T"@"9Gii@TT"@WW"@@"
-"%  !""2%6&,'((&5,+L-*+5 #07 +1@7%2+,*(H&5AI5(G0 +,?'+507+ tere speciale .

con ,
 !"!  53$4!=  # 
viene usata spesso in combinazione
o . In questo modo possiamo trasformare se-
quenze genetiche scritte nelle lettere tradi-
zionali G, A, C, T in stringhe numeriche, ad

substring ca su . y{z"l
esempio per una successiva analisi armoni-

#
5 5- -?:?  !!33$54$54"\2\ &)*+,$*+)c"0
Per estrarre sottostringhe da una stringa si
usa . La sintassi è molto sempli- 8 3%" 5$5-4?:!U"  & !#!"30 $54\2&)*+)f0
$  -? !3$54"\2&)2+,c $0 ??3 # $!*&)*+)W0
ce: è la stringa che consi- abbreviate
ste dei caratteri dalla -esima alla -esima
posizione in , mentre è la  $ $ c
Se i limiti e sono vettori, viene restitui-
Con si ottiene un vettore di

 c  $ $ c %2(1@WTPRSgfhi2(
parole che costituiscono abbreviazioni, pos-


stringa che consiste dei caratteri dalla - to un vettore di sottostringhe, come nel se- sibilmente a 2 lettere, delle parole che so-
esima posizione fino alla fine di . Se su- guente esempio: no elementi del vettore . A parole diver-

j
pera la lunghezza di o se è minore di ,

d 5-? !3$4"\2&)*+1$'+. 54 -5?] !363&)$c"4"0\20 &)*+G@7$ +)c"0 8 3%" 5$5G-4P?:!URS & !jg3f0 $54\2R&)S*g+NP/fh:OQS*+)f65SONgh"f:0 
se vengono associate abbreviazioni distin-
la funzione restituisce la stringa vuota; se te, perciò talvolta un’abbreviazione contie-
supera la lunghezza di , viene restituita la ne più lettere di quante indicate nel secondo
stringa ; se è mi- argomento.

 $!(Q!"~"3%"3*&3"(Q|"*(_+*(Q^"(+a(Q} #*(\+4(N|"* (# +(Q4}4*(+ 4*(+


nore di , il risultato è .

-"3%6% 5$5(1-4e?!6D &.?-7!30 9$54"\2&, *!+)f*+1@*T"0( In questo caso sono quindi stati formati le
k.l'mn"o kQp'm5q"o kQr'm5no (Q^"3_*(10
8  !" #
t8 3%"$514| 2_'!6>N5&N]tG0 }"3"\:!36G}"&)??;3"1~37$!"*G^&,a:$!!"1| *# +,9W"010 ^37
coppie di indici , e , riciclan-
do il secondo vettore più corto.

oppure
Il primo, il secondo e l’ultimo caratte-

5

re di una stringa

- :
? 

! 
3
possono essere trova-
5
$ 
4 2
\ )
& *
 1
+ '
@  +1@0 5-? !3$54"\2&,*+)W*+)W0
%6(1eD?9 !*( 5-? !3$4"\2&)*+Q45]3U&)"00
ti con
.
, e
FONDAMENTI DI INFORMATICA a.a. 2004/05 Numero 7 25

Espressioni regolari I modificatori (?m) e (?s) I metacaratteri


Un’espressione regolare è una formula che Il punto  nelle espressioni regolari sta I seguenti caratteri hanno un significato spe-
descrive un insieme di parole. Questo im- per un carattere qualsiasi diverso dal ca- ciale nelle espressioni regolari: 5 , 8 , : , ; , $ , & ,
# Q #
portante concetto dell’informatica teorica è rattere di nuova riga. Aggiungendo : ; , R ,  ,  ,  ,  , ,  e, all’interno di $E& , anche
entrato in molti linguaggi di programma- all’espressione regolare, si ottiene che  - . Per privare questi caratteri del loro signi-
zione, soprattutto nel mondo Unix. Usia- comprende anche il carattere di nuova riga; ficato speciale, è sufficiente preporgli un 55
mo qui la sintassi valida per il Perl, che si farà cosı̀ quando con = si vuole denotare (talvolta basta un semplice 5 ).
può essere scelta mediante l’opzione 
una successione arbitraria di caratteri che SS
nelle funzioni previste in R per le espres- si può estendere anche su più righe. viene usato per dare a un carattere il
sioni regolari. Sotto Unix si può consultare Come visto a ...,  e  vengono utilizzati suo significato normale. Spesso però
   per la libreria PCRE. per indicare l’inizio e la fine della stringa. è sufficiente un backslash semplice.
Una parola come espressione regolare Questo significato cambia se aggiungiamo T
# indica scelte alternative, che vengono
corrisponde all’insieme di tutte le parole : ; : in questo caso  indica anche l’inizio esaminate da sinistra a destra.
che la contengono (ad esempio  è con- di una riga (cioè l’inizio della stringa oppu-
tenuta in 
   e     , ma non in re una posizione preceduta da un carattere () Le parentesi tonde vengono usate in
 
  .   indica invece che  si de- di nuova riga), e similmente  indica anche più modi. Possono servire a racchi-
ve trovare all’inizio della riga,   che si la fine di una riga (cioè la fine della stringa udere semplicemente un’espressione
deve trovare alla fine. È come se  e  fosse- oppure una posizione a cui segue un carat- per limitare il raggio d’azione di
ro due lettere invisibili che denotano inizio tere di nuova riga). un’alternativa, per distinguere ad es-
e fine della riga. Il carattere spazio viene
# #
I modificatori : ; e : ; valgono dalla empio :+%U8WV); da %U8WV , oppure per
trattato come gli altri, quindi con  si posizione in cui si trovano nell’espressione catturare una parte da usare ancora
trova    , ma non   
 . regolare; è possibile, come vedremo, anche (cfr. pagina 26). Altri usi delle paren-
Il punto  denota un carattere qualsia- limitare la loro validità anche a un seg- tesi tonde vengono descritti separa-
#
si, ma un asterisco  non può essere usa- mento usando la sintassi : ?>@
A  ; e tamente.
#
to da solo, ma indica una ripetizione ar- : >=
A  ; . [] Le parentesi quadre racchiudono in-
#
bitraria (anche vuota) del carattere che lo Se, mentre si usa il modificatore : ; , ci siemi di caratteri oppure il loro com-
precede. Quindi  sta per le parole ,  , si vuole riferire all’inizio della stringa, si plemento (se subito dopo la parentesi
  , ... , e anche per la parola vuota. Per #
utilizza 550 (che senza : ; ha lo stesso si- iniziale $ si trova un  che in questo
quest’ultima ragione    trova   . gnificato di  ); mentre similmente 55 . indi- contesto non ha più il significato di
Per escludere la parola vuota si usa  al po- ca la fine della stringa anche in presenza di inizio di parola che ha al di fuori del-
#
sto dell’asterisco. Ad esempio  indica al- : ; ed è invece equivalente a  in assenza le parentesi quadre).
#
meno uno e possibilmente più spazi vuo- di : ; . XY
Le parentesi graffe permettono la
QZ
quantificazione delle ripetizioni:
ti. Questa espressione regolare viene spes- Siccome stringhe prelevate da un file
Q[ R
significa   , 9\R comprende  ,
so usata per separare le parti di una ri- spesso contengono un ultimo carattere di
ga. Per esempio !" trova    , nuova riga, esiste un altro simbolo 55 2   ,    ed     .
ma non 
   . Il punto interrogativo che corrisponde alla posizione precedente
# ˆ Questo carattere indica l’inizio di pa-
dopo un carattere indica che quel caratte- a questo ultimo carattere di nuova riga,
re può apparire una volta oppure mancare, quando presente, altrimenti alla vera fine rola (oppure, quando è presente il
# #
quindi    trova 
  e    , ma della stringa. modificatore : ; , anche l’inizio di
non 
    . I simboli 55
0 , 55 . e 55 2 perdono natural- una riga), quando non si trova all’in-
Le parentesi quadre vengono utilizzate mente il loro significato all’interno di paren- terno delle parentesi quadre, dove, se
per indicare insiemi di caratteri oppure il tesi quadre. si trova all’inizio, significa la forma-
complemento di un tale insieme. $ 
%& zione del complemento.
denota le vocali minuscole e $' %& tutti $ indica la fine della parola o della riga
i caratteri che non siano vocali minuscole. a seconda che manchi o sia presente
È il cappuccio  che indica il complemento. I metasimboli #
l’operatore : ; .
Quindi ($ &  trova )  e     , men-
Abbiamo già spiegato il significato di 55
0 ,
tre $+*&,$ &  trova anche *  . Si pos- * L’asterisco è un quantificatore e indi-
55 . e 55 2 . I simboli 55 3 , 55 e 55 vengono ca che il simbolo precedente può es-
sono anche usare trattini per indicare in-
usati più o meno come in C e indicano il ca- sere ripetuto un numero arbitrario di
siemi di caratteri successivi naturali, ad es- #
empio $ -
.
/ & è l’insieme di tutte le lette-
rattere ASCII 0, il carattere di nuova riga
# volte (o anche mancare). Un altera
e il tabulatore. Vedere A
B . Esistono nu- il comportamento di  come vedremo.
re minuscole dell’alfabeto comune insieme
alla / maiuscola, e $10 -2 -
.3-4 & sono i co-
merosi altri metasimboli, di cui elenchiamo
quelli più comuni, sufficienti in quasi tutte + Ha lo stesso significato di  , tranne
siddetti caratteri alfanumerici, cioè le let- che il simbolo deve apparire almeno
tere dell’alfabeto insieme alle cifre. Per que-
le applicazioni pratiche: #
una volta. Un altera il comporta-
sto insieme si può usare l’abbreviazione 556 , 55
6 carattere alfanumerico, equiva- mento di  .
per il suo complemento 557 . #
? significa che può apparire op-
lente a [A-Za-z0-9 ]
La barra verticale 8 tra due espressioni 55
7 non carattere alfanumerico
pure no, con preferenza per il primo
regolari indica che almeno una delle due 55C ##
caso;
[0-9] – il d deriva da digit (cifra)
invece con preferenza per
deve essere soddisfatta. Si possono usare 55D [ˆ0-9] #
le parentesi rotonde: 8  89 è la stessa co- il secondo caso.  significa che vie-
55 spazio bianco, probabilmente
sa come $  & , ,:9  8 % ;  trova     e $E55 5555
&
ne scelta la corrispondenza più breve

%   . 55F non spazio bianco
possibile (altrimenti il Perl sceglie la
Per indicare i caratteri speciali  ,  ,  ecc. più lunga); un discorso analogo vale
#
a differenza dal Perl (in cui è sufficiente un per  .
singolo 5 , come peraltro in 56 e 57 ) biso- toupper e tolower . sta per un singolo carattere che deve
gna anteporgli 55 , ad esempio 55< per indi- essere diverso dal carattere di nuova
care veramente un punto e non un carattere %G: ; e 6G: ; restituiscono i vet- riga se non è presente il modificatore
#
qualsiasi. tori di parole che si ottengono sostituendo : ; .
Le espressioni regolari sono uno degli negli elementi di tutti i caratteri con mai-
uscole risp. minuscole. - all’interno di parentesi quadre può
strumenti più frequentemente utilizzati nel essere usato per denotare un insie-
trattamento di testi; spesso inserendo o to-
!:H  HH1*  H'; me di caratteri attigui. Per avere un
gliendo pochi caratteri in un’istruzione è

 %G: ; semplice - all’interno delle parentesi
possibile effettuare una modifica che in C
J G:  ;JNJ
IK graffe si deve usare 5 - o 55 - .
poteva richiedere la completa riscrittura di J
una parte consistente del programma. 0L
M0 *O
P0
FONDAMENTI DI INFORMATICA a.a. 2004/05 Numero 7 26

Il modificatore (?i) regexpr Si noti che nel primo esempio più virgole e
spazi mescolati valgono come un separatore
Aggiungendo  all’espressione regolare Siano di nuovo  un vettore di parole ed ! solo, mentre nel secondo ogni virgola genera
non viene distinto tra minuscole e maiusco- un’espressione regolare. una parte. L’espressione 3kh2%lh 3 viene usata
le. L’uso e il significato della posizione sono P"&,!&%'%)"*. è allora il vettore molto spesso.
uguali come per   e 
 ; in particola- delle posizioni in cui ! viene trovata negli Siccome il risultato - è una lista, per stam-
D
re si può limitare la richiesta a un segmen- elementi di  con la posizione uguale a J se pare l’unica componente di - abbiamo dovuto
to con 
 . La  viene da igno- non c’è corrispondenza; il vettore dei risul- D
riferirci a -RBB CC .
re case; infatti nelle funzioni per le espres- tati è fornito di un attributo 3).0R$*0#3
sioni regolari si può anche usare l’opzione che contiene le lunghezze delle parti corris- 23$9
(%gb*8(3%=3,7e%cf(3
 
 invece di  . pondenti. -
1.
"*1#'(%3ih2%jh23%)"* 
"#)- 
; D
23,4*(3%3,7(3%3,7
(3%3,9(3  BB CC
; D @ @=@ @
-P"&3,M(3% (%)"*. B C 9
 b*8
grep ; F
"&,-  BB CC
; DT< DUK ; D @ @=@ @
J J B C 7 f
 sia un vettore di parole ed ! un’espres- ; @ @
#% 0R$*0 
sione regolare. Allora "#$!&%'(%)"*  re- ; DVF DUF
J J
stituisce gli indici degli elementi di  che
contengono una parte descritta da ! , men-
Se vogliamo solo il vettore delle posizioni, Sostituzioni con gsub e sub
tre con "#$!&%'(%)"*#%,+*-. fornisce
dobbiamo applicare 
(L- al risultato;
questi elementi stessi. Se non viene trovato  sia un vettore di parole, ! un’espressione
questa funzione può essere anche utilizzata
nessun elemento, il risultato è - $/ regolare ed
una stringa.
per trasformare il vettore delle lunghezze.
nel primo caso, 01&'/ nel secondo. Allora 
-XR,!&%
2% (%)"*. è il vettore di
parole che si ottiene sostituendo in ogni ele-
23,4*(3%3,7(3%3,7
(3%3,9(3 
23,4*3%3,4*53%3,63% mento di  ogni parte corrispondente ad !
-P"&3,M(3% (%)"*.
3$78+(3%3,7(3%3,9(3  con
.
"& 
L- )- 
; DT< DUK
J J
-"#3:"(3%'(%)"*. DFK<>
"& 
L- '#)-#% -
-X#3=3%33%3$b# )6&3%,"*.
".&)-2
; 3).0R$*0#3 "#)- 
-2$/ ; DVF DUF ;m@ DFK<> @
J J b& )6

-"#3:"(3% (%)"*.
Definiamo adesso due funzioni nostre, di cui 23 *O(3%3)X(3%3$(3
".&)-2
;=<?> -
-X#3B$C3%3 23%'(%,"*.
la prima restituisce le parti trovate, con una
"#)- 
stringa vuota in mancanza di corrisponden- ;m@ @=@ @=@ @
*O X 1 .
-"#3:"(3% (%)"*&%,+*-. za.
".&)-2
;A@ @=@ @ 3,

Jb
1Jn(3
78+ 7 #L"1+UIO-.1.S,!#%'
W -
-X#3'J(3%3%=3% (%)"*.

P"&,!&%'%)"*. "#)- 
-"#3: B)49C3%'(%,"*. ;m@ @
"

(L-2,.
 

(%cb
1(%on
".&)-2 *-
(L-2'&,.
2%3)0R'*0#3 
;EDGFIH D

1-X.
1.'%)"
2%,"
Q*-J Y 3'XX3
;IZ -
-X#3'X(3%31X.23%'%)"*.
-"#3: B)4J6C3%'%)"*. G8**V"
5.=A1-.V!
; "#)- 
".&)-2 ;m@ @
;EDGFIK
T+U*U*V8T+R X X
; DT[
J -8V-E*UA
"8
#L"
U=O- 1\,!&%'
-"#3BLCM(3%'%)"*&%,+*-  W Nell’ultimo esempio si vede che l’elaborazio-

L- ,P"&,!#%'(%)"*.Y
".&)-2 ne continua dalla posizione già raggiunta.
;A@ @=@ @I@ @
4* 7 9
-X si usa meno e si distingue da 
-X per
Esempi: il fatto che solo la prima corrispondenza di !
-"#3: B$C3%'%)"*. in ogni parola del vettore  viene sostituita.
D K>H D]D> D <>HD D]K
".&)-2 23$/ J J 3%3$/ J 3%3' 3 
;IKI<N> >H^^ ^^`.D]
! 3
 8R_ 3
-#L"
2,!&% 
-"#33%'(%)"*  "&,-  I riferimenti 1, 2, ...
; DV>AD p(p p(p
".&)-2 J
;EDGFIKI<I>IH
Le parentesi tonde possono essere usate
+ #L"1+(,!&%'
 semplicemente per raggruppare gli elementi
-"#3: $M(3%'%)"*&%,+*-  "&$+.
;a@@=@1>HD@I@ D]@ di una parte di un’espressione regolare. Al-
".&)-2 
;A@ @ lo stesso tempo però il contenuto della par-
9
te della corrispondenza rilevata viene me-
^^D ^^F
morizzato in variabili numerate , , ...
Con l’opzione OP8 e togliendo (in con- che possono essere utilizzate successivamen-
trasto con ciò che dice l’aiuto) "* , strsplit
te. Questo aspetto in R sembra però molto
l’espressione regolare viene considerata co-
1.
"*1#'(%,!&%,"*. restituisce una lista meno elaborato e versatile che in Perl e pro-
me stringa cosı̀ com’è: che, per ogni elemento P del vettore di pa- babilmente è difficile imitare, tranne in casi
K H role  , consiste delle parti che si ottengo- molto semplici, il potente modificatore q del
&3,+#B CQ 3 no suddividendo P in corrispondenza all’es- Perl. Esempi:
K
-"#3,+#B C&3%'(%)"* 
pressione regolare ! .
".&)-2
; 3)XE0=O88&r3
-2$/ ^^D ^^D
 3,9
(%%cb*8(%d7e%gf3
 -
-X#3  Q&3%3 3%'(%,"*.
K -
1
1"*1& (%3B%dCQ3%)"*. "#)- 
-"#3,+#B C&3%'(%,O.P8. D ;m@ @
"&,-RBB CC Xm0UO8&r
".&)-2 ;a@ @=@ @=@ @I@ @
;ED 9
 b*8 7. f D F K> ]]
23'P 3%3'P 3%3's 3%3 3 
^^ ^^D ^^F
3,9
(%%cb*8(%d7e%gf3 -
-X#3:.B$J5CQ 8Q 3%3 B C3%
Definiamo una nostra funzione: -
1
1"*1& (%3ih2%jh23%)"*. (%)"* 
D
"&,-RBB CC "#)- 
;a@ @=@@=@ @N@ @=@ @ ;m@ D @=@ F @=@ K> @=@1]]@
R,"?GO-.S$!&%$P%)"*6. 9
 b*8 7 f P&B C P#B C s&B C
"#,!&%'P%)"*&%,+*-"*
FONDAMENTI DI INFORMATICA a.a. 2004/05 Numero 7 27

Parentesi tonde speciali Grafici di funzioni Per vedere la figura sullo schermo bisogna
/? 2)?.
G eliminare la prima riga e inserire B  
Esistono anche parentesi tonde speciali il Il grafico di una funzione (di R o definita < -{Z%?GG[
prima di .
cui contenuto non viene memorizzato nelle da noi) si ottiene con la riga Il programma contiene due nuove istruzio-
variabili  ,  , ..., di cui conosciamo già /
1)- E *G  2- 2

     ni,  , che viene usata per aggiungere testi
, e . Nella tabella  indica un !.=%Q,)? 2) .)6,2
a una figura, e B , che crea un fi-
segmento. adattando i parametri di ambiente (dimen- le PostScript che può essere agganciato al fi-
 2- 2
 Parentesi non memorizzata. sioni degli intervalli per l’ascissa e per le Latex. Il primo parametro di  indica
    deve essere seguito da  . l’ordinata, colori, linee ausiliarie) secondo il punto a cui si riferisce la posizione del te-
,)?
    non deve essere seguito da  . le necessità. Il parametro  deve essere un sto; se il parametro è uguale a 4, il testo
   deve essere preceduto da  . vettore di valori reali che matematicamen- viene inserito alla destra del punto di riferi-
 /
1)-
  non deve essere preceduto da  . te siano ad esempio S@T)UVVVU6@W X ; con- mento. Quando questo parametro manca, il
 62- 2
  giunge i punti S@T0U6YZS@TXXUVVVUS>@WUY=S>@W X[X testo viene centrato nel punto. Vedere 
 Attiva il modificatore per il
contenuto della parentesi. con segmenti di rette. Se i punti di per le altre possibilità.
   sono sufficientemente vicini, avremo Per ottenere una scritta piccola abbiamo
 Disattiva il modificatore per -
l’impressione di una curva continua. In ge- modificato il parametro grafico B  (nella
 
il contenuto della parentesi.
  -
 Attiva il modificatore per il nere, se la funzione non oscilla troppo, è suf- terza riga); B  è un’abbreviazione per cha-
ficiente una risoluzione di \EV \&] , definendo racter expansion.
 
contenuto della parentesi.
   -^  * " * " FJ%(J
 Disattiva il modificatore per   .
il contenuto della parentesi. Per figure piane possiamo usare con gran-
de vantaggio la rappresentazione comples-
Le parentesi tonde speciali non occupano sa. Per un grafico di funzioni possiamo scri- Curve piane parametrizzate
posto! vere
Una curva parametrizzata in | o è un’appli-
/
1)- E G  cazione }~€+s+‚ƒ| o , dove € è un intervallo
_  D
di | . Per ogni „†…‡€ abbiamo un punto }mS(„X
Lettura a triple del DNA La comodità della forma complessa sta so- del piano, le cui coordinate @ZS(„X ed AS„X di-
prattutto nel fatto che possiamo cosı̀ fa- pendono da „ e sono, appunto, legate alla }
Nel codice genetico l’aminoacido isoleucina cilmente eseguire operazioni geometriche, dalla relazione }ˆS„XŠ‰‹S>@=S(„XU
AS(„XX . In questo
è rappresentato dalle triple ATA, ATC e le quali nel piano sono tutte esprimibili modo sono definite due funzioni @5~Œ€Es+‚| o
ATT. Una stringa deve però essere letta a mediante operazioni algebriche con numeri e AŽ~&€+s‚| o che a loro volta determinano la
triple, quindi il primo ATA (a partire dalla complessi. Per spostare il grafico di 1 verso } . Spesso si scrive allora
seconda lettera) in l’alto è sufficiente
/
1)- E  G  @‰e@=S„X
TATATCTGCAATTTGATAGATCGA  __  D
A†‰eAS(„X
non verrà tradotto in isoleucina, perché ap- per girarlo di `\&a è sufficiente
partiene in parte alla tripla TAT e in par- /
1)- E   G   Notiamo subito che il grafico di una funzione
 D _  D  reale Yƒ~Œ€+s+‚9| o definita su un intervallo è
te ad ATC. Possiamo trovare le triple che
corrispondono all’isoleucina con il seguente un caso speciale di curva parametrizzata che
e cosı̀ via.
procedimento a più passi: può essere rappresentato nella forma

 !!!! @‰‘„
"   #
$ " %%% &(') &* +*  *(,)-.)/0
Octobrina elegans
,.0
12 "  A’‰HYZS(„X
354 !)!!! 4 Rappresentiamo il grafico della funzione

,) 62.) 6,)/62 " * +*(,)-./0 77 R si presta particolarmente bene per la rap-
,.0
12 6,  688 b cedgfh ikj @ presentazione di curve piane parametrizza-
354  494  4:4 ! 4:4  4:4 ! 4 ]mln@o te, perché, una volta definito l’intervallo che
3 4  4;4 ! 4;4 ! 4 2 si vuole usare e che deve essere rappresen-
< .=%(#.)-6,>=7( *
,=*(,  .?/-0 a cui in R diamo il nome pB : 2
8 tato come successione finita di punti, è suf-
,.0
12 < ficiente l’istruzione
354  494  4 2:;G$1 ) 2 ?61e
p
K B 
1=>L B  q+  R /
1)- + 20 E*>F20 
D D 6_)D 
nel programma per ottenere la curva.
nell’intervallo r sut&U6tv . Anche per le curve parametrizzate utiliz-
plot zeremo la notazione complessa, quindi
Diamo solo le varianti essenziali di questi }ˆS„XŠ‰“@ZS(„X=l”AS(„X•
,0/?2
comandi. In particolare useremo solo
per predisporre la finestra grafica, non per e nel disegno della curva in R useremo
il disegno stesso. /
1)- + 20 F20 
,)/?2  _ D
richiede (nell’uso che ne facciamo)
come primi argomenti l’indicazione dei li-
ma anche, se la } è rappresentata diretta-
miti per le coordinate @ ed A , entrambi ,– 
 *" mente in R come funzione a valori comp-
nella forma B 
Octobrina elegans
. Se vogliamo disegnare
lessi, istruzioni della forma
il coseno, possiamo ad esempio impostare

12  C ,0E* ,0 /
1)- +(,–0E>20 
l’intervallo per @ con  B D D e

12F C * mediante le istruzioni
l’intervallo per A con B   .
I comandi di base per impostare la fine- !.=%Q,)? 2) .)6,2 ? 2)? " .)
1  %Q,0 E*CO+* %>O
stra grafica sono contenuti nella seguente /  2?  CB x+*x &Py/ w 2)?FB  z+*Cz EP 
funzione della nostra libreria: ,  . " # B >F-//?N* - J=B %(L)
Bibliografia
!.C/  2)? *C/  2?F* ?B .10   -0
!.9;G$1 2)?61H *>F* ?.10 -I* 2 -^x+*Cx+* " FJB %J B (13558) J. Friedl: Mastering regular expres-
. F * B  I*(   .#B J) B /
1)- E>2 220  sions. O’Reilly 1997.
 (  .-6,=( .#*>L) &*M?6 0 >J*CJ*>J*>J0 &*
K6,  .   B 2)- 2Cx_  pB %OE* D 2? " .)61  -/-#  10 E*(,0? L)
/N < J%>O &P  %?GG &P pB
< -{= 13936L. Wall/T. Christiansen/J. Orwant:
,)/?2 *CF*2F,0-(1* /  " *>F/  " * Programming Perl. O’Reilly 2000.
 

,.  F*   -    E*G.  )-%Q,)/?2 B ?.10 B -) R

Corso di laurea in matematica — Fondamenti di informatica ˜‡™›š Docente: Josef Eschgfäller


             
    

Corso di laurea in matematica Anno accademico 2004/05 Numero 8

Curve di livello In questo numero

B  &0-%!(!#/(2(A
¦ ¢ ¨¡*« ¦<¢h¡£¨¬¢¥¡ ¤§«¦:­ ¢Š¡1¨ª¢ ©
Curve di livello di una funzione in due va- per ottenere una figura senza scritte sulle

    (
 %
 "
 #
! %
 $#V &
28 Curve di livello
riabili non sono altro che gli insiemi della curve di livello useremo .


= (
M M
L’iperbole
forma , dove è una costante. In Nella funzione abbiamo posto


particolare per si ottengono gli zeri
di ; spesso però è interessante guardare co-
me variano queste curve con il variare di
l’argomento uguale a , perché in questo

 %"!# $"& '&1),+"-%.#/"+(+"-


modo possiamo esguire più volte il coman-
do (o ) sulla stessa gra-
29
¦:¦ ¢¢Š¨¨¡*¡ «« ­¤„¡1¡ ¢
Il nodo

e soprattutto in quel caso, cioè quando si di-


   +(=%RX/8
fica senza cancellare il contenuto preceden-
¦ ¢ ¨¡*«®¤„¡
+(/ .#/"+ B
segnano le curve contemporanea- te; riguarda la grandezza delle scritte
mente per più valori di , in modo simile co-
me in un atlante si disegnano curve di punti
con la stessa altezza o con la stessa quantità
+"-%.#/(+"+"-
con cui vengono indicati i valori dei livelli.
(nell’originale ) è un singo-
lo numero o un vettore di numeri che rap-
30
Il foglio di Cartesio
La chiocciola di Pascal
Lemniscate
di precipitazioni o con la stessa temperatura
media ecc., si parla di curve di livello.
presenta l’insieme dei livelli che vogliamo
disegnare; con

' 1
& ,
) "
+ %
- #
.
(scelta prestabilita
"
/ (
+ "
+ - +"-%.0/(+(+"- 2"A Spirale di Archimede
Spirale logaritmica
 "!#%$"&
In R a questo scopo si può usare la fun-

'(&*),+"-%.0/(+(+"-  ^L6  _a+"`"-% .0/(+(+" ^- 20O7b#A: 9\CO9]#J


in ) viene mostrato l’insieme degli
La cissoide

¯°‘¤*±²¯ ¢
zione che, nella versione più sempli- zeri di , con gli insiemi
31 Cicloidi
ce, si usa come nella funzione che , e .
Proiezioni lineari

'&1.0),=(+"+(-%.# &0/"-+(2+">-3?#25@(@<4(9$(+"6-%.#%!0/"-(+(%+"- 2(A<78:9 9;:9,4<9


creiamo per la nostra libreria:

%#!#%$"& 8 ;
Dobbiamo ancora spiegare i primi tre pa- L’elica

K - 4LB %&07D-%- !(M"!0/ "/!020-(C9D="(+N(+(7,.# &#=(+"/(20 &0C-O9 BF9,E>(?#/ @(B(@0B J(&0J /2(AG)IH6J
rametri di . e sono vettori di Data e tempo

,c*d0e(f"f(f(eFc:gh
numeri che corrispondono matematicamen- 32 Liste

.  0"!#=(+(%$" &0&G-72"8:%9$";:!#9.#/&<=(+(78: &69;<-O9,946+(/J.0P /(+ B 2"+#-%.#/(+(+#-O9 .#,i="d+(e(&0f(-f(f(e%i0j1


te a due successioni finite e Files e cartelle
Numeri esadecimali
B%E B(B
. Il terzo argomento (il nostro

+M("(&#=%(R6+= Q#2#/+(8""= R02(+(AG/(&#+ ),S"/NB 2<T 9D+B 7 Q"%B &0M(%&02-%!"- !#!(!#//N/(9 UA6&#J/N9=9 M(M"2V6J W klnm d%dof(f(f m dpg tu
) deve essere una matrice Bibliografia


 (
 (
+ 
 #
& / m f(j f(ds fqf(f(f(f(fr f m f(j f"g f €‚|„ƒ {³
FB E / B"B B  &#/ m6xzy
M&0= Q#+(=%R6/(+ B v
Il significato dei parametri e

tro +(=%RX%&0-%/!(8 !0/


(della matita) è chiaro. Il parame-
riguarda i parametri di righe ed colonne; il coefficiente w ,c y eFi x  Questa curva è la cuspide o parabola di
Neill:
e della funzione originale, di cui
il primo, se posto uguale a , implica V(Y(?"Z
è il valore nel punto della funzio-
ne di cui vogliamo disegnare i livelli. Que-
che sulle linee di livello vengono indica-

+"=%R6/8
ti i valori che corrispondono a quei livelli,
mentre indica la grandezza delle La funzione
. %$#!#/ &<78<9;:9,46J '&1),+"-%.#/"+(+"-
sta matrice è il risultato di un comando

è stata predispo-
scritte, di cui abbiamo bisogno anche noi
perché il valore preimpostato per la vi-
sta per essere utilizzata in due modi: possia-
mo o indicare la funzione (e allora 4 '&*),+#-%.#/(%+($#+#!#-/ &
%$#!#/ & .#="+( &0-
viene chiamato all’interno di ),

' &*) E  B ! B  &0- E ! B  &0-%!(!#/(2(AG),[


sualizzazione sullo schermo risulta troppo
grande per le immagini che otteniamo con oppure usare come parametro una
matrice generata con un precedente,

M&0= Q#+(=%R6/(+ B 7 B %&0-%!"!#/(UA0J


; per queste ultime sceglie-
remo quindi . Si noti che nella ad esempio quando, in più esecuzioni con la
nostra funzione è definito attra- stessa matrice, vogliamo colorare le curve di
verso l’espressione booleana ; livello ogni volta in modo diverso.

}{ |~€‚|„ƒ†…
La possiamo anche ottenere con la parame-
trizzazione

c^L´ ‹
L’iperbole

Per ogni ˆ‡ questa equazione rappre- '+(&*= !#) E20 OB ! 7”(B ]N%&69D]#- EJ!<P 7(E ’D=](&G“(”"7IR#- E•(2:/ &’;"R0/((+(+#+(-:) Q<E6B’\J ’"9H:9H0J ihL´\µ
c a‰ˆ c i !"4—'&<2 2˜B 7+(/4–<=$"!#76N”(]N%9!0+(9=]:-!# 9IR#N;(9D2(78:A*&9)I;66A0J3-(C(J 8#/(T28"V6”(J ;#T ;
senta un’iperbole equilatera con asse uguale
all’asse delle . Per invece abbiamo

.#'&*=(+(),+"&6- .#- 2"/(%+($"+"!0-N/ 7,!<&<9,7,!<!<99.#!<=(9,46+(J &6- 2.#=(+" &0-O9


un’equazione dello stesso tipo con ed in- mediante il semplicissimo programma
i
vertite, che quindi corrisponde a un’iperbole

ŠL B '+(&1=!#) E2# BO! 7D”(B ]N%&09]#- EJO!<P 7E](=“(&<”#F7IR0$ •(BFE2X-¶p;"M"/"/(+(” E+(=Q&*¶) E6J B ’"9H:9H0J
+'&*"),+"%-%&6.0- .#/(-%!(+(/(!#+"+(+"/- 2"2-NAGB 7,!</ ),!"[N9,!<M#9 - 9.#4(4<=(+(7 B &6/(–:- 27.#”(=(]N+"9D]N&09IR#-O;(9 2"AG),[#J9A0J(J
con asse uguale all’asse delle .

!"'+"&G2-%0B 7+(// –:=B !#7,7!O:”0C%·F9A:+(]N= 9,9\!#!C%A<:·%¸#9D9IR#J ;( &2(XA*-()IA0/C(2J VXJ


Per infine l’equazione diventa
c:‹ŒŽiO‹,c_ŒŽi c}„i‘L BFE B(B B
e rappresenta le due rette ihc iŠŒ‚c ed .
M"/ .*),/4(4< 7\&#J /(2"]N9D"+( &#/2<’,&#/M:’"9 %&0- !(!#/2(A6J M"/.*), 4(4G7\J
™ Œ‚bOeFb"šX› ™ Œ‚bOepb"š L’analisi dei livelli avviene sul quadrato

Of `
suddiviso in ogni coordinata

B!"2 /–<7”(]N9]:9IR#;(2(A*)IA0C(J
con una risoluzione di :

'&*),+"- .#/(+(+"-
Usiamo la funzione due volte. In-

i^œ}c 
fatti la prima volta disegniamo in nero e con
le scritte tutti i livelli diversi da , la secon-
da volta solo le due rette , in rosso e
senza scritte. Nella prima istruzione i livelli


scelti corrispondono all’insieme

Otteniamo la figura che mostra le curve di

cN‹ŒŽi‹
livello della funzione definita da
con questo programma in R:
*c*eFiO3 Œžbe"Œ`Xf ŸeŒ`6e(Œ‚OB /f ŸO!"epM#N-%f4(Ÿ4 e`6e `Xf ŸOeFb6 
usando la funzione vista a pagina 7.
FONDAMENTI DI INFORMATICA a.a. 2004/05 Numero 8 29

 
 fUk
Il nodo ottenendo cosı̀ /j. l L1 k 0
Con lo stesso programma che a pagina 28
,g. fUkb-
abbiamo usato per disegnare le iperboli, so-
stituendo solo la riga riguardante la funzio-
l 1Lk 0
ne con
  "!#$!&%(')*%+)*%('
possiamo disegnare la famiglia di curve le
cui equazioni hanno la forma
,&-./ 0213/4-5136
In questo caso la curva singolare, in rosso, è
la curva
,7-./4081/ -
   e
Anche la curva ,7-./ 0C1/
la possiamo otte- Già in questo esempio si vede però che il le-
nere cambiando semplicemente la funzione game tra equazione e rappresentazione pa-
nel nostro programma. rametrica può essere abbastanza complica-
l 1mkJ0
ro in k .nD l
to. Infatti il denominatore ha uno ze-
, per cui il dominio dei para-
G DEoiID l K G D l IoLK
metri si decompone nei due intervalli aperti
e .
G D l IoLK
La parte della curva che corrisponde a
, colorato in rosso nella figura che

con kL.nh
segue, inizia nell’infinito a sinistra, passa
per l’origine, formando un cap-

9$: .<=?>&; @ ACB ,&-EDF/405D / - 9


pio che ritorna all’origine senza raggiunger-
G DEopID l K
I livelli indicati sono i livelli della funzione lo. La parte che corrisponde a , co-
krqsqth
. Si vede che la as- lorata in nero, inizia (per ) vicino
k
sume valori positivi alla destra della curva
converge a Dl
all’origine e si estende verso destra con che
da sinistra. Anche questa si-
singolare e valori negativi alla sua sinistra.
9HG /HIJ,&K
tuazione può essere riformulata nel linguag-
Provare da soli, eventualmente ingran-
gio della geometria proiettiva.
dendo la figura, a scoprire il segno di
all’interno del nodo. L NO
LM NO Vediamo qui che una semplice modificazio-
ne dell’equazione implica un cambiamento (− 1, ∞)
sostanziale nella forma della curva. Alcune
Purtroppo talvolta il software per la rap- differenze scompaiono comunque se si con-
presentazione di curve può ingannare, e ciò siderano queste curve come curve definite
non vale solo per R, ma anche per Maple, sul campo dei numeri complessi. Come una
Mathematica ecc. In questo caso per esem- retta complessa corrisponde a un piano rea- (− ∞, − 1)
pio è chiaro che l’origine è una soluzione le, cosı̀ una curva complessa corrisponde a
dell’equazione una superficie reale. Completate nel senso
,&-./ 0PDQ/4- della geometria proiettiva le cubiche finora
viste diventano superficie di Riemann.
eppure non appare nella figura (dovrebbe
essere un punto rosso nell’origine). Quindi
Il programma utilizza le funzioni
U [
per u `C`UvV
le frecce e per l’inserimento di testi.

T+CXxwx7 Jy Ryx#z4pbyR]*&#%(+U#


non ci si può fidare ciecamente dei disegni
che si ottengono con questi programmi.

{ ` S T UVV` T Y_Z'|)C u `U[CV) T u ` S T V7_} "}#


{^ `Yu U^ u U74)+4^ u ZU+U4#&~ZTu``Y€U[ Y ‚_"!C# [^^CvY_b#
C'y  ƒUƒU[[  T XX77JZ'yW„U###&#&~s~s!!U'y  …J…J†d†d T XX77b'yW„U####
T T
u ``U^[vV7"XU y&W !S Wy&\ "C 'u U"C!C^'4[ U'W ZC^ _]`U[a _b#
y ƒU[  T X7Z)Uy S]‡ #C#&~s!y …(†d T X4)Uy S]‡ ##
C`'`U ƒUv[ V7 T "X7y&Z!)Uyy&"S]Cˆ '#C#&"!C~s'4!C ' …(†d T X4)Uy S]ˆ ##
u
C U^V[[‰Y)XUW S]W‡ S W„W\ €u U!C W^[S UW'yW# #
Nelle applicazioni, ad esempio in statisti-
ca, ancora più importanti sono però le forme
^C([CV4 X7"#&ZC^ _]`U[a _b#
C UV[‰YT)'W Z)Uy S]ˆ ]U! W S Wy#
reali, la cui classificazione è molto difficile.

U[YZ)Uy S +Ry S +C7


Non siamo riusciti ad ottenere l’origine co-
[ T `U[CVVd"` T _C_
me punto della curva mediante il program- Il foglio di Cartesio ^CVY)Uy&b(C (*C!#&C_b#&_b##7Z[ CW S]ˆ #
ma; dobbiamo quindi, appellandoci ai risul-
U[[Y J`Uy [CS 'V)UVy7d "` _C_
^CTVY)C(U (U! T)Uy#7_b#&_b#C#&Z[C W S]ˆ #
tati della matematica, aggiungerlo a mano: Questa curva ha l’equazione
   "!#$!&%(')*%+R*%(' / 0213,&0PDQfU/ ,g.ih
TaCSU[SCc(S C V7 dW b# "W  T (XU C'WYZ[ CW S]\ Z^ _]`[a _b# Come si verifica facilmente, la curva può aC^C[(c [CS V4  T YXb7# "##
S essere rappresentata in forma parametrica
mediante
FONDAMENTI DI INFORMATICA a.a. 2004/05 Numero 8 30

 Ugbh0
ji#0Uk 
La chiocciola di Pascal Spirale logaritmica
‚ƒ „
La chiocciola di Pascal ha l’equazione La spirale logaritmica r possiede la
 
   rappresentazione parametrica
tW†„ … vwx0u

‡W „ … xz {[u

Si noti l’origine che soddisfa l’equazione.


!C,#!#"8&%!')(!*8+!.!A,f#+!A!.!.",!#"!9-& '!1)2/12#3
.8-94!5# %)+2/1)2#3=7l.!-9:!5 %<+2/12#3
!#"$&%!')(*+,-!-!./0'!12/123 #-9&%?>@85m$:8A!.8.!9B=m3 C#!"$8&%!'<(*8+!.!!@$" '!1)2/1)(3
.!-4!50%)+*&6/1)(/(3 7 .8-9:!5# %)+!;1<;3=7 !&%).!-94/1).!-:/1D9E"!A5F3 .!-9485 %)+!;!*/1);*#3 7l.!-9:85 %)+I9S1I,S3 7
-&%?>@!5&':8A!.!.89B&'3 59AG/%<+2/12/1H>:!5!*&*#I!3 -9&%?>@!5/':8A8.!.!9B&'$3
C%).!-9!4/1).!-9:/1D9E"!9A!5F3 J 5 JK E=#"9,EW%4/1:#3 &%).!-4/1).8-9:/199E"89A5F3
4!5#9AG/%)+!*&61)(&(1?>:85!*&H*#I83 %4N;!O!:N;3N;!+%I9SP,4N;8+2P,4P9:!O8(P,:=N;3 859AG&%)+I*/1$I*/1?>:85!*&H*#I83
:!5#9AG/%)+8;1);1?>:!5!*&H*I!3 R ! - .!9#"958 K A&%H&1HC1 J 3 ."$EA0%)A49C%ˆ2#3P89 %H=3=1)A49%Hˆ2#3!P!!"$EC%3!3
J 5 JK E,#"9,EL%)4/1:#3 !C." R A!.!." %&1H&1 R -!.!9#"95 R -!.!#" 1D!,#"!A!5!*#3 T8A R  J!J %3
M K 5!4N;O8:N;!+!;P,4/7 K N;8+4N;!+!:N;!Q TA R  J8J %3
R -8.!9#",5 K A9C%4/1:/1 J 3
." R A8.!." %4&1:/1 R -8.!9#",5 R -!.!9" 1
8#"!A5!*&S/1 L’equazione simmetrica
." R A!.!.",59A9T" J!J %9AG/%)+8;1);1?>:!5!*&S#3=1*#3!3 )0n=8] Uo= La cissoide
." R A8.!." %4&1:/1 R -8.!9#",5 R -!.!9" 1D$A!99A!58;1
!.!9A!5/'HAT&'!1D!"!A58*#3 La cissoide corrisponde in coordinate polari
T8A R  J!J %3 può essere scritta nella forma alla relazione
)0n=80n=
b!aqp
‰xz {^ZUŠ‹{ Z
r

e rappresenta un cerchio unito all’origine. e possiede quindi la rappresentazione para-


Lemniscate metrica
Una lemniscata è una curva con equazione tqx$z {  Z

 UWV&)CX$= Spirale di Archimede Œqx$z {  ZŽŠ$‹{ Z


Una curva inscoordinate
VC<Z
polari data da una
dove relazione r può essere immediata- uY‰Š‹{ Z
VCX=YWZC[ !\]0^`_&=
Ponendo abbiamo
mente riscritta in forma parametrica:
u
euxz {aZcqxz {0aZ
tWVCHu vwx0u
è una forma quadratica ellittica o iperboli- yWVCHu xz {nu
ca. cosicché
u
Si dimostra facilmente che la lemniscata
VCX=aWb xz {0Z
|Z
si ottiene dalla conica mediante La spirale di Archimede r corrisponde b`u 
inversione al cerchio unitario; nel caso ellit- quindi a
tico anche l’origine (che non può essere otte- }~u0vwx0u
e la rappresentazione parametrica diventa
nuto dall’ellisse mediante inversione) sod- u
y~u0xz {nu ‘
disfa l’equazione. b`u 
La lemniscata si dice iperbolica (o di Ber-
VCX$=cdb
noulli) se la conica è un’iper- u[op
per . u’
bole, ed ellittica se la conica è un’ellisse. La y
b`u 
lemniscata ellittica ha varie applicazioni in-
teressanti, ad esempio in statistica.
 U0
e=

!#"$&%!')(*+!.!A,f+"$A9>#!."!9-& '!1
!C,#!#"8&%!')(!*8+!-9#€"$fATA/ '812/12#3
2&1);/S3
.8-950%)+!;*/1<;*#3=7^-&%?>@!5&':8A!.!.89B&'3
.!-4!50%)+I S/1I S3 7 .8-9:!5# %)+I=1$I!3 C#!"$8&%!'<(*8+!"8!9",TA/ '812/12#3
!&%).!-91).!-91D99!E"!9A5!F3
-&%?>@!5&':8A!.!.89B&'3 .!-95# %)+!;1<;3=7 -&%?>@!5&':8A!.!.89B&'3
59AG/%)*/1);*/1H>:!5!*&*#I!3
C%).!-9!4/1).!-9:/1D9E"!9A!5F3 &%).!-1).!-1D9E"!9A!5F3
."$EA %#P!90%H3=1HP!!"$EC%3!3
85#9AG/%)+#I S1I0S1?>:85!*&H*#I83 859AG&%)+2/12&1?>:!5!*CH*#I!3
TA R  J8J %3
J 5 JK E,#"9,EL%)4/1:#3%)4N;O!:=N;38N;8+%4N;8+:N;3 K 5#IO N;
R -8.!9#",5 K A9C%H&1H&1 J 3 ."$EA0%H=N;!ˆ K 1H=N(8ˆ K 3
." R A8.!." %HC1H&1 R -8.!9#",5 R -!.!9" 1D!"!A58*#3 T8A R  J!J %3
T8A R  J!J %3
FONDAMENTI DI INFORMATICA a.a. 2004/05 Numero 8 31

Cicloidi sul piano. In R allora usiamo le seguenti


W *<%X3BY#12U#/3Z8.D>7A0[>760K>JD,DF0F\G.R:12UQ3E]IYF istruzioni:
Cicloidi sono curve che si ottengono facendo -I+Q^3P90A,_2(1> 8.C_2(`1>ERO0I,C@&EC80F W I W e0U/.-10*.U3B-F
rotolare un cerchio su una curva guida. Se :12UQ,+37D,[,1<a3J-9,+012U"3B-F0F.a810_3 89,/*,+3J-F0F0F ‹ %*,60A3P/37H3B-FM>7O3B-FM>73B-F0F
la distanza del punto mobile è maggiore del -QH-43 86a0D,?,1>05Jb10/0:0*,1<;,Qc/*<d0e0UQ5ZF eI+G.(,(:O3B-@> W FMLN:,1.UQ,+3EeMF
raggio del cerchio, si ottiene una cicloide al- :12UQ,+3P60f4&B?,1a3B-98&B?,_0+01.U@3B-F0F<a
810_3Z8<98&B?_0/*,+3J-F0F0F
-QH-43 86a,60g,1>05Jb10/0:0*,1<;,QhG0:,:.e0US,G-G5 F
lungata, se è minore una cicloide abbrevia-
ta. Una cicloide comune è una cicloide in cui
:12UQ,+3P68&B?,1a3B-9C"&BK,_0+01.U@3B-F0F<a
la curva guida è una retta. Se la curva gui-
810_3Z8<9C@&BK_0/*,+3J-F0F0F
-QH-43 86a,A0f,1>05Jb10/0:0*,1<;,QhG.R,R,%Q<i10G<-G5 F Ž  
da è un cerchio, si ottengono epicicloidi fa- L’elica
cendo rotolare il cerchio mobile all’esterno
:12UQ,+3P64&B?a,A8&B?,1<a,C@&Bg0?,_37?,_0/*+3B-F<9/*,+37?_.-F   

della guida, e ipocicloidi facendolo rotolare a810_37?,_0+01.U@3B-F<9+012U@37?_.-F0F0F,F
-QH-43 86a8<?,1>05Bj(1,/010/:0*1<;15 F Π 
internamente. Le cicloidi sono già state stu-
diate da Albrecht Dürer e rivestono grande :12UQ,+3Z8<6a,A8&B?,1<a0C"&Bg0?,_3P?,_0/*,+3B-F<9 
importanza nella costruzione delle macchi- 8&B?,_,/*,+37?_.-F
ne, ad esempio nella teoria degli ingranag- a810_37?,_0+01.U@3B-F<98&B?,_0+,12U@37?,_<-F0F0F0F
gi. Presentiamo solo alcune delle molte for- :12UQ,+3PA0A4&B?aA8&B?,1a0C@&Bg0?_37?,_0/0*,+3B-F9 Con il procedimento dell’articolo precedente
C@&BK,_,/*,+37?_.-F otteniamo la figura
me possibili:
a810_37?,_0+01.U@3B-F<90C@&BK,_0+,12U@37?,_<-F0F0F0F
   
 :12UQ,+3P64&B?a,g1<a,6,_0/0*,+3B-F<a/*,+3P6,_.-F
 
Cicloide comune
a810_376,_0+01.U@3B-F<9+012U@376_.-F0F0F
       
  :12UQ,+3Z8<6a,g,1a,6,_0/*+3B-F.a8&B?,_0/0*,+376,_<-F
Cicloide all.
   a810_376,_0+01.U@3B-F<98&B?,_0+,12U@376,_<-F0F0F
:12UQ,+3PA0A4&B?ag,1<a,6,_,/*,+3B-`F.a0C@&BK_0/*,+3P6,_.-F
      
 a810_376,_0+01.U@3B-F<90C@&BK,_0+,12U@376,_<-F0F0F
    

 -QH-43 86a0C@&B?1>05 kZ(*,/010/:,*,1<;15ZF
Cicloide abbr.

Epicicloide    


 
   ;Q<i"&B* W,W 3 F
y=5 
Epicicloide all.    
     
   s
y=5    Proiezioni lineari lnmnoqprl
Epicicloide abbr.    
     
   tvuwyx  z w {
y=5   Un’applicazione lineare è de-

  "!#  terminata dalle immagini


Ipocicloide
  
 |y} u t~B€ }0<‚ 0, ‚.| u tn~B€ 
x x T,I/3790C@&BK09C"&ED,K,1>7C@&Bf09C"&BA06,1>Z81,F
   "!  
     dei vettori € }‚ ,0 ‚ €
…x „
Per ƒ~B }‚ ,0 ‚
Ipocicloide all. della base standard.
   x w x si ha allora ‹ %*060AI†$@&)(%*0:,12U"3BTF
Ipocicloide 
   "!#  
     !
 } € } ,0 x € x ! $%"&)(*+.-+0/.%12(,-4305P68<90Q0:10/G4&)(`+50>76>7D@&B?F
 :0G<-*H,I/3790A>7AFMLN:0G-*O0I/3798M>7?FML
e quindi (G<%43ERS0I5JO,Q,:0:0*<T45ZF
tn~B   }|y} ! 00 ! x | x $%437:0G-*H>7:,G<-*O> /*<%U1,/QIVF
-,I+Q^43JC>7[,_.(1>ERO,I0C@&780F
-,I/3B-'=-‘.(109C@&B6’4>B“,”>B-'=-•.(1’F –
La traduzione in R è immediata e incredi-
-,I/3B-'=-‘06,_.(19C@&J6’>B“,”4>B-"=-•,6,_2(1<’Fn–
bilmente semplice:
-,I/3B-'=-‘0?,_.(19C@&J6’>B“,”4>B-"=-•,?,_2(1<’Fn–
$"&)(,%*0:12UI W e0U/.-10*.UX3BTF W I W e0U/.-10*.U3B-F
‹ %*,60A3P/3 /*,+3B-`FM>P+012U"3B-FM>B-—0KF0F
Cicloide comune
W e0U/.-10*.U3JHF†+2e0d@3JH_.TF
eI+G.(,(:O3B-@> W F
T :,12UQ,+3Ee`F
In questa funzione deve essere un vettore :,12UQ,+3P/3JC>JT"78.’F,FMLN:,12UQ+3P/3JC4>JC@&B?0?_.T"BA’F0F
di numeri complessi.
z w{ nel seguito :,12UQ,+3P/3JC@&J[0?,_.T"JA’>BT"JA’F0F
Cicloide allungata
Per le proiezioni wy‡ :,12UQ,+3P/3JC>7C@&B?,_.T'B6’F0F
:,12UQ,+3P/3JC@&J[,_.T"B60’>BT"B60’F0F
useremo l’applicazione determinata da
;,Q<i"&B* W0W 3 F
|y} ƒ  ~     ‚    ˆ 
| ƒ~   ‰ ‚ …  Š 
| { ƒ~7 ‚  
Cicloide abbreviata Nel programma le tre righe che terminano
‡ con commento sono usate per eliminare le
:12UQ,+
sovrapposizioni sull’elica; sfruttiamo qui che
che otteniamo mediante l’istruzione interrompe il disegno di un poligono
“,”
‹ %*060AcI$@&)(,%*0:,12U@3 /379C@&JK09C@&EDK,1>
quando incontra un valore . Abbiamo per-
ciò introdotto valori nella sequenza dei
“,” -
C@&Bf090C@&BA06,1> 80F0F parametri che vengono successivamente tra-
| mandati all’elenco dei punti da congiungere.
Epicicloidi
‡
Data e tempo
;,G<-Q
 ˜0O+&=-1.dQ ˜O+&)™G<-Q
Per la data attuale esistono le funzioni
e
,
. La prima restituisce
una stringa come in

|y} | ;0I0;,G<-Q3 F
Ipocicloidi { (,%12U,-@3J;F
–†š0%1c›GOA,g8<f4œBC,?4œB606AC0C,?
$ %'&)(*,+.-+0/.%12(-43057689,/010/:,*,1<;1&=(+50>7?@&BA> 8.C"&EDF Assumiamo quindi di voler proiettare una
:0G-*H0I/3JC>7A0KFMLN:0G<-*0O0I/3JC4>7?0AF curva spaziale le altre due utilizzano un formato specia-
(G%43P/QH,I0C@&B?>BRS0I5JOQ0:0:0*<T@5 F '~   le per il quale bisogna consultare l’aiuto o
$%@37:0G<-*0H>7:0G<-*O>P/*%U10/Q0IVF  ~ gli articoli di Grothendieck/Petzold e Rip-
˜O+&E-12dQ
Œ  Œ ~ +O+.-Q.d&=-12dQ
ley/Hornik. Non confondere
vista a pagina 17.
con
FONDAMENTI DI INFORMATICA a.a. 2004/05 Numero 8 32

Liste
 7  ?   -,CB )    

Abbiamo già usato più volte le liste. Esse, delle sottocartelle. La sintassi usata era
a differenza dai vettori, possono contenere <  <&  
.
/ 0& ' <D ?
elementi di tipo diverso, anche altre liste e B
 / * ^
 / ! /  * > < @A&  )!  =  /

! 0< /  "


!  = 
vettori. Per creare una lista si usa la funzio- 1  ? B ) EB 
1 ) ;B )
ne  :  -F G 
 
    

"  ,@A"!
( / H<D Numeri esadecimali
.
/ 0& "8
Se vogliamo, usando   ed ! "  , possiamo 1 Abbiamo già imparato a pagina 11 come ot-
quindi facilmente imitare il Lisp con R. L’  -  -4: I
tenere la rappresentazione esadecimale di
esimo elemento di una lista  è  ## $$ ; gli un numero naturale con  ./ 0&> . Possiamo
elementi di una lista (come peraltro quelli L’elenco delle voci di una lista o di un vetto-
re lo si ottiene con &  )8! : adesso risolvere anche il compito inverso,
di un vettore) possono anche essere indicati cioè la conversione di una stringa che con-
mediante voci e nel caso delle liste l’accesso J  K  L   tiene la rappresentazione esadecimale di un
può allora avvenire mediante l’operatore % : .
/ 0& '&  )! J  numero. Assumiamo che sia data la stringa
1M2 2;2 2
   '&()!  *'+ ( * '"
(    , - K L *  >
B *
./ 0&  %&()!
132 +
(
2 Mediante  /  .  da essa otteniamo il vet-
./ 0&  % "
( 
 tore
1 Files e cartelle
45 -
 *  *  *  *  * > *  *  *  * B * 
Abbiamo visto a pagina 10 come scrivere su
Le doppie parentesi quadre possono essere un file con    . Formiamo adesso il vettore
usate solo per estrarre una singola compo-
nente della lista, perciò  ## 6' $$ non è cor- Con > ! @0&>( H&()8!
 si ottiene una lista con
?
 * - * 
@@@  *_*  **  * *  *  *  * B *  * ! *  * > * 
retto. Se usiamo solo parentesi quadre sin- informazioni sul file &8( ) ! , di cui le più im-
gole, otteniamo una lista, ad esempio portanti sono: La posizione di una cifra in questo vettore
può essere calcolata con )  0V ed è uguale al
      ,
 ,
 % J ! ... lunghezza del file in bytes; numero che corrisponde a questa cifra (quin-
./ 0&  7#  6' $8 % B
 / ... = se si tratta di una cartella; ?
di  per *  * e  per * * ), diminuita di uno.
1 %<&  )! ... nome dell’utente. A questo punto possiamo applicare `a@RV( / &! / .
## $$
1 # $55 Definiamo quindi la seguente funzione:
Per l’esistenza di un file di testo (in verità
controlliamo solo se il file esiste e che non si
1 ##  $$
tratta di una cartella) possiamo usare `Q  '@ ! I > <&8 ( &P /
.. 
1 # $49 /
.. 
(( b
! / /.. 
14N <   /  . 7 /
..  **  . ! /  =  # #  $$
N  !9E /   BO<&    / 
!  @ ! 
! / ? > / !   -a6 _ 
Anche  # $ è una lista, come si vede dalla Q
 ! @'!

!  > <&8  (&P '&()!
 **  * *  *  *  * B *  * ! *  * > * 
forma dell’output: 0&>
(  > ! @0&>
( '&()!
 N "   .. L, H<a'> <&8  (&X K8
 >P  @R&  &>
(% J !
 )  80V7 K,! 
! / > / !
 c

./ 0& 7# $ ! !PS'&>
(% B
 /
T "  ,@A&<)! /  '"8
1 `a@RV( / &! / '"7 
 T
## $$
1 # $: ; Con / !  BU V  / possiamo leggere caratteri da
un file; il secondo parametro di questa fun- La possiamo provare con
zione è un vettore di interi che determi-
Liste possono essere concatenate con  . In- nala lunghezza delle stringhe lette. Con >
( / K50&3 * - *  *  - *  * -! *  * >-  ! * 
fatti, se uno degli argomenti di  è una lista, / !  BU V  / H&()!, ---8 si ottiene un’unica ./
1 0&7 'd
! K, K
 restituisce una lista tranne nel caso che si stringa che contiene i primi 2000 caratteri -
1
abbia scelto l’opzione / !0< / "
!  = . del file &8()! , con / !  BU V  / H&()!,  - 
  -
1
un vettore di tre stringhe di lunghezza 1  -
  * > ,* 
 
 
?  
complessiva 23, di cui la prima contiene i
 ?   
 primi 10 caratteri del file ecc. Possiamo cosı̀
./ 0&
  definire una nostra funzione: La funzione )  0V è già stata introdotta a
##  $$ pagina 9.
N  > <&88 (&P H&8()!B /,** 
# $ 2  >  2 Q  ! @'=!/ W. W

>X @ ( *Y % * B
 /  Z-E ! .
 **
##  $$ ! !4>[ B
 / S ,** ; ! .
,*Y* !!4 ! .
 **
# $4 &8()!  .8 
! B
 / H&8()!! .
  ! .  Bibliografia
&  > !7@0&>
(, H&()! % J !\
/ !  BU V  / H&( )!H&D T 440/1 I. Bronshtein/K. Semendyayev: Ta-
##  $$
# $9 schenbuch der Mathematik I. Deutsch 1987.
Con il secondo parametro, opzionale, pos- do Carmo: Differential geometry of
(2673) M.
##  $$ siamo indicare una cartella che contiene
# 4 curves and surfaces. Prentice-Hall 1976.
$  il file; per una corretta combinazione con
il nome del file usiamo la nostra funzione 17124 G. Grothendieck/T. Petzold: Date
##  $$ =/ @ . ( . and time classes in R.
# $4
Si osservi che anche sotto Windows il se- R News 4/1 (2004), 29-31.
paratore nei nomi dei files deve essere Y (op-
Invece pure ]] ) e non ] . E. Kreyszig: Differential geometry.
(1451)
Con / !  B^
&! H&8()!
 si ottiene un vettore Dover 1991.
?  
   
 / !
0< /  "
!  = 
 di parole che contiene le righe del file &()! .
./ 0 & ?  17057U. Ligges: Programmieren mit R.
Springer 2005.
1 # $ 2   2;2 2;2 252 2;2 2 Già nel file alfa a pagina 2 abbiamo usato
>    la funzione B
 / che restituisce un vettore di 16644 H. Pottmann/J. Wallner: Computatio-
parole che, con l’opzione / !< / "!  = , con- nal line geometry. Springer 2001.
< & trasforma una lista in un vettore, tiene i nomi dei files contenuti in una car-
conserva però gli attributi; questi possono 17125 B. Ripley/K. Hornik: Date-time clas-
tella e nelle sue sottocartelle, ma non i nomi
essere rimossi con  ,@A"
! 
( / : ses. R News 1/2 (2001), 8-11.

Corso di laurea in matematica e Fondamenti di informatica fhgji Docente: Josef Eschgfäller


             
    

Corso di laurea in matematica Anno accademico 2004/05 Numero 9

Tabelle In questo numero

La struttura fondamentale per rappresenta- Tabelle possono essere indicizzate sia come 33 Tabelle
re dati statistici in R sono le tabelle (in ingle- liste che come matrici, con qualche variazio-
attach
se data frames). Molte funzioni statistiche di ne; dipende dal contesto quale variante si
R operano su tabelle. Esse sono simili alle preferirà.
34 subset

]*g !#/\"]+]&b!##%`$>@!]B+]*[c0#!0@\B%$]]Q^+]Q!h#0`%]]>+-d]*^#+ /_!%]+


matrici dalle quali si distinguono per il fatto transform
che le colonne possono corrispondere a tipi rbind e cbind per tabelle
diversi. Gli elementi in ogni colonna invece
sono dello stesso tipo. C#@\@\$>'$&K!)N")`+&+Q9`M7%+&)%+&8+?8K7%M%+&+>8!'9"M9`+>'+&N8J%'J#+i'-N#- -d+ 35
merge
read.table
save e load
. #/10$*2-
Formalmente una tabella è una lista di
vettori della stessa lunghezza con nomi di- Creare una tabella vuota

34 'j@!^#B^#[!/0##_!G
;G'MK!;NG C!))
stinti per le colonne con cui queste possono Aggiunta o sostituzione di righe

 3;37W
essere identificate. Selezione di righe

7R
7RK9)M
Per creare una tabella si usa la funzione Aggiunta di colonne

33 9 8Wbg##G / 88!89I


che accetta, in forma di matrici o
vettori della stessa lunghezza, i nomi e i con-

33)SJfc#h00#B;T'N'NJ8'M'!9J
./10"$* #!2"- ##%$&#'%(*)%+,##''%(&'!)-
tenuti delle colonne della tabella. Esempi:
attach

.3#)/10)E96$*)#KkM6C'M!- 98#'J  ]&%#]"+].]+#]V%$?]>@!-d!+ @\$]?%]+]Vp]+]&%]+


Creiamo una nuova tabella:

34
363 7'5 ' ''7'
6
7
33:989;86''98 .3 #b/10B $*.Xl!@+&!8! m#- 0#" @!C]>_q_q!qd]>@\-d$+ ]iqd]+]>qqqd]+]iqqqd]+]>qd]+]iqqd]+
3 ))6') . !PPB!@\$&LL%+&J7%+?JM%+&L)`+&K!N`+&JK--
.3R #/10C!$*XlQ8!m#- .3 /10"@!$*#;2@!C- __ . !PPB
3;37f '5)9) 3O367s 'r qqqq LJL7
.< =!/10" $>'%$*##(?"'2)%-+A@!B#C%$ 8< -- 33 9G 8RK)M 3639R 8f qqqq JLM)
33)J:8'M'!9J 3636)Js. qqqqq K!JNK
33F'GD#'E'HD7G 7ED88
3I 7 9I )G JM .3#)/10)E96$*)XKlM6l*8!m'M!m#9- 8#'J .3t/1l&0'"m $*#E;#k@!!- . 
3I
3G G
8 G
K G
L 3hoC_`(uS .
3I9;)6''NO8;''96':''7) .3 #/10$*;XClQ7"(*8!m#- .3t/1l&0'"m6$*#q#qkq@!q Cqq_q:_!q- qq:qqq
3;37 ':'KMNI f
7 )9) 3hoC_`(Aq qq:qqq
33 9G 8:8889I 7RKM)
.< =!/10" $>'%$*##(?"'2)%-+A@!B#C%$ 8< - +&P7'%(Q7)- 33)JI'N'NJ68'M!'9J Mediante l’istruzione i nomi
@1v$Q2-
3R
363 7G 'ID#9T 'S' D7E7 D8G 8 #
7 P' .3 #b/10B $*.Xl!@+&!7" (*8!0m#- "
delle colonne di una tabella diventano di-
rettamente accessibili e non è più necessa-

33:9O8I'N;KI') JM 7778 rio indicare la tabella. Bisogna però stare

L .3#)/10) $*Xl?'d+&8!m#-
attenti perché aumenta il rischio che i no-

3 );'86'96':'')7 779) @v$*d-


mi delle colonne si sovrappongano a nomi
di altre variabili che dobbiamo ancora usa-

.3#)/10) $*Xll&'d+&8!mm#-
re. Il comando è revocato con .I
nomi abbreviati sono usati però solo in let-

.< =!/10" $>'%$*##(?"'2)%-+A@!B#C%$VU8- < +QP7#'%(*7)-


tura e, quando appaiono alla sinistra di un
assegnamento, questo non ha effetto sulla

.36L/10L:"J$*#7#JMk . #L)!PK!PNB- JK


tabella.

3W '4UX&94 'Y'WUX*74 7YUXQ8H P'


Colonne non numeriche di una tabella ven-

363 7R 8 
7 @1v$Q2-
gono considerate come fattori (variabili non-

KR')4 JM 7778 numeriche, dette anche categoriali, di cui R

33:9Z 84'NF L4'G'!'!7) 7!79)


registra la frequenza di apparizione):

.3n#/1l&0'm:$*^!##kE@!B^#[/0_!:- g#/Sb#Sc0B:h0# .3b/10B#" $ . .!PP@!!B# - 0"


3 )F'8T'9F 3 ho#C_`(,g##h/S0#b! ##S^!!#S^#/_!Ec#0B .. #!/10P"PB!$ .#@\!$QPN`P+QN"B#-+QN`+QN`+&N#-
3N N:NN N
< =!]Qa B$>#'%#%(?"'])%+]Q+Ab!@!B##C%%$?8@!]-B+]Q[c0#!0##@\B%$]>]*^-d!+ <!# <%- ]+]*^#/_!`]+ .3 #b/10B $*.Xl!@+>!' m#- 0#" .3 /10"@!$*#;2@!C- __ . !PPB
. /10"$*#2- .34 #/10@!B$*[0#X l?'m#- 3O367s 'r qqqq LJL7
3e
363 7f '5@!^B^#[/0##_!H I< ' &' <7 *7 8 < *8 3;37W 'j^#^#!/#_! 3639R 8f qqqq JLM)
33:9I8fb!aB## 9T I
K )

L JM 33 9 8Wbg##/ 3636)Js. qqqqq K!JNK
3 ):c0B''NO8;''96':''7) 33)SJfc#h00#B !@1v$Q2-
FONDAMENTI DI INFORMATICA a.a. 2004/05 Numero 9 34

subset
&G-2-*)W-X) '  )    '  
(
 98O: ;#  $  
Righe e colonne di una tabella possono es- &D121 > 1  F       
 @ , 0  !
#! !5]%
#! ! ^
%
4!
sere selezionate con la funzione   . & -7)    M
 323 3V0 !^ ;#! !5`
 !
Per selezionare righe da una tabella  si    )M"--# -#) >)M  
;
 "0 @ / =
   $
  ' (
) 
usa la sintassi
   , do- Se i nomi di colonna indicati sono nomi di
  &  $  '  D 
ve è un vettore booleano. Il risultato   ; 

 colonne già esistenti nella tabella, queste &7)lF     )



  è a sua volta una tabella.  sia l’ul-
 0
vengono sostituite dai nuovi valori. Usiamo &D>  - -
tima tabella definita a pagina 33:  ]

ancora la stessa tabella  : &D- -
^

@
&.1  ) >)
  
  M)    T># $  M ^ ;

    !"#!    : ;   Y & 
$ %   3f`
 /=

 %
 $  M) 
&  ' 
5
   $  (( &   ' -    '  
&*)   $ (
 98O: ;#  $  
 + ,, &Z)V)C>[-      
&.-  !5^ ;#! !5]%
#! !^
%
4!
 + + + /0 &G>W1 > F     M
&21
&G-
=
)\1 !
#! !5`
 !  $ 
 + ,3  - >#">> "> 1 "->1 19"- ) > 
0 "3 3 3= @ 0 /
&D1*) ) ) $
  ' (
 -
$ %  '   /D@

  45
 & > - &  $  '   $
&76 6 3 3 ,   
98:  ; &7)  - >
^ ;.3 3
&D>  > >
   $
  <  ]
 3=

   ( ( ,= &D- > 1
$ %   ^

@ 0

 %
 &.12F     - > 1 1
&  '  rbind e cbind per tabelle

   $  (( & 2- ) >
&.>? > 3f`
 /
+ + + /
&.- Per una semplice unione di tabelle si posso-
 + + + /0     '  1 '  )Ma'
 -
& $ no usare
e
come per matrici. (
;  #  (
(

3 + + @ = $  ' 1 

 (

&  $  '  D 


  '
(

) 
 8O:  ; #  $
  '  
    ;  U
 $

    F         &7)lF     ) ->1 1
Q
 <  A   
 0
 $ ( ( ,=   9!"#!  !




#! !5]
#! 5! ^

_!
  M &D>  - -.>>
&CB     E  A A !^ ; #! !`%
 ! ]
 3=
: (
D
  8    )M"- -9 -#)>)M   &D- -.> 1
$ %
  %
  ; 
 a0 @ /= &.1
^


 ) >)
@ @ 0
- >
&  ' $  $
  ' (
 )  ^ ; 3 3
   (( &  $  '  D  &  - ) >
&.-   ; 
3f`
 /= /
 + + + /0 &Z)bF    )

 0
 5F% &G>  - -

   ]

  &G- - M)  )4P O ))4P)  >)4P"> 
$ %
 %
 ^
%
@   98:  ;9" 3  3  3
&G '  &D1  )>)  - )4P5-  1 )4P51 
   $ ( ( &
^ ; 
   3  3
&.< H  '  H   3c`%
 /= $
   M)
=2 IJ G=K  . 8 ; & mW
&CL  ' ' E   
    98 '  >  &7).)D) )d>)C-)l1 )
(
 8O:  ; # $ 
 - > 1 19"> > "> 1  - >#"- ) >M &D>.>7) >2> >D- >C1>
  3= @ 0 3 3 /
Per selezionare colonne da una tabella     ) >#"> >   )  )  &D-.-7) -2> -D- -C1-
   3 , 3 3 @ 0 ,
si usa invece la sintassi $
  '   (

> &.1.1Z)1.>1G-121 1
&   & ) > - 1
 '   '  EM  $  3.3 3 3 3 3
     &Z)d- >11e) >
3
E &G>2> > > > >  -9P   > -#"> 19"> 4
dove è un vettore che contiene gli indici o 3 = ,   98:  ;9" 3   ,
&G-2> 1 -9P 
@ 0[33 : 3
 3 3
i nomi delle colonne selezionate: &D1 - > ) 
$
 

> 
3 3 @ 0
& - )> ) & 
'   '       3 / ,  :
       $ 
(( &7)Q-D> -
3
-
$ %   ' '    '  )M"'
  > &D>21G>1 1

 (

 (
 (
3
&  
 $ ( ( $ 

 (

'   &D- >


&*) &  $  '  D    3 ,23 3
&.>?
 , ,
>   ; 
V $ 
/ &Z)bF    )d- >11e) >  M)M >
&.-
 0 3  ;   #5 
 / 0 &G>  - -2> > > > $  M
&21 ]
 3 = ,

 , 3 &G- - > 1
2 & nj
& $ ^
%
@ @ 0f3 3  V:
3 @= &D1  )>) - > ) &7)Q-D> -G) -D- -C1- -
^ ;  3 3 @ 0 3
&   - )> ) &D>21G>1*)1G-121 1 1
'   '    "-  3c`%
 /= / , 3
      
$ %
    '  '    '  
&2N $    

 98:  ;9  $   Si noti che sono state usate solo le righe com-
;    
  98     M
 !g 9! !h  (9! patibili nelle due tabelle di partenza.
   -)M) M $  - 1 1  1 M
; 
  ==    / /3 ,
    )  
  "/= / ' ' L
   ' # '   Con l’opzione   anche righe non corri-
 
 (



$
 5 M spondenti vengono usate nell’unione; i valori
transform &  $  '  D    Bo
    ;
V $  mancanti sono posti uguali a .
&Z)iF   )d- > 1 1j) >
Con la funzione   : ; si possono ag-
 0 3
&G>  - -2> > > >  M)M ># ' ' LM
giungere nuove colonne a una tabella o so- ]
 3= ,  ;   #5   
&G- -2> 1 $  M
stituire colonne esistenti; questa funzione ^

@ @ 0f33

&D1  ) >) - > ) & nj
viene usata soprattutto per aggiungere va- ^ ; 3 3 @ 0  V:
&  - ) > ) &7).)C>)2) )C-)l1 )dBo
lori derivati dalle colonne già presenti. 3 `
 /= / ,
&Z) ) -)d-11 &D>.>D> >G) >D- >C1>2Bo
g  /f/ =
&G>)   ) 1 ) &D-.-D> -G) -D- -C1- -
  )4P O  ># )M "-  h  ( = =./ 3 ,f/ 3
  98O: ;#" 3   = @ &.1.1G>1*)1G-121 1 1
$ %  M 3

 & > ) - 1 Bo
&  3.3 3 3 3 3
 & > Bo.BoCBo
&*)D)Q> /.3 , 3 3
&.>D> merge
=
&.-D-*)
Per unire due tabelle che hanno colonne in Si può chiedere anche solo l’inclusione di ri-
&21D1
@ comune si usa la funzione ;   . Essa cor- ghe non corrispondenti della prima tabella
& - ' ' L ' ' L
3D3 con  8p o della seconda con  8q  .
risponde alla combinazione (in inglese join)
M)     5S 4T>  di due tabelle nel senso della teoria del-
   : ;   R 
$ %  M)  le basi di dati, un’operazione fondamenta- Nell’impostazione iniziale la tabella unita


&  DS le che può essere descritta matematicamen- che si ottiene è ordinata rispetto alle colonne
 
&*)D)Q>U>V1 te e implementata in SQL. La sintassi più comuni. Per questa ragione usiamo talvolta
&.>D>  r M
=U=U= semplice è illustrata negli esempi; consul- un’istruzione  ;  #  anche sol-
tare k;   per le vari opzioni. tanto per ordinare la tabella.
FONDAMENTI DI INFORMATICA a.a. 2004/05 Numero 9 35

read.table Aggiunta o sostituzione di righe Selezione di righe


Questa funzione è usata per leggere una ta- Creiamo una funzione per aggiungere una Per selezionare righe da una tabella usiamo
bella da un file di testo. A ogni riga del file riga a una tabella esistente. Questa fun- le funzioni 1
 e 1 F ' 
. Nella prima dob-
corrisponde una riga della tabella. Numero- zione a sua volta utilizza
 
. Allo scopo
biamo indicare i numeri (o più generalmen-
si altri parametri possono essere impostati. di riordinare le righe dopo l’aggiunta della te i nomi) delle righe richieste, nella seconda
La tipica sintassi è nuova riga la funzione restituisce la tabella una condizione. Anche queste funzioni resti-
che si ottiene con
=?"+ +<% . tuiscono nuove tabelle con le righe rinume-
 
     ! "  rate.
#  
"$%
1 9 F +?"?77* / N+F)  )%
*OP =   ?!% %Q"" -)F )%
=": %"=:+<% 1 9 fH* / O+  " )%
 / -+F
Non useremo questa funzione per la nostra 
!+ '
"- * =)% % A4 5=:+<%eddg: % %
banca di dati, perché vogliamo creare le ta- ="?"' +%D ="?"!+ '%D
belle dal terminale o da un programma, sal- GHR 7"
7"6? # - G7R f
Q Q? # -
varle con
 e caricarle con   
come de-
scritto nel seguito.
Supponiamo di avere creato una tabella 1 9 F ' 
7H* / N+ h
%
"E  / -+F 
%
vuota come nell’articolo precedente. ="?"!+ '%D
Allora possiamo aggiungere righe nel se- G7R f
Q Q? # -
save e load guente modo.

Con "E 1 F + ? ?!)  E Esempi:


'S"  T T)U U"V J )U U"W%
Z
'&!)(! +*  !+*"& (!,% "-  E% /  1  ) E  )V%
G   / ?H= / X / Y 
" ""  / %
G    ?"H=
&!'(- G[Z S" T T7U U V J U U"W
GgZ C"" / / 
 c / f
"
a Z T"Ub b Z V U
si possono salvare gli oggetti nel fi-
le filexy e nel formato binario speciale di R. "E F + ? ?!)  E G U_\ ] J T"] Z UiW Z
1
Successivamente (anche in un’altra sessio- +\")] J )T"] Z U)W Z %
  
- +*"& (!,% K T J J"J %
ne) è sufficiente il comando
&!'(! siano di nuovo disponibili.
"-  E% /Gf 1 k 4 '
-) E ) E j" /J 
G   ?H= X Y 
"    "-) E  K T J"J %
affinché / / / / 1
G
"7  # )  E% /
Esempio: Assumiamo che sia stata defini- G[Z S" T T7U U V J U U"W
 come in precedenza, che G U^\ ] J T ] Z _ U W Z ""  %
ta una tabella G /
. +    ?"H= / c / f
"
sia una matrice ed / vettori di numeri.
"E 1 F + ? ?!)  E GgZ C"" / aZ T"Ub b Z V U
Allora li possiamo salvare file binario salv +3=  Z U Z )V J J"J )` Za % G   G U 3= Z U Z V"T V UX` Za
con "E 1 F + ? ?!)  E G T_\ ] J T"] Z UiW Z
+*  !   - '  .  / +% +3: )`"T)U `b a )V V%
"E 1 F + ? ?!)  E
+C    aZ )T Ub b- Z V U%
Se adesso chiudiamo la sessione, quando "-  E% Aggiunta di colonne
G   ?H= X Y
"
G[Z C  / / aZ /
riapriamo R possiamo ricaricare questi og-
" 
! , -0% T Ub"b Z V"U Per poter aggiungere nuove colonne a una
getti con .
G U S" T T7U U V J U U"W tabella esistente creiamo una nostra funzio-
G T 3 ` T7U `b a V V ne (molto semplice) che a sua volta utilizza
G b 3= Z U Z V J J"J ` Za 
.
G V^\ ] J T ] Z U_W Z
Creare una tabella vuota
1 ! + ? ?77* /  N+  %
Definiremo adesso e all’inizio del prossimo 
-+ )
"- * =! )%"%
Nell’inserimento della riga per Roma abbia-
numero (che sarà dedicato alla possibilità
mo però commesso un errore. Creiamo quin-
di gestire una piccola banca dati con R) al- 4 '"
di una funzione 1 per sostituire una Esempio:
cune funzioni per la nostra libreria nelle
sezioni 1
$ (funzioni generali per tabelle), riga.