• Non ci sono risultati.

Uso di librerie preconfezionate

N/A
N/A
Protected

Academic year: 2021

Condividi "Uso di librerie preconfezionate"

Copied!
13
0
0

Testo completo

(1)

Uso di librerie preconfezionate

Cosa sono:

• pezzi di programma gi` a scritto da altri; di solito ben collaudati;

• comprendono le definizioni delle funzioni e il codice eseguibile;

• per librerie di pubblico dominio ` e disponi-

bile anche il sorgente;

(2)

Diponibili pubblicamente sono

• GNU scientific libreries (GSL)

• CERNLIB

• Netlib

• LAPACK (matrici)

• fftw (trasformate di Fourier)

• e molto altro ancora. . .

(3)

Cosa calcolano

• costanti fondamentali

• funzioni speciali

• polinomi

• radici

• matrici

• trasformate di Fourier

• etc. etc.

(4)

D. Perch´ e non l’ha detto dall’inizio? Non avrei frequentato questo corso!

R. Avete mai provato a far benzina se l’auto

` e elettrica? Anche chi non vuole diventare meccanico deve conoscere un poco le automo- bili. Questo corso ` e un’introduzione alla Fisica Computazionale, non un trattato!

D. Io per` o voglio occuparmi di fisica e non di programmazione. Ho gi` a progettato di scoprire il settimo quark

R. Per gli esperimenti di fisica delle alte en- ergie ` e necessario avere dei buoni programmi di simulazione Montecarlo. Sono di solito non- standard, e ve li dovete quindi scrivere da soli.

D. Nel mio gruppo di ricerca fanno calcoli per- turbativi all’ordine 3/2. Nel corso non ne ho sentito parlare

R. Ora che conoscete i rudimenti del mestiere,

potete studiare da soli le equazioni differenziali

stocastiche o i problemi che pi` u vi interessano

(5)

Scrivere programmi con le gsl

• E necesario includere le definizioni delle fun- ` zioni utilizzate, che stanno in file .h forniti assieme alle librerie

• I file da includere possono essere uno o pi` u.

Di regola si include gsl.h, ma anche file pi` u specifici per il problema che si deve risol- vere, come gsl integration.h

• linkare con opportune librerie -lgsl. il cor- rispondente file si chiamer` a libgsl.la o libgsl.so (linking statico o dinamico). Anche qui pu` o essere necessario linkare altre librerie

• Importante: leggere molto attentamente la

documentazione

(6)

Esempi con le librerie gsl

• GNU Scientific Library (GNU’s Not Unix);

• includono sempre gsl.h;

• link sempre -lgsl e spesso -lgslcblas;

• a seconda della particolare routine che si usa si devono includere altri file d’intestazione:

ad esempio, se si usano generatori di nu- meri pseudocasuali pu` o essere necessario includere anche gsl/gsl rng.h mentre se fac- cio un integrale gsl/gsl integration.h;

• i file d’intestazione definiscono i prototipi

delle funzioni ma anche alcune costanti e

molti tipi di dati.

(7)

Strutture dati

• Le librerie gsl definiscono alcune strutture dati per risolvere diversi problemi

• Un esempio tipico ` e gsl vector, che ` e definito da

typedef struct {

size_t size;

size_t stride;

double * data;

gsl_block * block;

int owner;

} gsl_vector;

• Questa definizione ` e diversa da quella usa- ta in questo corso

• Questo non vuol dire che le routine non

possano essere usate, ma solo che occorre

scrivere una funzione che permetta di uti-

lizzarla in C++

(8)

Quando conviene usarle

Vantaggi Sono scritte da veri esperti della programmazione usando algoritmi sofisticati, capaci di gestire casi particolari e condizioni di errore difficilmente prevedibili. Il grande nu- mero di utenti permette di sperimentarle e cor- reggerle.

Svantaggi Il codice ` e meno portabile. La possibilit` a di usare lo stesso codice su di un altro computer dipende dalla disponibilit` a delle stesse librerie.

Quando conviene usarle Per problemi molto

delicati e complessi come tutti quelli legati alle

matrici, la generazione di numeri casuali, la

ricerca di zeri e minimi di funzioni; oppure

quando la velocit` a ` e un fattore critico, spesso

nelle FFT.

(9)

Esempi

• costanti matematiche M PI = π

• funzioni elementari e funzioni speciali hypot(3, 4)

gsl pow 4(2) potenza

gsl sf bessel J0 funzione di Bessel cilindrica

• valutazione di polinomi

p(x) = c

0

+ c

1

x + · · · + c

n−1

x

n−1

gsl poly eval(c, n, x)

• ordinamento di un vettore gsl sort(v, k, n)

v(0), v(k), v(2k), . . .

per un vettore di n elementi

(10)

In pratica

Includo i file header

#include < gsl/gsl xxx.h >

xxx = math, poly, sort vector

Linking

gcc -lgsl -lgslcblas programma.c (-static)

BLAS = Basic Linear Algebra Subroutines

Documentazione

Mi documento con info gsl guardando soprat-

tutto gli esempi.

(11)

Tre esempi

1. Integrazione

• Il file da includere ` e hgsl/gsl integration.hi

• ` e necessario fornire dello spazio “extra” di lavoro usato dalla routine

• la funzione da integrare ` e parte di una strut- tura

• la funzione pu` o dipendere da altri parametri

oltre alla variabile su cui integro. Devo pas-

sare questa informazione alla funzione in

qualche modo: in pratica si mettono tutti

i parametri in una struttura e si passa un

puntatore ad essa.

(12)

2. Sorting

• Ordina un array

• Utilizza una struttura particolare del vet- tore

• Occorre includere il file hgsl/gsl sort double.hi

e tenere conto della diversa struttura dei

vettori

(13)

3. Generazione di numeri pseudocasuali

• Il file da includere ` e hgsl/gsl rng.hi.

• il programma fornisce una funzione che ri- torna un numero pseudorandom tra zero e uno. Il metodo da usare ` e determinato dall’utente che deve fornire il tipo con la chiamata ad una opportuna funzione di i- nizializzazione.

• come per i numeri Fibonacci lagged, e’

necessario avere a disposizione della memo-

ria extra. Un’apposita funzione si occupa

di allocarla: chiaramente la quantit` a di memo-

ria allocata dipender` a dal tipo di genera-

tore usato.

Riferimenti

Documenti correlati

A differenza delle proprietà CSS definite all‟interno di un foglio di stile che vengono applicate anche a posteriori sui nuovi elementi creati dinamicamente, l’associazione

linkare con le librerie opportune: per molti funzioni sar` a necessario non solo -lgsl ma anche -lgslcblas (attenzione al linking: statico o dinamico?).. attenersi alla struttura

Oltre ai due file che vanno inclusi sempre, ogni categorie di routine riochiede l’inclusione di al- tri file, ad esempio. #include

• infine, una data routine o categoria di rou- tine pu` o usare strutture dati proprie e aree di memoria proprie, da usare come spazio di lavoro, che devono essere allocate

Algoritmi : i più comuni algoritmi (find, sort, count ...) che, per mezzo degli iteratori si applicano a qualsiasi container. Interfaccia di alto livello verso le

 Tale valore risulta disponibile al thread che effettua una pthread_join..

Il sondaggio ha rivelato anche quali elementi stanno impedendo la riconciliazione secondo i rappresen- tanti della comunità serba: l’operato della classe poli- tica albanese di Kosovo

Quarto titolo della serie, dopo Il Novecento a scuola (2011), La didattica della letteratura nella scuola delle competenze (2014), Insegnare letteratura nell’era digitale (2017),