≡ Menu

…con esattamente 100 parole

La fotografia è per me un linguaggio dell’anima, un modo per catturare non solo ciò che vedo, ma anche ciò che sento e immagino. Non cerco la perfezione tecnica, ma l’emozione genuina di un momento irripetibile e la spontaneità delle persone. Ogni scatto è un frammento di vita, un ricordo prezioso che porto con me e condivido con gli altri. Attraverso l’obiettivo, esprimo i miei sentimenti più profondi, le mie idee, i miei sogni. La fotografia è un ponte tra il mio mondo interiore e quello esterno, un mezzo per comunicare senza parole, per toccare il cuore di chi guarda.

{ 0 comments }


Il mondo della visualizzazione scientifica offre numerosi strumenti per comprendere meglio fenomeni matematici complessi. Uno degli esempi più affascinanti di questa intersezione tra matematica e grafica è la creazione di tracciati parametrici attraverso l’uso di curve polari. Il codice che presentiamo qui è un ottimo esempio di come visualizzare in modo dinamico equazioni trigonometriche complesse, in particolare le spirali sinnusoidali. Esso combina calcoli matematici, tecniche di programmazione avanzata e grafica per fornire una rappresentazione visiva del comportamento delle funzioni coseno parametrizzate. Ma andiamo con ordine, esplorando l’idea alla base, l’utilità didattica e l’implementazione di questo codice.

L’idea di fondo di questo codice è piuttosto semplice, ma estremamente potente: si vuole rappresentare una funzione trigonometricamente parametrizzata nella forma ( \(r = \sin\left(\frac{n}{m} \theta\right)\) ), dove ( n ) e ( m ) sono parametri interi che definiscono rispettivamente il numeratore e il denominatore del rapporto tra la frequenza angolare e l’angolo polare (\( \theta \) ). Questi parametri determinano la complessità delle spirali tracciate e il numero di rotazioni complete all’interno di ciascun grafico. Per ciascuna combinazione di ( n ) e ( m ), il grafico polare genera un’orbita trigonometricamente regolare che si evolve seguendo il parametro ( \(\theta\) ) da ( 0 ) a ( \(2\pi \times k\) ), con ( k ) definito come ( \(k = (m + 1) \cdot \text{gcd}(m+1, n+1)\) ), dove ( \(\text{gcd}\) ) è il massimo comune divisore. Questa funzione guida il tracciato di ciascun grafico nel sistema polare, creando un pattern di curve regolari ma variamente intricate, dipendenti dai valori di ( n ) e ( m ).

k = (m + 1) * math.gcd(m + 1, n + 1)  # Numero di giri proporzionale al gcd tra m e n
theta = np.linspace(0., 2 * np.pi * k, n_points)  # Valori angolari theta distribuiti su k cicli
r = np.sin((n + 1) / (m + 1) * theta)  # Funzione cosinusoidale parametrizzata

Da un punto di vista didattico, questo codice è un eccellente strumento per esplorare diversi concetti di matematica avanzata. La visualizzazione grafica delle funzioni cosinusoidali consente di comprendere meglio il comportamento delle equazioni trigonometriche, in particolare il modo in cui la variazione dei parametri ( n ) e ( m ) influenza il grafico polare. In ambito educativo, questo tipo di visualizzazione è utilissimo per spiegare concetti come la periodicità, le armoniche e le orbite chiuse in geometria polare. Studenti di matematica e fisica possono utilizzare questi strumenti per capire come le funzioni trigonometriche si comportano sotto diverse parametrizzazioni, e possono sperimentare in tempo reale come la scelta di determinati parametri modifichi i tracciati grafici.

axs[n, m].plot(theta, r, color="#383b3e", linewidth=0.5)  # Tracciato della curva su un piano polare
axs[n, m].set_rlim([-1.1, 1.1])  # Imposta i limiti di raggio per uniformità visiva

