Come funziona
Dettagli tecnici per chi vuole sapere come è fatto MATH e come arriva ai numeri. Per provarlo basta la demo.
Come è strutturato
Un solo motore, due posti dove gira
Il motore (CMat, C++) è compilato due volte dallo stesso sorgente: in WebAssembly, per calcolare nel browser, e come modulo Python nel backend. Le due versioni condividono sintassi e algoritmi numerici.
Un processo per calcolo
Il motore tiene stato globale (tabella delle variabili, generatore casuale): due calcoli nello stesso processo si sovrascriverebbero. Per questo il backend prepara un gruppo di processi, ognuno con la propria copia del motore. Si ottiene parallelismo reale, un timeout affidabile (un calcolo che non termina viene ucciso e il suo processo ricreato, senza toccare gli altri) e contropressione: oltre la capacità la risposta è «riprova tra N secondi», non una coda infinita.
Dati e accessi
Componenti, processi e tabelle sono salvati per tenant (organizzazione): ogni richiesta è filtrata dal tenant della sessione, mai da un valore inviato dal client. Accesso con email e password, registrazione su invito; sessione in cookie HttpOnly. Chat, assistente e calcoli hanno quote giornaliere o al minuto per tenant.
L'assistente della calcolatrice
Una chat che sa la sintassi del motore e lo usa come strumento: ogni numero che riporta viene dal motore, mai dal modello. Scrive un programma da una descrizione, spiega l'errore di un programma e cerca tutte le soluzioni di un sistema provando molte stime iniziali, dicendo da quali stime si arriva a ciascuna. Non scrive mai nel campo da sola: propone un programma già eseguito con successo e scegli tu se caricarlo o eseguirlo. Non garantisce di aver trovato tutte le soluzioni e può sbagliare nel modello fisico del tuo problema. Usa un servizio di intelligenza artificiale (IONOS): domande, programma nel campo e ultimo risultato gli vengono inviati, quindi non inserire dati personali o riservati (privacy). Ha un limite di messaggi al giorno, più basso nella demo.
Per agenti e script
Gli stessi calcoli sono esposti come strumenti MCP (risolvi_equazioni, risolvi_differenziali, risolvi_progetto, grafico) per assistenti AI e automazioni; l'accesso richiede un token riservato.
Gli algoritmi
Per i sistemi algebrici e i progetti di impianto, il motore cerca una soluzione con questi passaggi. Integrali ed equazioni differenziali usano i metodi numerici descritti a seguire.
1. Analisi della struttura
Le equazioni del progetto (quelle di tutti i componenti, più le variabili delle linee) vengono unite in un unico sistema F(x) = 0 con tante equazioni quante incognite; se il numero non torna il calcolo si ferma con un messaggio. Il motore scopre quali incognite compaiono in quali equazioni perturbando le variabili a caso e osservando quali equazioni cambiano valore. Non legge il testo delle equazioni: funziona anche con funzioni, tabelle e condizioni logiche.
2. Riduzione
Un'incognita che compare in una sola equazione si può calcolare dopo, con una radice monodimensionale; equazione e incognita escono dal sistema grande. Si ripete finché ne escono. Poi le equazioni vengono riordinate in base alla struttura di dipendenza. Il sistema rimasto è più piccolo e meglio condizionato; le variabili escluse vengono risolte alla fine, una per una.
3. Newton con ricerca lineare
Il sistema ridotto è risolto con il metodo di Newton con backtracking (ricerca lineare di tipo Armijo): a ogni iterazione si calcola il Jacobiano, si risolve J·p = −F e si accorcia il passo finché il residuo ½|F|² diminuisce in modo accettabile. Il passo massimo è limitato per non uscire di colpo dal dominio.
- Jacobiano: differenze finite in avanti, passo relativo (≈ 1,5·10⁻⁸ × max(|x|, 1)); se il passo in avanti esce dal dominio della funzione si prova all'indietro.
- Sistema lineare: eliminazione di Gauss con pivot parziale.
- Jacobiano singolare: passo di Levenberg–Marquardt, cioè (JᵀJ + λI)p = −JᵀF, che tende ai minimi quadrati; se anche questo fallisce, discesa del gradiente.
- Convergenza: ogni residuo in valore assoluto sotto la tolleranza (nei progetti 10⁻¹⁰ per impostazione predefinita, regolabile).
4. Riavvii
Newton è locale: da un punto di partenza sbagliato può fermarsi in un minimo del residuo che non è una soluzione. Se per tre iterazioni consecutive il residuo non scende in modo significativo, il motore riparte da nuovi valori casuali nell'intervallo min–max delle variabili. Le iterazioni totali hanno un tetto assoluto (200) e ogni calcolo ha un timeout.
5. Tabelle
Le curve usano l'interpolazione lineare con estrapolazione lineare agli estremi. Le matrici y(p, x) interpolano prima in x su ciascuna curva, poi in p tra le due curve adiacenti. L'argomento può essere un'incognita: la tabella entra nel Jacobiano come ogni altra funzione.
Integrali definiti
integral usa trapezi raffinati ed estrapolazione di Simpson, con stima dell’errore e limiti sul numero di valutazioni. Richiede estremi finiti e funzioni regolari; picchi stretti, discontinuità e oscillazioni possono compromettere l’accuratezza.
Equazioni differenziali
Il metodo Dormand–Prince 5(4) adatta il passo in base alla stima dell’errore locale. Integra sistemi ordinari espliciti non rigidi, a partire dalle condizioni iniziali; un’equazione di secondo ordine si scrive con due stati. Si possono aggiungere equazioni algebriche dipendenti dagli stati, purché le loro incognite non compaiano nelle derivate.
min–max sono i comandi con cui si orienta la ricerca (min/max non sono vincoli sulla soluzione). Il Jacobiano è per differenze finite: funzioni molto «a gradino» o non derivabili vicino alla soluzione rallentano o impediscono la convergenza. La non convergenza non prova che la soluzione non esista.Note sulla calcolatrice
Il tempo finale si imposta nel form: cambia il numero nella riga campo_finale, dentro <iniz>. Deve essere maggiore di zero; se omesso, il calcolo termina a 10. Il risultato riporta l’istante raggiunto e i valori finali.
Quando la formula dipende dal tempo
<iniz>
y = 1
campo_finale = 80
</iniz>
y' = -y*t
Qui la soluzione esatta è y(t)=exp(-t^2/2). A 80 vale exp(-3200), un numero positivo troppo piccolo per la precisione numerica disponibile.
4.47821e-10 (circa 0.000000000448) è un piccolo residuo numerico, non il valore esatto di exp(-3200). La tolleranza assoluta predefinita è 0.000000001 e controlla l’errore locale, senza garantire quello complessivo. I risultati possono usare la notazione scientifica, ammessa anche nel testo delle equazioni (1e-3).Questi calcoli sono numerici: integral restituisce un integrale definito e y' (o der) descrive un’equazione differenziale con condizioni iniziali. La calcolatrice mostra lo stato finale e il pulsante Grafico disegna le variabili nel tempo, ciascuna con la propria scala, o il piano delle fasi; le opzioni di precisione sono disponibili via API/MCP.
Le equazioni non sono Python: esponenti negativi tra parentesi (2^(-1)), operatori logici and or not (anche maiuscoli); numeri anche con esponente (1e-3) e confronti < > <= >= == != che valgono 1 o 0; funzioni sin cos tan asin acos atan atan2 sinh cosh tanh exp sqrt log log10 pow abs. I simboli tipografici incollati (−, ′, ×...) si convertono da soli.