Esame di Laboratorio di Fisica Computazionale

Documenti analoghi
Lab 3 L Aprile 2015

Esame di Laboratorio di Fisica Computazionale

LABORATORIO DI INFORMATICA ESERCITAZIONE VIII

05. Determinare una base ortonormale per ognuno dei seguenti spazi vettoriali.

Laboratorio di Architettura degli Elaboratori A.A. 2016/17 Programmazione Assembly

Università degli Studi di Ferrara Corso di Laurea in Chimica - A.A

Laboratorio di Architettura degli Elaboratori A.A. 2014/15 Programmazione Assembly

MatLab - Testo pagina 1 di 5 101

Geometria BAER Canale A-K Esercizi 10

1. Si scriva una function Matlab che implementa il seguente metodo di punto fisso

Esercizi su Python. 14 maggio Scrivere una procedura che generi una stringa di 100 interi casuali tra 1 e 1000 e che:

Geometria BAER Canale I Esercizi 12

Geometria Appello I Sessione Invernale Corso di laurea in fisica A.A 2018/2019 Canali A C, L Pa, Pb Z

Laboratorio. Due. 1) Switch 2) Costrutti Iterazione (For, While, do while)

Soluzione di Equazioni non lineari

Esercizi svolti. delle matrici

Programmare con MATLAB c Parte 5 Cicli: for e while

Esame di Metodi Computazionali della Fisica I 17 marzo 2010

Algoritmi stabili e instabili

Complementi di Matematica e Calcolo Numerico A.A Laboratorio 11 - Metodi numerici per equazioni differenziali ordinarie

Vettori e Matrici. Corso di Calcolo Numerico. 24 Aprile 2018

Informatica B

Quadrato Magico. Fondamenti di Programmazione

13 Esercizi di Riepilogo

F x 1 = x 1 + x 2. 2x 1 x 2 Determinare la matrice C associata a F rispetto alla base canonica (equivalentemente,

Principi di Programmazione Prova del 10/6/2008 (ore 10.30)

1 Massimo pari e dispari di una sequenza

Equazioni e sistemi non lineari

14 febbraio Soluzione esame di geometria - 12 crediti Ingegneria gestionale - a.a COGNOME... NOME... N. MATRICOLA...

Geometria BAER Canale I Esercizi 10

strutture e file di testo/binari Esercizio - lettura/filtro/scrittura PEOPLE.TXT PARTNERS.DAT Due persone sono compatibili

Strutture lineari in Java

ISTRUZIONI PER LA CONSEGNA DEI FILE MATLAB

Lezione 6 programmazione in Java

Laboratorio di programmazione

Esercizi di riepilogo (Fondamenti di Informatica 1 Walter Didimo)

Progetto Matlab N 2. Calcolo Numerico 6 CFU. Corso di Laurea in Ingegneria delle Comunicazioni 31/05/2014

Esercizio: Linear Congruential Generator

Programmazione template

Parte 1: tipi primitivi e istruzioni C

CORSO DI MATEMATICA II Prof. Paolo Papi ESERCIZI. 1). Stabilire quali dei seguenti sottoinsiemi di V sono sottospazi vettoriali. (a) V = R 3.

Nella propria home directory creare una sottodirectory chiamata es08, in cui metteremo tutti i file C di oggi.

Prova di Laboratorio del [ Corso A-B di Programmazione (A.A. 2004/05) Esempio: Media Modalità di consegna:

Fattorizzazione QR e matrici di Householder

Algoritmi in C++ (seconda parte)

Un secondo problema : Quadrato Magico

Laboratorio di Calcolo Numerico Laboratorio 3: Algoritmi stabili e instabili, Bisezione

laboratorio di python

Problemi, istanze, soluzioni

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO VI.2015

19 settembre Soluzione esame di geometria - 12 crediti Ingegneria gestionale - a.a COGNOME... NOME... N. MATRICOLA...

Analisi Matematica II, Anno Accademico Ingegneria Edile e Architettura Vincenzo M. Tortorelli FOGLIO DI ESERCIZI n.

Geometria BAER Canale A-K Esercizi 11

MATLAB Alcune funzioni utili: fprintf, length, size

Strutture come parametri di funzioni

Laboratorio di Matlab

25 gennaio Soluzione esame di geometria - 12 crediti Ingegneria gestionale - a.a ISTRUZIONI

Equazioni e sistemi non lineari

MATLAB c. Lucia Gastaldi Dipartimento di Matematica Lezione 4 (15 ottobre 2003)

13 febbraio Soluzione esame di geometria - Ing. gestionale - a.a COGNOME... NOME... N. MATRICOLA... ISTRUZIONI

Esercizi 5 CICLI. Es.5(cicli)

Esercizi di MatLab. Sommario Esercizi di introduzione a MatLab per il corso di Calcolo Numerico e Laboratorio, A.A

Laboratorio di programmazione

Introduzione alla programmazione Algoritmi e diagrammi di flusso. Sviluppo del software

Esercizi di autovalutazione - Matlab Metodi Numerici con Elementi di Programmazione A.A

Progettazione di Algoritmi: Approccio Top-Down e Bottom Up

Esame scritto di Geometria I

11 luglio Soluzione esame di geometria - Ing. gestionale - a.a COGNOME... NOME... N. MATRICOLA... ISTRUZIONI

Esercizi proposti. Si dica quali dei precedenti sono sottospazi vettoriali dello spazio vettoriale quadrate di ordine n.

Corso di Geometria BIAR, BSIR Esercizi 3: soluzioni

ARRAY E STRINGHE. ESERCIZIO 2 Scrivere un programma che calcola il numero di doppie e di dittonghi (2 vocali vicine) presenti in una stringa.

Dinamica e Controllo dei Processi Energetici. AA 2009/2010 Pier Luca Maffettone. Elementi di Matlab

Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Prova in itinere del 24 Gennaio 2011 COGNOME E NOME RIGA COLONNA MATRICOLA

Istituzioni di Matematica II 5 Luglio 2010

A.A. 2018/2019. Fondamenti di Programmazione in MATLAB FONDAMENTI DI INFORMATICA E PROGRAMMAZIONE. Docente Prof. Raffaele Pizzolante

a + 2b + c 3d = 0, a + c d = 0 c d

METODO DI EULERO ESPLICITO

VETTORIALE E PRODOTTO MISTO. PIANI E RETTE DI

Page Rank. Guerra Stefano. 1. DESCRIZIONE DEL PROBLEMA "Page Rank" 2. DESCRIZIONE DELL ALGORITMO. Pagina 2

Le basi del linguaggio Java

Passare argomenti al programma

24 luglio Soluzione esame di geometria - Ing. gestionale - a.a COGNOME... NOME... N. MATRICOLA... ISTRUZIONI

5 dicembre Soluzione esame di geometria - Ing. gestionale - a.a COGNOME... NOME... N. MATRICOLA... ISTRUZIONI

Shell: variabili di sistema. Per visualizzare il valore di tutte le variabili d ambiente si usa il comando set

Calcolo Numerico - Prova Matlab 19 luglio 2013

A) MODALITA DI ESAME per l anno accademico 2012/2013, valide per tutte le sessioni

Laboratorio di Calcolo Numerico Laboratorio 4: Functions. Soluzione di Equazioni non lineari

1 (7) 2 (6) 3 (6) 4 (7) 5 (6)

12 Function Handles e Ricorsione in MATLAB

Complementi di Matematica e Calcolo Numerico A.A Laboratorio 11 - Metodi numerici per equazioni differenziali ordinarie

NOME COGNOME MATRICOLA CANALE

Informatica B. Facoltà di Ingegneria Industriale Laurea in Ingegneria Energetica, Meccanica e dei Trasporti. Prof. Marco Masseroli

24 giugno Soluzione esame di geometria - 12 crediti Ingegneria gestionale - a.a COGNOME... NOME... N. MATRICOLA...

13 Esercizi di Riepilogo

Transcript:

