Archivio per marzo, 2010

Pain of Salvation – A trace of blood

Anche se il testo di questo brano è davvero molto triste, infatti descrive la sofferenza di una coppia vittima di un aborto spontaneo, la musica è incredibilmente bella.


PyFoil, disegna profili alari con il cellulare

PyFoil è un semplice programmino scritto da me in Python che permette di disegnare profili NACA a 4 e 5 cifre, direttamente dal cellulare.

Per poterlo utilizzare è necessario installare il software Python for S60 sul proprio cellulare, che è reperibile a questo indirizzo.

Ecco alcuni screenshot del programma:


Segue il codice dell’applicazione.

Leggi il resto dell’articolo »


Giroscopio con lettore CD nello spazio

Anche se questo video è un po’ vecchio (risale ad Aprile 2003), resta comunque affascinante.

È stato girato sulla ISS e mostra il funzionamento di un originale giroscopio triassiale realizzato con dei lettori CD.


Un rudimentale tubo di Pitot

Durante gli studi di ingegneria aerospaziale, ho incontrato questo simpatico strumento che è il tubo di Pitot.
La sua funzione, che è ampiamente descritta su Wikipedia, è quella di misurare la velocità di un fluido.

Il tubo di Pitot è costituito da un tubo, di una generica lunghezza, disposto parallelamente alla direzione del fluido (in particolare, al vettore velocità). Un’estremità del tubo è aperta, per permettere l’ingresso del fluido, mentre l’altra estremità è collegata ad un manometro. I manometri che si possono utilizzare sono i più disparati, quello che ho utilizzato io sfrutta la Legge di Stevino.