L’implementazione del codice è interamente realizzata in Python, sfruttando le librerie numpy e matplotlib, due strumenti fondamentali per la comunità scientifica. Numpy fornisce un’efficiente manipolazione degli array numerici e consente di generare i valori di ( \theta ) in modo semplice e scalabile. La libreria matplotlib, invece, permette la creazione di grafici sofisticati in modo rapido e versatile, grazie alla sua capacità di gestire grafici polari e personalizzare ogni aspetto della visualizzazione. Il cuore del codice risiede nel ciclo che attraversa ciascuna combinazione di ( n ) e ( m ), generando una curva polare per ogni subplot della griglia. Ogni curva è definita da una particolare funzione coseno che dipende dal rapporto tra ( n ) e ( m ), il che introduce una varietà di forme grafiche eleganti che si arricchiscono man mano che si esplorano valori più alti di ( n ) e ( m ).

N = 20  # Numero di righe
M = 20  # Numero di colonne
fig, axs = plt.subplots(N, M, figsize=(10, 10), subplot_kw={'projection': 'polar'})  # Griglia di grafici polari

Oltre alla bellezza visiva e all’utilità didattica, il codice mostra anche l’importanza dell’ottimizzazione nella programmazione scientifica. Invece di calcolare manualmente ciascun valore di ( r ) e ( \theta ) per ogni grafico, il codice utilizza la funzione gcd per garantire che il numero di giri completi della spirale sia proporzionato, evitando calcoli ridondanti e massimizzando l’efficienza computazionale. Inoltre, la personalizzazione dei plot in termini di colori, linee e layout grafico, oltre all’eliminazione dei tick sui bordi degli assi, rende i risultati finali più chiari e facilmente interpretabili.

axs[n, m].tick_params(bottom=False, top=False, left=False, right=False, labelbottom=False, labeltop=False, labelleft=False, labelright=False)  # Rimozione dei tick per semplificare la visualizzazione
axs[n, m].set_facecolor("#f4f0e8")  # Colore di sfondo dei grafici

In questo modo, non solo il codice risulta un potente strumento didattico, ma permette anche di visualizzare in maniera esteticamente affascinante il comportamento di funzioni trigonometriche complesse.

{ 0 comments }

Calcolo di π con la Formula di Chudnovsky

Screenshot 2024-02-03 alle 20.06.59.png

L’algoritmo basato sulla formula di Chudnovsky rappresenta un metodo efficace e preciso per il calcolo delle cifre di π. Grazie alla sua rapida convergenza, la formula è ampiamente utilizzata per ottenere livelli elevati di precisione nel calcolo di π.

Strategia dell’Algoritmo

La formula di Chudnovsky si esprime come segue:

1π=12k=0(1)k(6k)!(545140134k+13591409)(3k)!(k!)36403203k+3/2

Ogni termine della serie contribuisce significativamente alla precisione del valore di π, con circa 14 cifre esatte per termine.

Caratteristiche Chiave

  • Precisione Arbitraria: Utilizzo del tipo Decimal per calcoli ad alta precisione.
  • Calcolo Iterativo: Iterazione attraverso i termini della serie per la somma.
  • Ottimizzazione: Gestione efficiente dei calcoli di fattoriali e potenze.
  • Stima dei Termini: Determinazione del numero di termini necessari basata sulla precisione desiderata.

Implementazione

L’approccio alla formula di Chudnovsky prevede il calcolo sequenziale di ogni termine, con un’attenzione particolare alla gestione della precisione attraverso il tipo Decimal di Python. Ciò assicura che il calcolo mantenga l’accuratezza richiesta anche a livelli elevati di cifre decimali.

Uso in Python

Ecco un esempio di implementazione in Python:

from math import factorial 
from decimal import Decimal, getcontext

# Funzione per calcolare pi utilizzando la formula di Chudnovsky
def calc_pi(terms, digits):
    extra_prec = 5
    getcontext().prec = digits + extra_prec
    result = Decimal(0)
    for q in range(terms):
        n = (-1)**q*factorial(6*q)*(545140134*q+13591409)
        dev = factorial(3*q)*factorial(q)**3*640320**(3*q)
        result += Decimal(n)/Decimal(dev)
    result *= Decimal(12)/Decimal(640320**Decimal(1.5))
    pi = Decimal(1/result)
    getcontext().prec -= extra_prec
    return pi

# Esempio di utilizzo
digits = 100  # Numero di cifre decimali desiderate di pi
terms = int(digits/13) + 1
pi = calc_pi(terms, digits)
print(pi)

Questo codice calcola π con un livello di precisione specificato, dimostrando l’efficacia dell’algoritmo di Chudnovsky nella pratica computazionale.

{ 0 comments }

[…]

Larry Fink, an iconic figure in American photography, has passed away, leaving behind a profound legacy. His career was a testament to a unique style—a veritable walking studio—with a camera in one hand and a flash in the other, he traversed the vast social landscapes of America, capturing the essence of both its opulence and austerity. Fink was a pioneer, unflinchingly bringing to light the contrasts of American life through his lens, and his absence leaves a void in the fabric of photographic artistry.

{ 0 comments }

Il Problema 10 del Project Euler…

Il Problema 10 del Project Euler, che richiede di calcolare la somma di tutti i numeri primi inferiori a due milioni, offre una finestra affascinante nel mondo della matematica e dell’informatica. I numeri primi, da sempre al centro della teoria dei numeri, trovano applicazioni in diversi campi, dalla crittografia all’analisi numerica. Il problema, apparentemente semplice, cela sfide computazionali non trascurabili, soprattutto considerando la grandezza del numero limite, due milioni. Qui di seguito un codice in Python che prova a risolvere il problema:

# Il codice che segue risolve il problema 10 del Project Euler:
# https://projecteuler.net/problem=10

# La somma dei primi 10 numeri primi è 2 + 3 + 5 + 7 = 17.
# Trova la somma di tutti i numeri primi minori di due milioni.


def is_prime(n):
# Funzione che restituisce True se il numero n è primo, False altrimenti
# (utilizza il teorema di Fermat)

    if n <= 1:
        return False
    for i in range(2, int(n**0.5) + 1):
        if n % i == 0:
            return False
    return True

def sum_of_primes_below(n):
# Funzione che restituisce la somma di tutti i numeri primi minori di n
    primes_sum = 0
    for i in range(2, n):
        if is_prime(i):
            primes_sum += i
    return primes_sum

result = sum_of_primes_below(2000000)
print(result)

Il codice Python proposto per affrontare questa sfida si compone di due funzioni principali: is_prime(n) per determinare se un numero è primo, e sum_of_primes_below(n) per calcolare la somma di tutti i primi inferiori a un dato numero n. La funzione is_prime(n) utilizza un approccio basato sul teorema di Fermat, che prevede di testare i divisori di un numero da 2 fino alla sua radice quadrata. Questo metodo è efficace e corretto, ma quando si tratta di numeri molto grandi, come nel nostro caso, la sua efficienza diventa un fattore critico. Ogni numero viene testato individualmente per la primalità, un processo che diventa progressivamente più lento man mano che n cresce.

L’approccio di sum_of_primes_below(n) segue una logica diretta: iterare su tutti i numeri da 2 fino a n-1, sommando quelli che risultano primi. Anche qui, la semplicità del metodo porta con sé questioni di efficienza, specialmente data la grandezza del numero limite.

In un’ottica di ottimizzazione, sarebbe consigliabile esplorare algoritmi più efficienti come il crivello di Eratostene o il crivello di Atkin, noti per la loro capacità di ridurre drasticamente il numero di operazioni necessarie identificando e scartando i multipli di numeri già riconosciuti come non primi. Questi metodi non solo accelerano il processo di identificazione dei numeri primi ma sono anche più scalabili quando si lavora con intervalli numerici estesi.

Il problema, dunque, sebbene intrinsecamente matematico, ha profonde implicazioni in ambito informatico, specialmente nell’ottimizzazione algoritmica. La ricerca della soluzione non solo offre una dimostrazione dell’applicazione pratica dei numeri primi ma sottolinea anche l’importanza di considerare l’efficienza computazionale, soprattutto quando si affrontano problemi su larga scala. Questa sfida rappresenta un esempio eccellente di come problemi teorici possano essere trasformati in applicazioni pratiche, fornendo opportunità per l’esplorazione e l’innovazione nel campo dell’ingegneria e dell’informatica.

{ 0 comments }

The Golden Ratio…

cb3de673bd2b298b7c9aa6d9ff4d37f4_original.jpg
L’antica saggezza di Socrate ci invita a riflettere sull’immensità della nostra ignoranza rispetto ai misteri della vita, dell’anima e delle leggi che regolano l’universo. Tra questi misteri si colloca il numero Φ, noto come rapporto aureo, un numero irrazionale che appare con insistenza nelle proporzioni della natura e nelle opere d’arte e che, per secoli, ha affascinato matematici, artisti e filosofi.

Il rapporto aureo si definisce come quel particolare valore che emerge quando due grandezze, a e b, si trovano in una proporzione tale per cui il rapporto tra la somma delle due grandezze (a+b) e la più grande (a) è lo stesso che intercorre tra la più grande (a) e la più piccola (b). In termini matematici, ciò si esprime con la relazione:

a+ba=ab=Φ

Questa equazione può essere trasformata in una relazione più familiare, quella di una equazione quadratica. Riscrivendo il primo membro come 1+ba e sostituendo ba con 1/Φ, otteniamo:

1+1Φ=Φ

Moltiplicando entrambi i membri per Φ, giungiamo a:

Φ+1=Φ2

Da cui, riarrangiando i termini, otteniamo l’equazione quadratica:

Φ2Φ1=0

Questa può essere risolta tramite la formula risolutiva delle equazioni quadratiche, producendo due soluzioni. La soluzione positiva, che è quella di nostro interesse, è data da (1+5)/2 e rappresenta il valore numerico del rapporto aureo.

Parallelamente al concetto di rapporto aureo si sviluppa la sequenza di Fibonacci, una successione in cui ogni numero è la somma dei due precedenti, iniziando da 0 e 1. Questa sequenza, nonostante la sua semplicità, si avvicina progressivamente al rapporto aureo man mano che si procede, offrendo una dimostrazione numerica della presenza di questo rapporto nella natura.

Per apprezzare concretamente questa convergenza, possiamo ricorrere a un codice Python che genera la sequenza di Fibonacci e calcola il rapporto tra numeri consecutivi. Con l’aumentare dei termini, il rapporto si stabilizza intorno a Φ, mostrando la stretta connessione tra il mondo naturale e i numeri.

def fibonacci(n):
    fib_sequence = [0, 1]
    for i in range(2, n):
        next_number = fib_sequence[-1] + fib_sequence[-2]
        fib_sequence.append(next_number)
    return fib_sequence

def golden_ratio(fib_sequence):
    return [fib_sequence[i] / fib_sequence[i-1] for i in range(2, len(fib_sequence))]

n = 10
fib_seq = fibonacci(n)
ratios = golden_ratio(fib_seq)
for ratio in ratios:
    print(f"{ratio:.6f}")

La rivelazione che il rapporto aureo si manifesta tanto nell’architettura del nostro DNA quanto nelle proporzioni del corpo umano o nella disposizione dei rami di un albero, conferma l’ipotesi che esistano delle regole estetiche universali. La matematica, attraverso il rapporto aureo e la sequenza di Fibonacci, si fa chiave di lettura per interpretare il linguaggio nascosto della natura e per inseguire quel senso di bellezza e armonia che, da sempre, l’uomo cerca di decifrare.

{ 0 comments }

Il cinema di Ivano De Matteo, come un fiume in piena, travolge senza pietà, scavalcando gli argini del consueto. Nella sua ultima opera, ‘Mia’, si naviga attraverso le acque torbide di un amore tossico, un viaggio che s’intreccia con la storia di un padre, Sergio, infermiere del 118, che si ritrova a fronteggiare la tempesta emotiva della figlia adolescente. Mia, il cuore della narrazione, vive un primo amore ossessivo e violento, un amore che si trasforma in una gabbia, togliendole la libertà e la serenità.

Sergio, interpretato con maestria da Edoardo Leo, cammina su un filo sottile tra l’amore incondizionato per sua figlia e la disperazione di un padre che vede il proprio mondo sbriciolarsi. La sua è una lotta contro un nemico invisibile, contro la violenza che si insinua silenziosamente nelle vite quotidiane, contro il dolore che si fa spazio tra le mura di casa.

Greta Gasbarri, nei panni di Mia, incarna la fragilità e la forza di una ragazza contemporanea, mentre Riccardo Mandolini, nel ruolo del ragazzo violento, diventa il volto dell’oppressione e del male che può nascondersi dietro un’apparente normalità. Milena Mancini, nei panni della madre, è la figura resiliente, colui che tenta di mantenere la famiglia unita nonostante la tempesta.

De Matteo, con la sua regia, ci porta in un viaggio senza ritorno nella psiche umana, esplorando il rapporto complesso tra padre e figlia e il tema universale della genitorialità di fronte al dolore e alla sofferenza dei figli. Il film procede in un crescendo di tensione, svelando strato dopo strato le dinamiche familiari e personali, fino a un finale che esplode in una rabbia inaspettata, spostando il focus dalla storia familiare a questioni più ampie di giustizia e vendetta.

‘Mia’ non è solo un film, è un pugno allo stomaco, un grido che risuona lungo le strade della vita quotidiana. È una storia di amore e dolore, di violenza e redenzione, una narrazione che, pur nelle sue scelte narrative a tratti discutibili, riesce a rimanere impressa nella mente dello spettatore, costringendolo a riflettere su temi profondamente radicati nella nostra società.

De Matteo, ancora una volta, dimostra la sua abilità nel raccontare storie che sono finestre aperte sul mondo, sulle sue contraddizioni e sulla sua brutale realtà. ‘Mia’ è un film da non perdere, un’opera che ci costringe a confrontarci con la nostra umanità e con le sue molteplici sfaccettature.

{ 0 comments }

Calcolatrice Interattiva…


1. Introduzione

L’applicazione Calcolatrice Interattiva è un tool basato su Python che permette all’utente di eseguire calcoli matematici sia in modo interattivo che tramite l’input da linea di comando. Utilizza la libreria SymPy per gestire le operazioni matematiche.

calc.mp4

2. Requisiti

  • Python 3.x
  • Libreria SymPy

3. Installazione

Per installare la libreria SymPy, esegui il seguente comando:

pip install sympy

4. Utilizzo

4.1 Modalità da linea di comando

Per eseguire un calcolo dalla linea di comando, utilizzare l’opzione -e o --expression seguita dall’espressione da valutare:

python calcolatrice.py -e "espressione"

4.2 Modalità interattiva

Per avviare la modalità interattiva, basta eseguire lo script senza argomenti:

python calcolatrice.py

Nella modalità interattiva, inserire le espressioni al prompt >. Digitare exit per uscire.

5. Funzionalità

5.1 Funzioni Matematiche Supportate

  • Radice quadrata: sqrt
  • Logaritmo: log
  • Logaritmo naturale: ln
  • Funzioni trigonometriche: sin, cos, tan, asin, acos, atan
  • Fattoriale: fact

5.2 Variabili

È possibile assegnare valori alle variabili usando l’operatore =. Una volta assegnato un valore, la variabile può essere utilizzata in espressioni successive.

5.3 Risultato Precedente

Il risultato dell’ultimo calcolo può essere richiamato utilizzando un punto (.) nelle espressioni successive.

6. Gestione degli Errori

Gli errori durante il calcolo delle espressioni vengono catturati e visualizzati all’utente.

7. Struttura del Codice

  • main(): punto di ingresso dell’applicazione.
  • interactive_mode(variables): gestisce la modalità interattiva.
  • print_complex(result): stampa il risultato.
  • replace_dot_with_last_result(expression, last_result): sostituisce il punto con l’ultimo risultato.
  • evaluate_expression(expression, last_result, variables): valuta le espressioni matematiche.

Il codice completo può essere scaricato qui .

{ 0 comments }