Esame di Laboratorio di Fisica Computazionale 3 maggio 2016, ore 9.30 shell scripting Si scriva uno script che riceve due argomenti in input da linea di comando../script.sh arg1 arg2 Il primo argomento rappresenta una stringa che vogliamo cercare. Il secondo argomento rappresenta un insieme di files all interno dei quali cerchiamo la stringa rappresentata dal primo argomento. Lo script stampa sullo schermo ciascuna riga in cui compare la stringa cercata, ma non il resto del file. 1. Soluzione banale: si scriva uno script che utilizza grep per risolvere il problema. 2. Si aggiunga un controllo che verifichi la presenza dei due argomenti. 3. Si scriva uno script che utilizza sed per risolvere il problema. suggerimento: la fine di una riga può essere rappresentata da un $ 1

Mathematica 1. Si risolva il sistema di equazioni differenziali x (t) = 3 x(t) y(t) y (t) = x(t) + y(t) x(0) = a, y(0) = b e si definisca f(a, b) = (x(t), y(t)) con le funzioni soluzioni del problema. Si disegni f(1, 1) facendo variare t [0, 1]. 2. Sia γ(t) = (x(t), y(t)) la soluzione del sistema di equazioni differenziali { ẋ(t) = 2x(t) 1 ẏ(t) = x(t) 2, t [0, 1] y(t) e sia F (x, y) = (y x 2, 2x 1) un campo vettoriale. Si calcoli, lungo la curva γ(t), l integrale γ F dp = 1 0 dt F (x(t), y(t)) γ(t)dt 3. Ortonormalizzazione di Gram-Schmidt. Si definisca una funzione che, data una lista {v i } di n vettori a n componenti, costruisce una base di vettori {u i }, ortogonali rispetto al prodotto scalare ordinario, secondo il metodo di Gram-Schmidt: u 1 = v 1 u j = v j j k=2 v j u k 1 u k 1 u k 1 u k 1 j = 2,..., n Infine, si normalizzi a 1 ciascun vettore e i = u i / u i. 4. Scomposizione QR. Una matrice reale quadrata A può essere scomposta nel prodotto di una matrice ortogonale Q per una matrice triangolare superiore R, A = QR. Si scrivano delle funzioni di Mathematica che permettano di calcolare per una generica matrice n n la sua scomposizione nel prodotto QR secondo il seguente procedimento. Si considerino i vettori colonna della matrice A = [a 1,..., a n ]. Con la procedura di Gram-Schmidt si determini una base ortogonale a i u i e quindi si ricavino i versori normalizzati a 1: u i e i = u i / u i. Si costruiscano la matrice Q = [e 1,..., e n ] e la matrice R R = e 1 a 1 e 1 a 2 e 1 a 3... 0 e 2 a 2 e 2 a 3... 0 0 e 3 a 3......... 2

Si consideri il caso A = 24 102 8 12 334 136 8 48 82 si calcolino esplcitamente le matrici Q e R e si verifichi che effettivamente A = QR. 5. Congettura di Collatz. Viene generata una successione di numeri interi, secondo una regola indicata di seguito, e l algoritmo si arresta quando il nuovo numero è uguale a 1. La congettura ipotizza che la successione si arresti, qualunque sia l intero n utilizzato come punto di partenza. { a0 = n, dove a i = f(a i 1 ) { n/2 n pari f(n) = 3n + 1 n dispari (a) Si implementi una funzione che calcola la successione degli a i, avendo la possibilità di scegliere il valore di a 0. (b) Si implementi una funzione collatz(n) che calcola quanti elementi ci sono nella successione nel momento in cui l algoritmo si arresta (ovvero il valore di i del primo elemento della successione tale che a i = 1). suggerimento: si utilizzino, nell ordine, i comandi Return[value] e Break[] in un ciclo Do. (c) Si utilizzi la funzione del punto precedente per generare una lista il cui elemento generico è la coppia {n, collatz[n]}, con n compreso tra 1 e 10000. Si disegnino questi punti. 3

C++ Si risolva l esercizio proposto. Per facilitare la correzione, se possibile includere tutto in un unico file sorgente. La sufficienza è raggiunta risolvendo correttamente i primi quattro punti. Cammini su reticolo quadrato 1. Si scriva una classe Pos2D che rappresenterà un vettore (equivalentemente, un sito) in un reticolo quadrato. Tra i membri public si mettano le due coordinate intere. Si scriva un opportuno costruttore che le assegni (senza valori di default) e il costruttore di copie. 2. Si scrivano gli overloading degli operatori + e ==, che dovranno realizzare rispettivamente la somma e il confronto tra due vettori. 3. Si scriva una classe Walk che rappresenterà un cammino. Tra i membri protected si metta la posizione corrente del cammino sul reticolo. Tra i membri public si scriva un costruttore che richieda come parametro la posizione iniziale e la assegni. Si specifichi come valore di default la posizione (0, 0). 4. Si scriva una access function position (membro pubblico di Walk) che restituisca la posizione corrente. 5. Si implementi l overloading dell operatore += (anch esso membro di Walk) in modo che la sintassi w += δ incrementi la posizione corrente del cammino w di un passo δ (vettore sul reticolo). Per risolvere i punti successivi, questo operatore dovrà avere comportamento polimorfico: lo si dichiari in modo tale che questo avvenga. 6. Nel main si istanzi un oggetto di tipo Walk con posizione iniziale (0, 0). Gli si vuole far compiere il cammino identificato dai seguenti vettori spostamento δ i = ( 2 cos(i/5) + 1/2, 2 sin(i/5) + 1/2 ) per i = 0, 1, 2,... (il simbolo indica la parte intera, realizzata in c++ dalla funzione floor). Si trovi dopo quanti passi (cioè a quale valore di i) il cammino si trova nella posizione ( 5, 17). 7. Si scriva una classe AvoidingWalk, che erediti pubblicamente da Walk. Questa implementerà il vincolo di non passare su siti già visitati. A questo scopo, si metta tra i membri private un std::set che conterrà i siti già visitati. (Attenzione: per poter usare questo container associativo, sarà necessario implementare un ulteriore caratteristica di Pos2D.) 8. Commentare brevemente sul motivo per cui un container di questo tipo sia preferibile ad un array sequenziale (come std::vector) in questo contesto. Si scriva inoltre il costruttore di AvoidingWalk. 4

9. Si scriva l operatore += (override di quello ereditato da Walk) in modo che realizzi il passo solo se questo fa finire il cammino su un sito non ancora visitato (in caso contrario la posizione rimane invariata). Si usino i due seguenti membri di std::set: la funzione insert, che inserisce un elemento; la funzione find, che cerca un elemento e restituisce un iteratore ad esso, se lo trova, oppure un iteratore a end() se non lo trova. (Facoltativo: per migliorare la performance, si usi la versione di insert che vuole come primo argomento un iteratore alla posizione dove ci si aspetta che verrà inserito l elemento.) 10. Si verifichi che lo stesso codice scritto nel main al punto 6 funziona per un AvoidingWalk, e si misuri, anche per questo tipo di cammino, il numero di passi per raggiungere il punto ( 5, 17). 11. Si scriva una classe WeaklyAvoidingWalk, che erediti in modo pubblico da AvoidingWalk, che implementerà un vincolo meno stringente. In particolare, ad ogni passo verrà scelta una mossa vincolata (quella di AvoidingWalk, che ricorda ed evita i siti visitati) o una mossa non vincolata (quella di Walk, che non ricorda i siti visitati) con probabilità rispettivamente p e 1 p. Si metta questa probabilità p tra i membri privati di WeaklyAvoidingWalk e si scriva il costruttore che la inizializza. Si scriva quindi l override dell operatore += in modo che richiami il codice già scritto per le due classi base. [Può essere utile usare drand48() come generatore di numeri pseudo-casuali compresi tra 0 e 1.] 12. Scrivere una funzione globale compare, che prenda come argomenti due oggetti di tipo Walk (si valuti se passarli per copia o per referenza, considerando il punto successivo) e che faccia eseguire ai due cammini 100 passi il cui vettore δ abbia le due componenti scelte a caso (indipendentemente) tra il valore 1 e il valore 1. I passi fatti dai due dovranno essere esattamente gli stessi e nello stesso ordine. Il valore di ritorno della funzione indicherà se i due cammini hanno posizione finale identica oppure no. 13. Nel main, eseguire 10 000 confronti, usando la funzione compare, tra un Walk e un WeaklyAvoidingWalk con parametro p = 0.087, e verificare che arrivano nello stesso punto in circa metà dei casi. (Entrambi partono dall origine ogni volta.) 5