Strumenti Utente

Strumenti Sito


fisica:informatica:201415:esercitazioni:esercitazione3bis

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

Entrambe le parti precedenti la revisioneRevisione precedente
Prossima revisione
Revisione precedente
fisica:informatica:201415:esercitazioni:esercitazione3bis [21/01/2015 alle 15:08 (10 anni fa)] – [Esercitazione 3 bis] Susanna Pelagattifisica:informatica:201415:esercitazioni:esercitazione3bis [28/02/2015 alle 08:24 (10 anni fa)] (versione attuale) – [Esercizio 1: Approssimazione dell'integrale] Susanna Pelagatti
Linea 1: Linea 1:
 ====== Esercitazione 3 ====== ====== Esercitazione 3 ======
  
 +Per la soluzione di questi esercizi utilizzare dove serve la libreria matematica 
  
 +[[http://www.tutorialspoint.com/c_standard_library/math_h.htm|La libreria matematica ''math.h'']] 
 +Includendo all'inizio l'header file
 +<code>
 +#include <math.h>
 +</code>
 +e compilando con
 +<code>
 +gcc -Wall -pedantic file.c -o nome_eseguibile -lm
 +</code>
 ===== Esercizio 1: Approssimazione dell'integrale ====== ===== Esercizio 1: Approssimazione dell'integrale ======
 Consideriamo la funzione Consideriamo la funzione
Linea 14: Linea 24:
 il procedimento dei trapezio per ''n = 2, 3, 4,...nmax''. Stampando su standard output i valori ottenuti e la differenza con l'integrale esatto calcolato analiticamente. il procedimento dei trapezio per ''n = 2, 3, 4,...nmax''. Stampando su standard output i valori ottenuti e la differenza con l'integrale esatto calcolato analiticamente.
  
 +===== Esercizio 2: Calcolo della radice quadrata ======
 +Dato un numero reale positivo //a// si consideri la sequenza dei numeri reali //x// definita da 
 +<code>
 +x[0] = 1
 +x[i+1] = 1/2*(x[i] + a/x[i])
 +</code>
 +si puo' dimostrare che ''x[i]'' tende alla radice quadrata di //a// per //i// che tende all'infinito.
 +
 +Scrivere un programma che legga il valore di //a// da standard input e calcoli la radice quadrata di //a// utilizzando la sequenza. In particolare, si calcoli la sequenza fino a che ''x[i]'' non diventa uguale a ''x[i+1]'', il valore ottenuto e' l'approssimazione cercata per la radice quadrata di //a//.
 +
 +Ad ogni ciclo, far stampare su standard output il numero dell'iterazione ''i'', il valore di ''x[i]'' ed il valore di ''a-x[i]*x[i]'' per controllare la convergenza.
 +
 +===== Esercizio 2: L'insieme di Mandelbrot ======
 +L'[[http://it.wikipedia.org/wiki/Insieme_di_Mandelbrot|insieme di Mandelbrot]]e' un insieme frattale definito come l'insieme dei numeri complessi //c// per i quali la successione definita da:
 +<code>
 +z(0) = 0
 +z(n+1) = z(n)^2 + c
 +</code>
 +e' limitata, cioe' ''|z( n )|< 2'' per ogni ''n >=0''
 +Infatti al variare di ''c'', la sequenza puo' tendere
 +all’infinito o rimanere confinata in un disco di raggio 2 del piano complesso centrato
 +nell’origine.
 +
 +L’algoritmo piu' semplice per visualizzare (una approssimazione de) l’insieme di Mandelbrot ´e l’//Escape Time Algorithm//. In questo algoritmo, dati ''A'' (l’area del piano complesso
 +da visualizzare) ed ''r'' (una precisione fissata) si effettuano i seguenti passi:
 +  - Si suddivide A in una griglia di punti a distanza uniforme (pixel) 
 +  - per ogni pixel (x, y) 
 +      - si calcolano r valori della sequenza con c=(x,y)
 +      - se dopo r iterazioni ''|z( r )|<= 2'' si considera c appartenente all'insieme e si assegna a c il colore NERO
 +  - altrimenti si assegna a c il colore j, che e' il minimo indice per cui ''| z(j) |>=2''
 +Di seguito viene mostrato un possibile pseudocodice per il calcolo del singolo pixel:
 +<code>
 +Per ogni pixel:
 +{
 +x = x0 = x co-ordinate of pixel
 +y = y0 = y co-ordinate of pixel
 +x2 = x*x
 +y2 = y*y
 +iteration = 0
 +maxiteration = 1000
 +while ( x2 + y2 < (2*2)
 +AND iteration < maxiteration )
 +{
 +y = 2*x*y + y0
 +x = x2 - y2 + x0
 +x2 = x*x
 +y2 = y*y
 +iteration = iteration + 1
 +}
 +if ( iteration == maxiteration )
 +colour = black
 +else
 +colour = iteration
 +}
 +</code>
 +Nel codice, le coordinate del pixel (x, y) sono usate come valore iniziale per il calcolo. Il risultato di ogni iterazione e' usato come punto d’inizio della successiva. Ad ogni
 +iterazione si controlla se siamo usciti dal cerchio di raggio 2 (e quindi se (x,y) non
 +appartiene a M), se questo e' vero si assegna il numero di iterazioni come colore a (x, y) e
 +si considera il prossimo punto, altrimenti si calcola la nuova iterazione. Quindi, rispetto
 +alla definizione iniziale:
 +
 +<code>
 +z = x + iy 
 +c = x0 + iy0 
 +z^2 = x^2 + i2xy − y^2. 
 +</code>
 +Inoltre, ''r'' e' ''maxiteration''(1000).
  
 +Scrivere un programma C che calcola l'insieme di Mandelbrot per il rettangolo di estremi (-2,1) (1,-1) e stampando sullo standard output i colori dei pixel suppenendo di dividere il rettangolo in 100x100 pixel.
fisica/informatica/201415/esercitazioni/esercitazione3bis.1421852929.txt.gz · Ultima modifica: 21/01/2015 alle 15:08 (10 anni fa) da Susanna Pelagatti

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki