Cosa fa
MATH risolve problemi del tipo «trova le pressioni, le portate e le temperature per cui tutti i bilanci dell'impianto sono soddisfatti». Si usa in tre modi, dal più semplice al più completo:
Calcolatrice di equazioni
Scrivi sistemi di equazioni, integrali definiti o equazioni differenziali con condizioni iniziali. Scegli il tempo finale nel testo e ottieni lo stato calcolato, con grafici (anche nel tempo e nel piano delle fasi). Un menu di esempi, una guida e un assistente che scrive programmi, spiega gli errori e cerca tutte le soluzioni.
Componenti e processi
Definisci un componente (terminali, variabili, equazioni, tabelle), lo disponi su un foglio, lo colleghi ad altri con linee, premi Risolvi.
Libreria di tabelle
Curve y(x) e matrici y(p, x) (proprietà dei fluidi, curve di macchine) usate nelle equazioni come funzioni qualsiasi.
Un esempio
Uno scambiatore in controcorrente: bilanci di massa e di energia, cp letto da una tabella in funzione della temperatura, UA letto da una matrice in funzione delle due portate, ΔT medio logaritmico. Il componente è questo (estratto):
# bilanci di energia (kW)
Q = hin.m * cph * (hin.T - hout.T)
Q = cout.m * cpc * (cout.T - cin.T)
# UA dalla matrice ua(portata fredda, portata calda)
dT1 = hin.T - cout.T
dT2 = hout.T - cin.T
Q = ua(cin.m, hin.m) * (dT1 - dT2) / log(dT1 / dT2)
Non c'è nulla di «incorporato» nello scambiatore: è un testo che puoi leggere, cambiare e ricalcolare. Lo stesso vale per una rete gas, in cui ogni tratto di tubazione è una equazione di perdita di carico e ogni nodo un bilancio di portate.
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.
Prova nella calcolatrice
Accedi o avvia la demo e apri la calcolatrice: il menu Esempi… carica modelli completi con descrizione e risultato atteso (razzo verticale, integrale gaussiano, equazioni con più soluzioni, predatore-preda, perdite in un tubo, pendolo, serbatoio, pompa con curva da tabella, circuito RC). Oppure incolla un esempio alla volta nel campo dell’equazione; la guida spiega la sintassi, con esempi che si caricano con un clic.
Un integrale definito
L’integrale di x da 0 a 20:
I = integral(x, x, 0, 20)
Risultato: I = 200. Gli argomenti sono funzione, variabile, estremo iniziale ed estremo finale.
Una derivata, un valore iniziale
Risolvi dy/dt = -y con y(0)=1 fino a t=20:
<iniz>
y = 1
campo_finale = 20
</iniz>
y' = -y
y' (o der(y)) indica la derivata rispetto al tempo. Ottieni un’approssimazione di y(20)=exp(-20); per il secondo ordine servono due stati.
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.
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.Come si accede alla demo
La demo è una copia temporanea e privata del programma con alcuni esempi già caricati. Nessuna registrazione, nessuna password.
- Vai alla pagina di accesso e premi Prova la demo.
- Si apre la tua copia, sulla calcolatrice: scrivi un'equazione, oppure scegli un esempio dal menu Esempi…. In alto a destra un contatore mostra il tempo residuo (
DEMO · hh:mm:ss) e il «?» apre la guida. Il pulsante Assistente scrive programmi, spiega gli errori e cerca tutte le soluzioni (nella demo ha pochi messaggi al giorno). - Per l'impianto vai a Processo con il link in alto, apri
scambiatoreorete_gas_A_base, premi ▶ Risolvi, cambia un dato e risolvi ancora. - Prima della scadenza, ↓ Esporta JSON se vuoi tenere il lavoro.
Quello che crei è visibile solo a te e viene cancellato alla scadenza (2 ore). Un'altra persona che avvia la demo non vede nulla del tuo lavoro.
Cosa si può fare e cosa no
Per sapere quanto fidarti dei numeri, la pagina Verifica dei risultati mostra i casi noti su cui il motore è confrontato e li ricalcola nel tuo browser.
| Si può | Non si può |
|---|---|
| Risolvere sistemi di equazioni non lineari, anche con tabelle e funzioni non derivabili in forma chiusa | Garantire convergenza per ogni sistema e ogni punto iniziale |
Calcolare integrali definiti con integral(f, x, a, b) | Ottenere primitive simboliche o integrare su estremi infiniti e singolarità |
Integrare equazioni differenziali ordinarie esplicite nella calcolatrice, scegliendo campo_finale | Calcolare derivate simboliche, risolvere PDE o sistemi differenziali-algebrici generali; il metodo non è adatto a problemi rigidi |
| Scrivere componenti propri con equazioni, variabili e tabelle | Usare un catalogo di componenti e proprietà già pronto: i modelli fisici li scrivi tu |
| Collegare più componenti con linee e risolvere l'impianto intero | Convertire le unità di misura: sono etichette (con avviso sui collegamenti incoerenti), i numeri sono usati come scritti |
| Usare tabelle di curve e matrici come funzioni nelle equazioni | Imporre vincoli di disuguaglianza o ottimizzare: si risolvono uguaglianze (min/max orientano solo la ricerca) |
| Cercare più soluzioni provando molte stime iniziali (con l'assistente) e vedere le variabili nel tempo con un grafico | Avere la certezza di aver trovato tutte le soluzioni: l'elenco dipende dalle stime provate |
| Ricalcolare variando dati, anche per analisi di sensibilità | Garantire di trovare tutte le soluzioni, né la corrispondenza fisica del modello: la verifica del modello è tua |
| Esportare e reimportare i processi in JSON; usare il motore da agenti via MCP | Scrivere i decimali con la virgola nelle equazioni (1.5, non 1,5) |
Nella demo, in più
| Non disponibile | Perché |
|---|---|
| Chat dell'editor di processo | Usa un servizio a pagamento: riservata agli utenti registrati (l'assistente della calcolatrice c'è, con pochi messaggi) |
| Estrazione di tabelle da foto, PDF o testo | Idem |
| Conservazione dei dati oltre 2 ore | La copia è effimera: si cancella alla scadenza |
| Limite della demo | Valore |
|---|---|
| Durata | 2 ore |
| Calcoli | 20 al minuto, 2 in contemporanea |
| Componenti, processi, tabelle salvati | 15, 8, 15 |
| Istanze e linee per processo | 40 e 80 |
| Dimensione di un salvataggio | 100 KB |
| Avvii dallo stesso indirizzo | 5 all'ora |
| Messaggi all'assistente della calcolatrice | 5 per demo (e un tetto giornaliero per indirizzo e complessivo) |
Con un account (su invito) i limiti sono molto più ampi e i dati sono permanenti.