p_{sta}=-\rho g \Delta z\\\\p_{sta}:\text{Pressione statica}\\\rho :\text{Densita

Com’è possibile vedere nell’immagine qui sopra, il manometro e il tubo di Pitot non sono altro che un semplice tubo pieno d’acqua, collegati ad una scala millimetrata che permette di misurare il dislivello della colonna d’acqua. In condizioni iniziali, il livello dell’acqua segnato è 13.8 mm.
(Attenzione: la scala millimetrata posta accanto al manometro serve per misurare le variazioni di quota dell’acqua, non l’altezza assoluta. È questo infatti il dato necessario per calcolare la pressione.)

Ho colorato l’acqua con dell’inchiostro nero, in modo da poter visualizzarne meglio il dislivello all’interno nel tubo. L’inchiostro non ha la stessa densità dell’acqua, ma data la natura qualitativa di questo esperimento, la variazione di densità dovuta alla sua presenza è del tutto trascurabile.

Il tubo di Pitot si trova in genere sugli aerei e misura la velocità dell’aereo rispetto all’aria. Data la difficoltà nel testare il tubo di Pitot in condizioni di moto rispetto al fluido, il modo più semplice per verificarne il funzionamento è quello di mettere in moto l’aria rispetto allo strumento, tenendo quindi fermo il tubo. Ciò che conta è infatti il moto relativo tra il fluido e il corpo.

L’oggetto che ho utilizzato per mettere in moto l’aria è un semplice phon.
Indirizzando infatti il getto del phon parallelamente al tubo, è possibile misurare la velocità dell’aria che esce da questo.

Come è possibile vedere dalle immagini, la colonna d’acqua nel tubo subisce una variazione di quota di circa 1.9 cm.
Per la Legge di Stevino, la pressione legata a questa variazione di quota è:
p_{sta}=-\rho g \Delta z=-(1000 kg/m^3)(-9.81 m/s^2)(0.019 m)=186 Pa

L’aria che entra all’interno del tubo, alla velocità incognita V, genera una pressione dinamica che è:
p_\text{din}=\frac12\rho V^2\\p_\text{din}:\text{Pressione dinamica}\\\rho:\text{Densita

Questa pressione va a bilanciare la pressione statica che abbiamo trovato con la Legge di Stevino, quindi:
p_\text{sta}=p_\text{din}=186 Pa

Dall’espressione della pressione dinamica, ormai nota, è possibile ricavare la velocità del fluido:
V=\sqrt{\frac{2p}\rho}=\sqrt{\frac{2\cdot 186 Pa}{1.225 kg/m^3}}=17.4 m/s

La velocità dell’aria che esce dal mio phon è di circa 17.4 m/s (o anche 62.6 km/h). Come valore della densità dell’aria ho utilizzato quello della tabella disponbile su Wikipedia, alla gelida temperatura del mio garage di 15°C.

È importante notare che la densità utilizzata nella Legge di Stevino è la densità dell’acqua, mentre la densità utilizzata nell’espressione della pressione dinamica è la densità dell’aria.

Volendo approfondire un po’ l’argomento, bisogna tenere presente il fatto che il tubo di Pitot non misura soltanto la pressione dinamica, ma misura la pressione totale, che per il Teorema di Bernoulli è:
p_\text{tot}=p_\text{stat}+p_\text{din}=p_\text{stat}+\frac12\rho V^2

Per conoscere quindi la pressione dinamica, occorrerebbe conoscere anche la pressione statica attorno al tubo, che viene misurata utilizzando una seconda presa d’aria sul collo del tubo e va sottratta alla pressione totale. Però, nelle condizioni in cui ho effettuato l’esperimento, il manometro utilizzato è soggetto alla stessa pressione statica a cui è soggetto il tubo di Pitot, che è la pressione atmosferica. Quindi il valore misurato tramite il dislivello della colonna d’acqua è già la pressione dinamica.

Com’è infatti possibile vedere da questa immagine, la pressione totale misurata tramite la presa d’aria b, viene confrontata con la pressione statica misurata dalle due prese d’aria a. Il dislivello h misurerà precisamente la pressione dinamica.


Quanto è alto quel grattacielo?

Siamo a Copenhagen, facoltà di Fisica, durante la prova scritta di un esame.

Traccia del problema
Descrivere come determinare l’altezza di un grattacielo con un barometro.

Risposta di uno studente
Si lega un lungo pezzo di spago al collo del barometro, poi si cala il barometro dal tetto del grattacielo fino al suolo. La lunghezza dello spago più la lunghezza del barometro saranno uguali all’altezza del palazzo

Lo studente viene bocciato ma fa ricorso. La Commissione esamina il ricorso e stabilisce che la risposta è corretta, ma non mostra una conoscenza esplicita della fisica. Lo studente ha perciò diritto ad una prova d’appello:
Per dimostrare familiarità con i principi fondamentali della fisica lo studente risponda alla stessa domanda in un tempo massimo di 6 minuti

Lo studente rimane in silenzio per 5 minuti, scrive qua e là su un foglio di carta e poi, prima dello scadere del tempo risponde:
«Ci sono molti modi di rispondere alla domanda, e non riesco a scegliere quale. Comunque, si potrebbe portare il barometro sul tetto del grattacielo, lasciarlo cadere giù e misurare il tempo che impiega a raggiungere il suolo. L’altezza del grattacielo può essere determinata dalla formula che ho elaborato su questo foglio. Tuttavia, non sarebbe salutare per il barometro.

Una soluzione alternativa è questa: se c’è il sole si potrebbe misurare l’altezza del barometro e la lunghezza della sua ombra quando è in piedi. Poi si misura la lunghezza dell’ombra del grattacielo e con una semplice proporzione geometrica si ottiene l’altezza del grattacielo. La formula per calcolarla è sul foglio, sotto alla precedente.

Tuttavia, se proprio vogliamo essere molto scientifici, si potrebbe legare un pezzo di spago al barometro e farlo oscillare come un pendolo, prima al piano terra e poi sul tetto.
L’altezza del grattacielo potrebbe poi essere determinata dalla differenza nella formula gravitazionale che ho derivato su quest’altro foglio di carta. Mi scuso per il calcolo lungo e complesso.

Però c’è anche un altro modo non disprezzabile. Se il grattacielo ha una scala di emergenza, sarebbe più semplice salire le scale e misurare l’altezza del palazzo utilizzando l’altezza del barometro come unità di misura.

Ma se davvero si vuole essere noiosi e ortodossi, si potrebbe sempre utilizzare il barometro per misurare la pressione atmosferica sul tetto, poi al suolo e convertire la differenza di millibar in metri, così da ottenere l’altezza del palazzo.

Tuttavia, dal momento che il nostro insegnante ci esorta continuamente ad essere creativi nell’applicazione dei metodi scientifici, il modo indubbiamente migliore sarebbe quello di bussare alla porta del custode del palazzo e chiedergli: “Le interesserebbe un nuovo barometro? Posso regalarle questo, se mi dice l’altezza del palazzo…»

La Commissione delibera che lo studente debba essere promosso col massimo dei voti.
Lo studente era Niels Henrik David Bohr, Premio Nobel per la fisica nel 1922 per i suoi studi sulla struttura atomica e sull’atomo di idrogeno.


Come utilizzare Wolfram Alpha per l’esame di Analisi

Ho già parlato delle potenzialità di Wolfram Alpha in un precedente articolo, ciò che voglio fare ora è descriverne il suo funzionamento finalizzato all’esame più temuto al primo anno delle facoltà scientifiche: Analisi matematica.

Innanzitutto, è importante sapere che tutte le operazioni matematiche svolte da Wolfram Alpha, sono eseguite da Wolfram Mathematica, un software commerciale della Wolfram. La sintassi di Wolfram Alpha non è la stessa di Mathematica, ma essendo in grado di comprendere quasi ogni tipo di richiesta, spesso riesce ad interpretare anche la sintassi di Mathematica.

I comandi che utilizzo in questo articolo come input per Wolfram Alpha non sono gli unici comandi che si possono utilizzare per ottenere lo stesso risultato. Ad esempio, se voglio calcolare la somma di due numeri, posso scrivere “4+9“, “sum of 4 and 9“, “what is the sum of 4 and 9?” o ancora “can you tell me the sum of 4 and 9?“.
Se trovate dei comandi più intuitivi di queli che ho utilizzato io, ben venga :).

Funzioni

La prima cosa che possiamo provare a fare con Wolfram Alpha è uno studio di funzione.
Consideriamo la funzione:

f(x)=\frac{\sqrt{1-x^2}}{3-x}

Inserendo l’espressione di questa funzione in Wolfram Alpha (link), il programma ci fornirà una serie di informazioni utili per lo studio della funzione:

  • Input: è la funzione che abbiamo appena inserito.
  • Plots: una serie di grafici caratteristici della funzione. Il primo per x da -4 a 6, il secondo per x da -40 a 40. Gli estremi dei grafici variano a seconda della funzione e sono generati in modo da permettere una visione di tutte le sue particolarità.
    Entrambi i grafici sono costituiti da una linea rossa e una linea blu. Se si considera la funzione definita solo in un sottoinsieme dei numeri reali, il dominio è x\in\left[-1,+1\right] a causa della radice, e il grafico è rappresentato dalla linea blu. Se però consideriamo la funzione in un sottoinsieme dei numeri complessi, la radice è definita sempre e l’unica limitazione del dominio è x\ne 3. La linea rossa rappresenta quindi la parte immaginaria della funzione e in x=3 è tracciata una linea verticale che ne costituisce un asintoto.
  • Alternate forms: una serie di espressioni alternative con le quali possiamo esprimere la nostra funzione. È molto utile ad esempio se la nostra funzione va considerata in un prodotto di funzioni e ci sono elementi che si possono semplificare.
  • Roots: sono le radici (o zeri) della funzione, ossia i valori delle x per i quali la funzione vale zero.
  • Series expansion at x = : è lo sviluppo in serie di Taylor della funzione, con punto di partenza in alcuni valori caratteristici della funzione come le radici, l’origine e all’infinito.
    Per calcolare lo sviluppo in serie di Taylor con un punto di partenza diverso, basta scrivere “f(x) series expansion in x=k“, dove f(x) è la nostra funzione e k il punto di partenza che ci interessa (link).
    Verrà inoltre effettuato un grafico di confronto tra la funzione e i suoi sviluppi in serie di primo e secondo ordine:
  • Derivative: è la derivata della funzione rispetto ad x.
  • Indefinite integral: è l’integrale indefinito della funzione, ossia una sua primitiva. Notare che tan^{-1} e sin^{-1} sono rispettivamente Arcotangente e Arcoseno, come è scritto in basso a destra.

Conoscere l’espressione della derivata e dell’integrale di una funzione è senza dubbio un’informazione notevole, per chi è alle prese con uno studio di funzione. Ma un’informazione ancora migliore sarebbe conoscere i passaggi da seguire per arrivare all’espressione di quella derivata o integrale. Ebbene, Wolfram Alpha ci fornisce persino questa informazione.
Cliccando infatti su Show steps verranno mostrati tutti i passaggi che bisogna seguire per risolvere quella derivata o quell’integrale.
Per l’integrale suggerisce infatti di effettuare prima una sostituzione trigonometrica, poi una seconda sostituzione e infine mostra il valore di ogni integrale che permette di arrivare alla soluzione finale (link).
(beh, sì, ho inventato una funzione che ha un integrale davvero particolarmente complesso!)

  • Global maximum/minimum: sono i punti di massimo e minimo assoluti della funzione, con i rispettivi valori.
  • Limit: sono dei limiti della funzione calcolati a -\infty e +\infty. Ovviamente viene considerata la parte immaginaria della funzione, dato che la parte reale è definita soltanto tra -1 e +1.
  • Series representations: un’altra rappresentazione in serie della funzione.
  • Property: nel caso in cui la funzione soddisfi particolari proprietà di simmetria o periodicità, queste verranno indicate sotto questa voce. Ad esempio, nel caso del seno, ci informa che questo è periodico di 2\pi (link).

Integrali e derivate

Abbiamo già visto come nello studio di funzione Wolfram Alpha sia in grado di calcolare, tra le varie cose, un integrale o una derivata.
Se però abbiamo bisogno di maggiori informazioni su un integrale o una derivata, basterà inserire come input “integrate f(x)“, oppure “derivate f(x)“, dove f(x) è la nostra funzione (link 1, link 2).

Come prima, dopo aver calcolato il valore della derivata o dell’integrale con tanto di passaggi intermedi, verranno riproposte una serie di informazioni relative allo studio di funzione, dove questa volta la funzione studiata è la derivata o l’integrale della funzione che stavamo studiando. E quindi: grafico, forme alternative, radici, sviluppi in serie, ecc…

Potrebbe essere necessario però calcolare il valore di un integrale definito.

\int_a^b f(x)dx

Basterà inserire come input “integrate f(x) from a to b“, dove a e b sono i nostri estremi di integrazione (link).
Verrà mostrato il valore numerico dell’integrale e una sua rappresentazione grafica.
Qualora il risultato dovesse essere espresso in forma decimale, è possibile mostrare quante cifre decimali si desidera cliccando su More digits.

Un’altra operazione interessante è quella di derivata parziale. Se abbiamo infatti una funzione definita in \mathbb{R}^2:

f(x,y)=\frac{3x^2-2xy+8xy^2}{\sqrt{y^2-x^2}}

Per avere la derivata rispetto ad x, basta scrivere “derivate f(x,y) in x” e quella rispetto ad y “derivate f(x,y) in y” (link).

Ancora una volta, con i relativi passaggi (Show steps).

Risoluzione di equazioni

Wolfram Alpha offre una quantità inimmaginabile di strumenti matematici. Uno dei più semplici e più utilizzati, è la risoluzione di equazioni.
Risolvere un’equazione è semplicissimo, basta digitare “solve eq(x)“, dove eq(x) è la nostra equazione (link).
Oltre alle soluzioni reali, verranno ovviamente fornite anche le soluzioni in campo complesso.

Per risolvere un sistema di equazioni, siano esse di qualsiasi tipo, basta scrivere le equazioni separate da una virgola.
Esempio: “solve x+3y=5, 4x-8y=0” (link).

Oltre alla risoluzione di equazioni tradizionali, Wolfram Alpha è in grado di risolvere molti altri tipi di equazioni, come ad esempio le equazioni differenziali. Per risolvere, ad esempio, questa equazione differenziale:

y(x)+3y

basta digitare “solve y(x)+3y'(x)=x^2” (link). Verrà restituito il tipo di equazione differenziale (nel nostro caso ordinaria lineare di primo ordine), l’insieme di funzioni che soddisfano l’equazione (se esiste), il grafico di una delle soluzioni con la relativa derivata, e un grafico dell’andamento di queste funzioni:

Le capacità di Wolfram Alpha non si fermano neanche davanti ad un’equazione differenziale non lineare di terzo ordine, come l’Equazione di Blasius:

2f^{

Questa equzione non ha soluzioni analitiche, ma esclusivamente numeriche.
Wolfram Alpha non dà la soluzione numerica (forse sarebbe troppo!) ma ci fornisce comunque un grafico dell’andamento della funzione e delle sue derivate (link).

Per informazione, l’equazione può essere risolta comunque semplicemente utilizzando Wolfram Mathematica, con i tre seguenti comandi:

sol=NDSolve[{f'''[x]+0.5f[x]*f''[x]==0,f'[0]==0,f[0]==0,f'[50]==1},f,{x,0,10}]
b[x]=f[x]/.sol
Style[TableForm[{Table[x,{x,0.1,8,0.2}],Table[{Evaluate[f[x]/.sol]},{x,0.1,8,0.2}],Table[{Evaluate[f'[x]/.sol]},{x,0.1,8,0.2}],Table[{Evaluate[f''[x]/.sol]},{x,0.1,8,0.2}]},TableDirections->Row,TableHeadings->{{"n", "f", "f'", "f''"},None}],12]

Successioni e serie numeriche

Per quanto riguarda successioni e serie numeriche, l’informazione che generalmente interessa lo studente di Analisi è la convergenza.

– Per le successioni, basta calcolare un limite. Il comando per risolvere un limite è “limit f(n) n to k“, dove f(n) è la successione, k è il valore a cui fate tendere n (per infinito, è infinity).
Ad esempio, per la successione:

f(n)=\frac{n}{n+1}

basta digitare “limit n/(n+1) n to infinity” (link).

– Per le serie numeriche il comando è “sum f(n) n to infinity“. Ad esempio per:

\sum_{n=1}^{\infty} \frac{1}{n^2+1}

basta digitare “sum 1/(n^2+1)” (link).
Anche qui, come per integrali e derivate, le informazioni fornite sono molto interessanti:

  • Infinite/approximate sum: il valore della sommatoria in forma analitica (se esiste) e decimale.
  • Finite sum approximation: è una stima della somma per valori di n finiti. (il suo valore non indica che la serie converge!)
  • Convergence tests: questa voce è molto interessante, perché ci informa di quali criteri di convergenza sono stati applicati, e quali di questi sono soddisfatti.
  • Partial sums: è un grafico delle somme parziali che mette in mostra l’andamento della serie.
  • Partial sum formula: è un’espressione per le somme parziali.

Infine, ecco il link del portentoso strumento:
http://www.wolframalpha.com

Alternate forms


Sette e mezzo in Python

In qualche ora di tempo libero ho scritto questo semplice giochino in Python. Dovrebbe rappresentare il gioco del Sette e mezzo ma, anche se le modalità di gioco sono quelle, non sono sicuro che a livello probabilistico sia lo stesso.

Il gioco si svolge contro il computer: prima vengono distribuite le due carte, poi il giocatore può richiederne altre finché non è soddisfatto del suo punteggio.
Successivamente il banco richiede le sue carte finché non si rivelano i punteggi.

Le carte fino a 7 corrispondono a un punteggio del loro valore, le carte 8, 9 e 10 corrispondono a mezzo punto.
Vince il giocatore con il punteggio maggiore, ma se si supera il punteggio di 7 e mezzo si perde, e in caso di punteggio pari vince il banco.

from random import randint
deck = [4 for foo in range(10)]
score = 0.0
dscore = 0.0

def give_card():
    # Return a card and remove it from the deck
    global deck
    while any(deck):
        card = randint(0, 9)
        if deck[card] > 0:
            deck[card] -= 1
            return card

def cscore(hit, score):
    # Calculate the score
    if hit < 7:
        return score + hit + 1
    else:
        # Gold King
        if hit == 10 and randint(0, deck[9]-1) == 0:
            print 'E\' uscita la matta!'
            return 7
        else:
            return score + 0.5

while True:
    print '***************************************'
    # I need first card value because dealer can't see it
    your_card = fcard = give_card()
    score = cscore(your_card, score)
    dealer_card = give_card()
    dscore = cscore(dealer_card, dscore)
    print 'Tua carta: %d (%.1f)' % (your_card+1, score)
    # Card request
    while True:
        # Your turn
        if raw_input('\nAltra carta? [y/n] ') == 'y':
            your_card = give_card()
            print '[Carta] %d' % (your_card+1)
            score = cscore(your_card, score)
            print 'Punteggio: %.1f' % score
            if score > 7.5:
                print '**** Hai sballato! ****'
                break
        # Dealer turn
        else:
            # Dealer ask for a card if his score is lower then your shown score
            # Dealer may think you are bluffing (randint)
            print 'Il banco ha: %d (%.1f)' % (dealer_card+1, dscore)
            while dscore < score - cscore(fcard, 0) or randint(0, 3) == 0\
                  and dscore < 7.5:
                dealer_card = give_card()
                print '[Carta] %d' % (dealer_card+1)
                dscore = cscore(dealer_card, dscore)
                if dscore > 7.5:
                    break
            print 'Punteggio del banco: %.1f' % dscore
            if score > dscore or dscore > 7.5:
                print '\o/ \o/ \o/ Hai vinto! \o/ \o/ \o/'
            else:
                print '**** Hai perso! ****'
            break
    # Game request
    if raw_input('\nGiochi ancora? [y/n] ') == 'y':
        score = 0.0
        dscore = 0.0
        print '\n'
    else:
        break