Radici di espressioni e interattività

sl104

Continuo (in qualche misura) con quanto detto qui, integro, rispondo a osservazioni, varie e tutte sensate.

Per prima cosa si è visto che il calcolo simbolico non è (nel nostro caso) necessario (o quasi mai). E, ma lo sapevamo già, Maxima anche; anche se a me piace e continuerò a parlarne 🧐

In questi giorni Redmonk ha pubblicato la lista aggiornata dei linguaggi più usati. Cose interessanti, non nuove ma una sbirciatina è d’obbligo.

Sì, JavaScript (con altri, Java, C++) è in testa 🤩 Principalmente, credo, per il Web, dentro le pagine HTML, ma si può –e viene– usato anche fuori, vedi Node.

Io sono tifoso di Python, anche per via di NumPy, SciPy, Matplotlib &co. In alternativa c’è Octave (la versione FOSS di MATLAB). Ci sarebbe anche Julia ma è ancora poco usato, troppo nuovo e con modalità diverse da quella corrente (l’opposto di Node); per adesso vale quanto detto per Maxima, ma forse in futuro…

Per elaborazioni semplici e da aggiustare spesso sono da escludere i linguaggi compilati, C++, Java e altri ancora (Rust).

Sì, resta JavaScript, Node in questo caso, alternativo a Python. Per chi lo usa abitualmente va bene, per me dovrei impratichirmi con i nomi delle funzioni e dove trovarle nella galassia di packages (sbaglio o è labirintica?). Ma funziona, è OK anche Node.

Riporto due casi dal post citato, usando Python:

$ python3 -q
>>> expr = "(a + b)**2 - b**2 + a*b - c"
>>> a = 1; b = 2; c = 3
>>> eval(expr)
4
>>> from sympy import real_roots, Symbol, real_roots
>>> x = Symbol('x')
>>> expr = 8*x**3 + 4*x**2 + 2*x - 258
>>> real_roots(expr)
[3]
>>> len(real_roots(expr))
1
>>> real_roots(expr)[0]
3

In tanti ci dicono di usare eval() solo quando necessario per tanti motivi, p.es. è pesante per la macchina, ma nel nostro caso è quel che serve, evita di dover costruire una funzione ad hoc o usare lambda.

Naturalmente lo stesso vale per Node:

$ node
> expr = "(a + b)**2 - b**2 + a*b - c"
'(a + b)**2 - b**2 + a*b - c'
> a = 1; b = 2; c = 3
3
> eval(expr)
4

Per le radici delle equazioni occorre installare qualche package, ce ne sono diversi, a una rapida googlata ho trovato nerdamer, Algebrite, algebra.js, math.js, Zolmeister, … Da valutare e scegliere. Da vedere con npm search.

Gli esempi (Python e Node) visualizzano versioni elementari di REPL (read-eval-print-loop) cioè l’uso interattivo di linguaggi di programmazione. Ai vecchi come me viene da dire “ah, come il BASIC!“; altri (sì, anche me) invece direbbero “ah, il LISP!“. Per calcoli al volo è l’ideale. Quelle visualizzate sono le REPL minime, ne esistono di molto più evolute e potenti, p.es. l’ambiente di Octave. Secondo me REPL è la via.

Posta un commento o usa questo indirizzo per il trackback.

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google photo

Stai commentando usando il tuo account Google. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d blogger hanno fatto clic su Mi Piace per questo: