mercoledì 10 agosto 2011

L'EQUAZIONE DI BATMAN


Pochi giorni fa Ryan North, famoso autore canadese di fumetti e programmatore, ha esordito sulla sua pagina Twitter annunciando d’aver scoperto l’equazione matematica del logo di Batman. Avete presente il pipistrello nero su sfondo ellittico tipicamente giallo? Bene. La notizia è stata ripresa anche da Gizmodo USA tramite Mat Honan che da buon scettico ha chiesto ai suoi lettori di verificarla. Ad oggi ancora nessuno si era cimentato nella sua verifica e il perché è presto detto: l’equazione è terribilmente lunga e complessa.


Eccola qui, esattamente come è stata riportata dal suo scopritore.
Come molti di voi avranno certamente intuito, si tratta della moltiplicazione di 6 termini complessi, uguagliata a 0. Secondo Ryan North, quindi, rappresentando questa equazione in un grafico cartesiano bidimensionale (coppie di punti x e y) si otterrebbe il famoso logo di Batman.
Il primo passo verso la rappresentazione grafica di una qualsiasi equazione matematica, di qualsivoglia numero di variabili, è la sua conversione in un formato leggibile per un software di calcolo. 

La notazione che si suole utilizzare nelle applicazioni scientifiche si chiama infissa. In questo tipo di notazione il simbolo dell’operazione, detto operatore, si scrive tra gli operandi su cui esso agisce. Si tratta della notazione più diffusa, sebbene ne esistano di altre (postfissa e prefissa) ampiamente supportate dai più importanti linguaggi di programmazione. A titolo di esempio: se volessimo sommare 3 e 5, e moltiplicare il risultato per 2 avremmo le seguenti possibili formulazioni (a meno di varianti):
  • infissa: (3 + 5) * 2
  • postfissa (o polacca): 3 5 + 2 *
  • prefissa: * 2 + 3 5

Torniamo alla nostra equazione. Per semplicità ho riscritto manualmente in notazione infissa un termine alla volta, utilizzando:
  • il simbolo ^ per indicare l’elevamento a potenza;
  • la funzione sqrt(_) per indicare la radice quadrata;
  • la funzione abs(_) per indicare il valore assoluto.

Si tratta di simboli e nomi di funzioni accettate dalla maggior parte dei software di calcolo e dei linguaggi di programmazione. E’ opportuno notare che nella notazione infissa è indispensabile l’uso delle parentesi al fine di enunciare senza ambiguità l’ordine di applicazione dei vari operatori. Procedendo alla scrittura dei diversi termini in notazione infissa, si ottengono le formulazioni che seguono.

Termine 1:
(((x/7)^2)*(sqrt(abs(abs(x)-3)/(abs(x)-3)))+((y/3)^2)*(sqrt((abs(y+((3*sqrt(33))/7)))/(y+((3*sqrt(33))/7))))-1)

Termine 2:
((abs(x/2))-(((((3*sqrt(33))-7)/112))*x^2)-3+(sqrt(1-(abs(abs(x)-2)-1)^2))-y)

Termine 3:
(9*(sqrt((abs((abs(x)-1)*(abs(x)-0.75)))/((1-abs(x))*(abs(x)-0.75))))-(8*abs(x))-y)

Termine 4:
((3*abs(x))+0.75*(sqrt((abs((abs(x)-0.75)*(abs(x)-0.5)))/((0.75-abs(x))*(abs(x)-0.5))))-y)

Termine 5:
(2.25*(sqrt((abs((x-0.5)*(x+0.5)))/((0.5-x)*(0.5+x))))-y)

Termine 6:
((((6*sqrt(10))/7)+(1.5-(0.5*abs(x)))*(sqrt((abs(abs(x)-1))/(abs(x)-1)))-((6*sqrt(10))/(14))*(sqrt(4-(abs(x)-1)^2)))-y)

Le espressioni sono ora scritte in un linguaggio comprensibile all’elaboratore. Ora è necessario ricostruire l’equazione principale ponendo i vari termini in moltiplicazione tra loro e uguagliando tutto a 0. 

Ecco qui l’equazione di Ryan North:
((((x/7)^2)*(sqrt(abs(abs(x)-3)/(abs(x)-3)))+((y/3)^2)*(sqrt((abs(y+((3*sqrt(33))/7)))/(y+((3*sqrt(33))/7))))-1) * ((abs(x/2))-(((((3*sqrt(33))-7)/112))*x^2)-3+(sqrt(1-(abs(abs(x)-2)-1)^2))-y) * (9*(sqrt((abs((abs(x)-1)*(abs(x)-0.75)))/((1-abs(x))*(abs(x)-0.75))))-(8*abs(x))-y) * ((3*abs(x))+0.75*(sqrt((abs((abs(x)-0.75)*(abs(x)-0.5)))/((0.75-abs(x))*(abs(x)-0.5))))-y) * (2.25*(sqrt((abs((x-0.5)*(x+0.5)))/((0.5-x)*(0.5+x))))-y) * ((((6*sqrt(10))/7)+(1.5-(0.5*abs(x)))*(sqrt((abs(abs(x)-1))/(abs(x)-1)))-((6*sqrt(10))/(14))*(sqrt(4-(abs(x)-1)^2)))-y))=0


Utilizzando un qualsiasi software per la rappresentazione di equazioni (in questo caso Texas Instruments Derive 6), si ottiene una piccola sorpresa (molti di voi l’avranno intuito subito): l’operazione di rappresentazione grafica non visualizza un bel nulla. Come mai? Cerchiamo di capirlo insieme.


L’errore di Ryan North è stato quello di porre in moltiplicazione tra loro tutti i singoli termini. Riflettendo sulla geometria del logo di Batman si nota subito che si tratta dell’unione di singoli grafici. Infatti, se visualizziamo le 6 equazioni costruite partendo da ciascun termine (uguagliandolo a 0) otterremo porzioni del logo, che visualizzate contemporaneamente sullo stesso grafico cartesiano rappresentano il logo che noi tutti conosciamo.


Di seguito riporto la rappresentazione grafica dei singoli termini.
Termine 1.


Termine 2.



Termine 3. 
_______

 
Termine 4.



Termine 5.




Termine 6.

E per finire: ecco qui il logo completo!






L'autore: 

Michele Filannino è uno studente di dottorato in Informatica presso il Centre for Doctoral Training dell'Università di Manchester.

Lo scorso anno ha vinto il concorso per giovani ricercatori promosso da Telecom Italia: Working Capital. Nel tempo libero scrive per Melablog.it e per il mensile di tecnologia T3. Ama la matematica ed ogni sua applicazione pratica.

14 commenti:

disabled ha detto...

Forse sto prendendo una cantonata io, ma il luogo degli zeri del prodotto di due funzioni non è l'unione dei luoghi degli zeri lle due funzioni? Direi di sì, no? D'altronde ab=0 se e solo se a=0 o b=0. Quindi mi sembra che se ogni pezzo dell'equazione dà un pezzo del logo, il loro prodotto sia l'unione di tutti questi pezzi.

Michele Filannino ha detto...

Ciao disabled,

gli zeri di una funzione sono cosa ben diversa dal grafico della funzione. Nei diversi termini dell'equazione di Batman vi sono sia la variabile x che quella y. In generale, la moltiplicazione di funzioni non corrisponde all'unione dei grafici.

Ciao,
michele.

disabled ha detto...

Continuo a non capire. Da come tu stesso hai scritto i vari termini è chiaro che si tratti dei luoghi degli zeri di funzioni di due variabili. Rispondendo più direttamente a quello che hai scritto, per sua stessa definizione il grafico di una funzione f(x_1,...,x_n) di n variabili è il luogo degli zeri della funzione di n+1 variabili: y-f(x_1,...,x_n)

Puoi fare una prova per vedere come quello che ho scritto nel precedente post sia corretto facendoti, ad esempio, il grafico di x^2+y^2-1=0 e x^2+y^2-2=0 e vedere come tu ottenga la loro unione graficando (x^2+y^2-1)(x^2+y^2-2)=0.

Michele Filannino ha detto...

Ciao disabled,
plottando le due equazioni che hai fornito, effettivamente i grafici si "sovrappongono".

Con questo prodotto: "equazione_termine5 * (3x-y) = 0" il risultato grafico non corrisponde alla sovrapposizione dei due grafici.

Link:
http://www.wolframalpha.com/input/?i=%282.25*%28sqrt%28%28abs%28%28x-0.5%29*%28x%2B0.5%29%29%29%2F%28%280.5-x%29*%280.5%2Bx%29%29%29%29-y%29*%283x-y%29%3D0

disabled ha detto...

Beh, che le due equazioni, teoricamente, si sovrapponga deriva dalla legge di annullamento del prodotto:

a b =0 se e solo se a=0 o b=0

La mia idea è che il problema in quel plot sia dovuto ad un problema del calcolatore, quei termini sono tutti piuttosto complicati e mettendoli insieme lo fanno "impazzire". Se noti anche solo inserendo il termine 5 si hanno delle imprecisioni, con wolframalpha.

Ciao,
D.

Michele Filannino ha detto...

Ciao disabled,

il problema che tu poni è corretto solo quando "a" e "b" sono numeri: non funzioni.

Mi spiego meglio, le costanti "a" e "b" sono numeri e ovviamente è giusto affermare che il loro prodotto è zero quando almeno uno dei due NUMERI è uguale a 0. Il punto è che nel problema di Batman ci sono delle FUNZIONI al posto dei numeri e quindi è necessario considerare il dominio delle stesse.

Prendi il termine 5 ad esempio (che è quello più piccolo). Si tratta di una funzione con dominio della variabile x in [-0.5;0.5] in tutti gli altri punti il suo valore è indeterminato (quindi non visualizzabile). Sarà ora immediato comprendere che se moltiplico tra loro tutti i termini, la funzione prodotto generata avrà come dominio l'intersezione dei singoli domini.

Graficamente questo non è vero nel logo di Batman finale. In altri termini, minimalmente, per x fuori dall'intervallo [-0.5;0.5] non dovrebbe essere tracciato nulla poiché significherebbe moltiplicare un termine indeterminato per dei numeri (il risultato sarebbe indeterminato).

Questo è il motivo per il quale l'equazione va decomposta in termini visualizzati separatamente e contemporaneamente.

Su Gizmodo USA (http://gizmodo.com/5830006/the-batman-equation-is-a-horrible-fraud), un matematico statunitense mi ha suggerito di risolvere il problema visualizzando anche le radici complesse. Questa soluzione però dipende dal tipo di ambiente grafico che si utilizza e da come interpreta graficamente le coordinate complesse.

Cosa ne pensi?

J. Matthew Register ha detto...

Hey there,

I don't speak much Italian, but I think I see the problem. Disabled is correct in that the zero product property holds true. If ab=0, then a=0 or b=0. This works even if you aren't dealing with functions. And you can also graph things that aren't functions: for instance things of the form x^2+y^2=1 has a circle graph that isn't a function. Trust me, I know a little something about this equation... considering I wrote it.
J. Matthew Register

LidiMatematici ha detto...

Buongiorno Michele,
il lettore ha ragione, in questo caso si tratta non di grafico di funzione, ma di grafico del luogo geometrico dei punti che soddisfano una equazione.
Se nessuna soluzione rende indeterminato uno degli altri componenti del prodotto, allora l'unione dei grafici è effettivamente il grafico totale.
Carlo Consoli / LidiMatematici

GDP ha detto...

L'unione di tutte le funzioni mi porta ad un dominio totale uguale all'insieme vuoto, dato dall'intersezioni di tutti i singoli pezzi. Ecco perchè graficando non appare un bel niente!

Alberto ha detto...

Salve a tutti,

non sono un esperto di analisi matematica, anche se comunque studio ingegneria e ne ho dovuta macinare un po'. Credo onestamente che Michele abbia ragione, e che la spiegazione più semplice di tutti sia quella di GDP. Se abbiamo una funzione del tipo sqrt(x - 2) = 0 il dominio è x>2, se abbiamo sqrt(-x - 2) il dominio è x<-2 e se moltiplichiamo la prima per la seconda otteniamo sqrt(x + 2)*sqrt(x - 2) = 0, di dominio ovviamente nullo. Quindi nessun calcolatore riuscirebbe a graficare in un colpo solo quella equazione.

@ J. Matthew Register

I'd really like to know which environment did you use to plot your equation and what code did you insert, I don't really think its possible to obtain that graph

Dario ha detto...

Hi everybody. Nice article. I agree with the author: I suppose he is plotting the zeros locus of a complex function whose domain is of course the whole (x,y) plane. Some regions of the domain of certain terms shall generate an imaginary function; but when multiplied by another term, its zeros will set to zero also the imaginary points:
i*0=0
right?

FoOl ha detto...

Se noi prendiamo l'equazione x=0 questa ci fornisce la retta coincidente con l'asse y. Se prendiamo al contrario y=0 ci fornisce la rette coincidente all'asse x. Se ora prendo l'equazione x*y=0 ovviamente non mi fornisce i due assi... Quindi non basta moltiplicare due equazioni e porle uguali a zero...

disabled ha detto...

Scusa ma in base a cosa dici che è ovviamente impossibile siano i due assi? È proprio quello che succede! Ed è piuttosto semplice vederlo: i punti di coordinate (x,y) tali che xy=0 sono proprio, per la legge di annullamento del prodotto, quelli per cui o x=0 o y=0, quindi esattamente i due assi.

Anonimo ha detto...

Disabled is right, it's a matter of the computer programme that cannot handle complex functions, Ryan North's equation has no errors. If one assumes in fact to have a function f:R x R -> C the condition f=0 means 'both' Re(f)=0 and Im(f)=0, and so if f is a product you have that the graph is the union of the zero's (as there are no problem of 'real' domains). As Dario said 0*c = 0 \forall c \in C.

Cheers,
Andrea