Mathematica: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Recupero di 0 fonte/i e segnalazione di 1 link interrotto/i. #IABot (v1.6.2)
Funzionalità collegamenti suggeriti: 3 collegamenti inseriti.
 
(44 versioni intermedie di 25 utenti non mostrate)
Riga 1:
{{Software
|Nome = Wolfram Mathematica
|Logo =Mathematica Logo.svg
|Screenshot =
|Didascalia =
|Sviluppatore = [[Wolfram Research]]
|UltimaVersione =11.2.0
|DataUltimaVersione =14 settembre 2017
|UltimaVersioneBeta =
|DataUltimaVersioneBeta =
|SistemaOperativo = windows
|SistemaOperativo2 = macosx
|SistemaOperativo3 = linux
|NotaSistemaOperativo = <ref name="system_req">{{Cita web|url=https://www.wolfram.com/mathematica/system-requirements.html|titolo=System Requirements|lingua=en|accesso=8 settembre 2018}}</ref>
|NotaSistemaOperativo2 = <ref name="system_req" />
|NotaSistemaOperativo3 = <ref name="system_req" />
|Genere = cas
|Genere2 = analisi numerica
|Licenza = [[Software proprietario|Proprietaria]]
|Lingua =
|SoftwareLibero = no
| SitoWeb =
|SistemaOperativo4 = Raspberry Pi
<!--|NotaSistemaOperativo2 = [http://www.wolfram.com/products/mathematica/platforms/ (lista)]-->
}}
 
'''Mathematica''' è un ambiente di calcolo simbolico e numerico multipiattaforma, ideato da [[Stephen Wolfram]] e successivamente sviluppato da un team di matematici e programmatori. Mathematica usa un potente [[linguaggio di programmazione]] interpretato, chiamato [[linguaggio Wolfram]].
Wolfram e il suo gruppo iniziarono a lavorare al programma nel 1986 e pubblicarono la prima versione nel 1988. La versione corrente è la 13.3, uscita il 28 giugno 2023. Il sistema Mathematica è disponibile per le piattaforme [[Microsoft Windows|Windows]], [[MacOS]] e [[Linux]]<ref name="system_req" />.
 
== Introduzione ==
Il linguaggio di programmazione di Mathematica - ribattezzato "Wolfram Language" - è basato sulla [[riscrittura|riscrittura di espressioni (''term-rewriting'')]] e supporta svariati paradigmi di programmazione, tra cui la [[programmazione funzionale]], la [[programmazione logica]], la programmazione basata sul riconoscimento di schemi (''pattern-matching'') e sulle regole di sostituzione (''rule-based''), nonché la più tradizionale [[programmazione procedurale]]. L'approccio procedurale è in generale sconsigliato in Mathematica in quanto molto meno efficiente delle alternative funzionali e basate su regole di sostituzione (''rule-based'').
Wolfram e il suo gruppo iniziarono a lavorare al programma nel [[1986]] e rilasciarono la prima versione nel [[1988]]. La versione corrente è la versione 11.2 il 14 settembre 2017. Il sistema Mathematica è disponibile per le piattaforme [[Microsoft Windows|Windows]], [[MacOS]] e [[Linux]].
Mathematica è realizzato principalmente in [[linguaggio C|C]] e [[Linguaggio C#C.2B.2B|C++]], ma gran parte delle numerose librerie fornite con il programma sono scritte nel linguaggio proprietario di Mathematica, che può essere utilizzato per espandere ulteriormente le funzionalità del sistema. Di norma il nuovo codice viene aggiunto sotto forma di pacchetto (''package''), un [[file di testo]] in formato ASCII che contiene codice scritto nel linguaggio proprio di Mathematica. I pacchetti hanno estensione '''.m'''.
 
In Mathematica, il linguaggio di base viene interpretato da un ''[[kernel]]'' che esegue l'elaborazione vera e propria; i risultati vengono quindi comunicati ad una specifica interfaccia tra quelle disponibili. La comunicazione tra il kernel e questi ultimi (o qualsiasi altro [[client]], ad esempio programmi scritti dall'utente) utilizza il protocollo ''MathLink'', spesso attraverso una rete. È possibile che vari processi front-end si connettano allo stesso kernel, e che uno stesso front-end sia connesso a kernel differenti.
Il linguaggio di programmazione di Mathematica - ribattezzato "Wolfram Language" - è basato sulla [[riscrittura|riscrittura di espressioni (''term-rewriting'')]] e supporta svariati paradigmi di programmazione, tra cui la [[programmazione funzionale]], la [[programmazione logica]], la programmazione basata sul riconoscimento di schemi (''pattern-matching'') e sulle regole di sostituzione (''rule-based''), nonché la più tradizionale [[programmazione procedurale]]. L'approccio procedurale è in generale sconsigliato in Mathematica in quanto molto meno efficiente delle alternative funzionali e basate su regole di sostituzione (''rule-based'').
Mathematica è realizzato principalmente in [[linguaggio C|C]] e [[Linguaggio C#C.2B.2B|C++]], ma gran parte delle numerose librerie fornite con il programma sono scritte nel linguaggio proprietario di Mathematica, che può essere utilizzato per espandere ulteriormente le funzionalità del sistema. Di norma il nuovo codice viene aggiunto sotto forma di '''package''' (pacchetto), un file di testo in formato ASCII che contiene codice scritto nel linguaggio proprio di Mathematica. I pacchetti hanno estensione '''.m'''.
 
Di norma, l'interfaccia utente è rappresentata da un documento di testo interattivo, il blocco per gli appunti (''notebook''), che è in grado di visualizzare ed interpretare la notazione matematica bidimensionale in formato [[WYSIWYG]] e incorpora i risultati dell'elaborazione sotto forma di testo, formule, grafici e suoni. I notebook sono file di testo in formato ASCII con estensione '''.nb''' (o '''.ma''' per le versioni fino alla 2.2) che possono essere passati da una piattaforma all'altra.
In Mathematica, il linguaggio di base viene interpretato da un ''[[kernel]]'' che esegue l'elaborazione vera e propria; i risultati vengono quindi comunicati ad uno specifico ''[[front end]]'' tra quelli disponibili. La comunicazione tra il kernel e questi ultimi (o qualsiasi altro [[client]], ad esempio programmi scritti dall'utente) utilizza il protocollo ''MathLink'', spesso attraverso una rete. È possibile che vari processi front-end si connettano allo stesso kernel, e che uno stesso front-end sia connesso a kernel differenti.
Wolfram Research rende gratuitamente disponibile un software, denominato '''MathReader''', che permette di visualizzare i blocchi per gli appunti con la formattazione matematica bidimensionale. Con la versione 6 ne è stata introdotta una versione avanzata ('''Mathematica Player''') che è in grado di eseguire in tempo reale il codice creato da Mathematica e memorizzato in file con estensione '''.nbp'''. Si tratta di dimostrazioni interattive nelle quali l'utente è in grado di modificare determinati parametri per mezzo di un'interfaccia grafica realizzata con appositi comandi del linguaggio Mathematica. Il [[Wolfram Demonstration Project]] raccoglie un'ampia selezione di dimostrazioni rivolte in particolare alla didattica.
 
== Interfacce ==
Di norma, il front-end è rappresentato da un documento di testo interattivo, il '''notebook''' (blocco per gli appunti), che è in grado di visualizzare ed interpretare la notazione matematica bidimensionale in formato [[WYSIWYG]] e incorpora i risultati dell'elaborazione sotto forma di testo, formule, grafici e suoni. I notebook sono file di testo in formato ASCII con estensione '''.nb''' (o '''.ma''' per le versioni fino alla 2.2) che possono essere passati da una piattaforma all'altra.
L'interfaccia di default presenta un layout estensivo che si contraddistingue per le capacità grafiche integrate e una rappresentazione più aderente alla notazione matematica tradizionale (permette ad esempio di scrivere <math>x^4+1</math> invece di <kbd>x^4+1</kbd>).
Wolfram Research rende gratuitamente disponibile un software, denominato '''MathReader''', che permette di visualizzare i notebook con la formattazione matematica bidimensionale. Con la versione 6 ne è stata introdotta una versione avanzata ('''Mathematica Player''') che è in grado di eseguire in tempo reale il codice creato da Mathematica e memorizzato in file con estensione '''.nbp'''. Si tratta di dimostrazioni interattive nelle quali l'utente è in grado di modificare determinati parametri per mezzo di un'interfaccia grafica realizzata con appositi comandi del linguaggio Mathematica. Il [[Wolfram Demonstration Project]] raccoglie un'ampia selezione di dimostrazioni rivolte in particolare alla didattica.
[[File:WITM-iPAQ.jpg|right|thumb|Accesso al kernel di Mathematica tramite WITM su un [[Personal digital assistant|palmare]] [[iPAQ]] [[Hewlett-Packard|HP]] ]]
 
== I Front End ==
Il front end di default presenta un layout estensivo che si contraddistingue per le capacità grafiche integrate e una rappresentazione più aderente alla notazione matematica tradizionale (permette ad esempio di scrivere <math>x^4+1</math> invece di <kbd>x^4+1</kbd>).
[[File:WITM-iPAQ.jpg|right|thumb|Accesso al kernel di Mathematica tramite WITM su un [[Personal digital assistant|palmare]] [[iPAQ]] [[Hewlett Packard|HP]] ]]
Nella metafora del notebook il testo e i comandi immessi dall'utente, così come i risultati elaborati dal kernel (che comprendono, oltre alle espressioni, anche immagini e suoni) sono rappresentati in una struttura gerarchica di celle.
Con la versione 3.0 il formato dei notebook ha subìto dei cambiamenti per adeguarsi alla filosofia che in Mathematica tutto è espressione (l'estensione dei file ''notebook'' è passata da .ma a .nb). Un ''notebook'' è di fatto un file di testo che riporta l'espressione '''Notebook[]''' i cui argomenti sono una gerarchia di celle che rappresentano testo, formule, grafici, suoni, animazioni, e a cui si aggiungono una serie di opzioni che stabiliscono le modalità di visualizzazione e di fruizione dei contenuti. A partire dalla versione 6 anche grafici, animazioni e suoni sono diventati oggetti ''direttamente'' manipolabili dal linguaggio.
 
A titolo esemplificativo, quella che segue è la rappresentazione interna di un notebook contenente una sezione, una sottosezione, due celle di testo e una formula:
<pre>
'''Notebook['''{
Cell[CellGroupData[{
Cell["Titolo sezione", "Section"],
Cell["Titolo sottosezione", "Subsection"],
Cell["testo introduttivo", "Text"],
Cell[BoxData[
FormBox[
RowBox[{
SuperscriptBox["\[ExponentialE]",
RowBox[{
RowBox[{"cos", "(", "\[Theta]", ")"}], "+",
RowBox[{"\[ImaginaryI]", " ",
RowBox[{
"sin", "(", "\[Theta]", ")"}]}]}]],
"\[LongEqual]", "1"}],
TraditionalForm]],
"Input"]
Cell["quella sopra è una formula formattata", "Text"]
}, Open]
]
}''']'''
</pre>
Questa scrittura, che è contenuta nel file di testo ASCII con suffisso .nb che costituisce il ''notebook'', viene interpretata dall'interfaccia di Mathematica o di Mathreader per produrre una visualizzazione di tipo WYSIWYG il cui contenuto può essere ulteriormente modificato dall'utente ed eventualmente inviato al kernel per la valutazione.
 
Tutte le versioni per UNIX/Linux sono dotate anche di un'[[interfaccia a riga di comando]]; all'utente viene presentata un'interfaccia in formato puramente testuale, di cui viene dato un esempio qui di seguito:
<code>
<pre>
'''Notebook['''{
% math
Cell[CellGroupData[{
Mathematica 5.2 for Sun Solaris (UltraSPARC)
Cell["Titolo sezione", "Section"],
Copyright 1988-2005 Wolfram Research, Inc.
Cell["Titolo sottosezione", "Subsection"],
-- Terminal graphics initialized --
Cell["testo introduttivo", "Text"],
Cell[BoxData[
FormBox[
RowBox[{
SuperscriptBox["\[ExponentialE]",
RowBox[{
RowBox[{"cos", "(", "\[Theta]", ")"}], "+",
RowBox[{"\[ImaginaryI]", " ",
RowBox[{
"sin", "(", "\[Theta]", ")"}]}]}]],
"\[LongEqual]", "1"}],
TraditionalForm]],
"Input"]
Cell["quella sopra è una formula formattata", "Text"]
}, Open]
]
}''']''' </code>
 
Questa scrittura, che è contenuta nel file di testo ASCII con suffisso .nb che costituisce il notebook, viene interpretata dal front-end di Mathematica o di Mathreader per produrre una visualizzazione di tipo WYSIWYG il cui contenuto può essere ulteriormente modificato dall'utente ed eventualmente inviato al kernel per la valutazione.
 
Tutte le versioni per UNIX/Linux sono dotate anche di un front-end a riga di comando; all'utente viene presentata un'interfaccia in formato puramente testuale, di cui viene dato un esempio qui di seguito:
 
In[1]:= Solve[x^2 + 2 x - 9 == 0, x]
<code>
% math
Mathematica 5.2 for Sun Solaris (UltraSPARC)
Copyright 1988-2005 Wolfram Research, Inc.
-- Terminal graphics initialized --
In[1]:= Solve[x^2 + 2 x - 9 == 0, x]
Out[1]= {{x -> -1 - Sqrt[10]}, {x -> -1 + Sqrt[10]}} </code>
 
Out[1]= {{x -> -1 - Sqrt[10]}, {x -> -1 + Sqrt[10]}}
Le prime versioni di Mathematica per MS-DOS erano dotate del solo front-end a riga di comando.
</pre>
Le prime versioni di Mathematica per [[MS-DOS]] erano dotate della sola interfaccia a riga di comando.
 
Sebbene il front-endl'interfaccia standard di Mathematica sia il più diffuso, sono disponibili svariatisvariate altrialtre front-endinterfacce, come:
* [http://witm.sourceforge.net/ WITM], che sta per Web Interface to Mathematica, è un front-end'interfaccia compatibile con ogni computer dotato di browser Web che permette di utilizzare Mathematica su dispositivi palmari come i [[Personal digital assistant|PDA]] per i quali non è disponibile una versione di Mathematica.
* [http://robotics.caltech.edu/~radford/jmath/ JMath] è un'interfaccia front-end basatobasata sulla libreria [[GNU readline]] disponibile per [[Sistema operativo|sistemi operativi]] di tipo UNIX.
* [http://ai.eecs.umich.edu/people/dreeves/mash/ MASH] permette di eseguire programmi Mathematica autocontenuti dalla riga di comando di un sistema UNIX.
 
== Il paradigma unico di Mathematica ==
=== Rappresentazione interna delle espressioni ===
La [[struttura dati]] fondamentale di Mathematica è l'''espressione''. Ogni singolo elemento del linguaggio, dai tipi di dato alla struttura stessa dei ''notebook'', è un'espressione costituita da un'intestazione (''Head'') e da una sequenza di argomenti racchiusi tra parentesi quadre e separati da virgole. Ad esempio, la scrittura 1+1 viene vista dal kernel come l'espressione
 
<pre>Plus[1,1]</pre>
 
mentre l'assegnamento alla variabile x (che non richiede di essere dichiarata prima di essere utilizzata) della succitata somma, ossia la scrittura x=1+1, viene rappresentata internamente con
 
<codepre> Set[x, Plus[1,1]] </codepre>
 
Il vantaggio di questa rappresentazione è che tutto il contenuto di ''notebook'' e ''package'' (che a loro volta non sono altro che espressioni) può essere rappresentato con semplici file di testo in formato ASCII, condivisibili tra le diverse piattaforme su cui Mathematica è implementato.
La rappresentazione interna di un'espressione può essere visualizzata per mezzo dei comandi '''Fullform''' e '''TreeForm'''.
 
<codepre>
<small>In[5]:=</small> '''FullForm[1 + Sin[2 Pi (w t + a)]];
<small>Out[5]:=</small> Plus[1, Sin[Times[2, Pi, Plus[a, Times[t, w]]]]]
</codepre>
 
L'intestazione di un'espressione può essere visualizzata per mezzo del comando '''Head[]''':
 
<codepre>
<small>In[1]:=</small> '''Head[1 + 1]'''
<small>Out[1]=</small> Plus
</pre>
 
<pre>
<small>In[2]:=</small> '''Head[{1,2,3}]'''
<small>OutIn[2]:=</small> List </code>'''Head[{1,2,3}]'''
<small>Out[2]=</small> List
</pre>
 
Le sue parti interne sono invece accessibili utilizzando la procedura Part[n1,n2,...] la cui forma breve è rappresentata da <nowiki>[[n1,n2,...]]</nowiki>. Nell'esempio che segue vengono estratte, rispettivamente: l'intestazione, il secondo argomento di Plus, il primo (e unico) argomento della funzione Sin, il secondo addendo del terzo fattore nell'argomento di Sin.
 
<codepre>
<small>In[3]:=</small> '''expr = 1 + Sin[2 Pi (w t + a)];
<small>In[4]:=</small> '''{Part[expr, 0], expr<nowiki>[[</nowiki>2<nowiki>]]</nowiki>, expr<nowiki>[[2, 1]]</nowiki>, expr<nowiki>[[2, 1, 3, 2]]</nowiki>}'''
<small>Out[4]=</small> {Plus, Sin[2 Pi (a + t w)], 2 Pi (a + t w), t w}
</codepre>
 
==== Atomi ====
Mathematica offre anche dei tipi atomici che identificano le diverse tipologie di numero (intero, razionale, reale, complesso) e di simbolo (simbolo del linguaggio, stringa di caratteri). I tipi atomici in Mathematica sono: '''Integer''', '''Rational''', '''Real''', '''Complex''', '''Symbol''' e '''String'''.
La rappresentazione di un atomo differisce in un certo senso da quella delle espressioni tradizionali (i cui dati sono riportati tra le parentesi quadre dell'espressione) in quanto l'intestazione non viene in genere visualizzata, pur essendo restituita dal comando Head. I seguenti comandi applicano la procedura Head a ciascun elemento della lista che segue '''/@''' (la notazione infissa di Map[]):
<code>
<small>In[1]:=</small> '''Head /@ {7, 2/3, 2.71, 5 - 3 I, I, E, Pi}'''
<small>Out[1]=</small> {Integer, Rational, Real, Complex, Complex, Symbol, Symbol}
 
<pre>
<small>In[2]:=</small> '''Head /@ {Integer, Plus, Map, Solve, "Integer", "Pluto"}'''
<small>OutIn[21]:=</small> '''Head /@ {Symbol7, Symbol2/3, Symbol2.71, Symbol,5 String,- String}3 I, I, </code>E, Pi}'''
<small>Out[1]=</small> {Integer, Rational, Real, Complex, Complex, Symbol, Symbol}
</pre>
 
<pre>
<small>In[2]:=</small> '''Head /@ {Integer, Plus, Map, Solve, "Integer", "Pluto"}'''
<small>Out[2]=</small> {Symbol, Symbol, Symbol, Symbol, String, String}
</pre>
 
=== Valutazione delle espressioni ===
Quando si invia un'espressione al kernel, questi la elabora (o, mutuando il termine anglofono ''Evaluate'', la ''valuta'') immediatamente applicando (nell'ordine) all'intestazione, agli argomenti e all'espressione nel suo complesso una serie di regole di trasformazione specificate dall'utente o predefinite nel linguaggio.
 
<code>
<pre>
<small>In[1]:=</small> '''1 + 1'''
<small>OutIn[1]:=</small> 2'''1 + </code>1'''
<small>Out[1]=</small> 2
</pre>
 
A differenza di altri prodotti analoghi, quali [[Maxima (software)|Maxima]] e [[Maple]], Mathematica applica ricorsivamente le regole di trasformazione memorizzate fino a quando l'espressione elaborata non subisce ulteriori variazioni (si dice che è stato raggiunto un [[punto fisso]]), o viene raggiunto un limite di ricorsione predefinito. Perché ciò abbia senso è opportuna - anche se non imposta - l'assenza di effetti collaterali (''side effect''); da questo elemento deriva la somiglianza con la programmazione funzionale.
Le funzioni ed il codice sono di prima classe, e non opache. Lo ''scoping'' è dinamico, ma ci sono anche alcuni costrutti che tentano di simulare lo ''scope'' lessicale.
 
==== La valutazione trasparente all'utente ====
Il processo di valutazione da parte del kernel è in parte trasparente all'utente e questo può essere fonte di frustrazione per il programmatore novizio. Dato che l'intestazione e gli argomenti vengono valutati per primi, quando l'espressione viene valutata nel suo complesso ha già subìto una parziale trasformazione della sua sintassi. Siccome le regole di riscrittura si basano su sostituzioni sintattiche, e non semantiche, può capitare che certe regole di sostituzione non trovino più applicazione sulla forma modificata e pertanto non sortiscano l'effetto desiderato.
Ad esempio, è possibile sostituire il simbolo 1 con il simbolo 3 per mezzo della seguente regola di sostituzione
 
<code>
<pre>
<small>In[1]:=</small> '''1 /. (1->3)'''
<small>OutIn[1]:=</small> 3'''1 </code. (1->3)'''
<small>Out[1]=</small> 3
</pre>
 
internamente rappresentata come:
 
<codepre> ReplaceAll[1,Rule[1,3]] </codepre>
 
Tuttavia, se si cerca di effettuare una sostituzione dello stesso simbolo nella scrittura 1+1 si ottiene un risultato diverso dal valore 6 atteso:
<code>
<small>In[2]:=</small> '''1 + 1 /. (1->3)'''
<small>Out[2]=</small> 2 </code>
 
<pre>
Questo succede perché ha avuto luogo una valutazione trasparente dell'espressione <code>ReplaceAll[Plus[1,1],Rule[1,3]]</code> prima che la regola di sostituzione invocata da ReplaceAll potesse essere applicata. Il kernel ha infatti valutato gli argomenti di ReplaceAll prima di chiamare tale funzione. Il risultato è stato che ReplaceAll ha avuto la seguente sintassi di chiamata:
<small>In[2]:=</small> '''1 + 1 /. (1->3)'''
<small>Out[2]=</small> 2
</pre>
 
Questo succede perché ha avuto luogo una valutazione trasparente dell'espressione <code>ReplaceAll[Plus[1,1],Rule[1,3<nowiki>]]</nowiki></code> prima che la regola di sostituzione invocata da ReplaceAll potesse essere applicata. Il kernel ha infatti valutato gli argomenti di ReplaceAll prima di chiamare tale funzione. Il risultato è stato che ReplaceAll ha avuto la seguente sintassi di chiamata:
<code> ReplaceAll[2, Rule[1,3]] </code>
 
<pre>ReplaceAll[2, Rule[1,3<nowiki>]]</nowiki></pre>
 
e, non potendo trovare il simbolo 1, non ha sortito alcun effetto.
La mancata comprensione del meccanismo di valutazione trasparente è una delle principali fonti di errore nella programmazione con Mathematica, testimoniata dai numerosi messaggi in merito sul gruppo di discussione comp.soft-sys.math.mathematica.
 
====== Esempio pratico ======
Un esempio non banale di come la valutazione trasparente dell'intestazione possa portare a risultati in apparente contraddizione con quelli attesi è il seguente: uno dei modi per calcolare la derivata simbolica di una funzione in Mathematica è tramite la forma postfissa dell'operatore Derivative; se f[x] è la funzione della variabile x, allora la derivata è data da f'[x]. Questa operazione è equivalente alla forma in notazione prefissa Derivative[1][f][x], che consiste di una funzione della variabile x con intestazione Derivative[1][f]. Quando si valuta l'espressione, Mathematica procede a elaborare l'intestazione, calcolando la derivata prima della funzione pura f e poi la valuta in corrispondenza dell'argomento (in questo caso x). Ad esempio, se f è la funzione speciale seno integrale si ha
 
<code>
<pre>
<small>In[3]:=</small> '''SinIntegral'[x]'''
<small>OutIn[3]:=</small> Sin'''SinIntegral'[x]/x </code>'''
<small>Out[3]=</small> Sin[x]/x
</pre>
 
Se però si vuole calcolare la derivata della funzione SinIntegral[x^2], la seguente valutazione
 
<code>
<pre>
<small>In[4]:=</small> '''SinIntegral'[x^2]'''
<small>OutIn[4]:=</small> Sin'''SinIntegral'[x^2]/x^2 </code>'''
<small>Out[4]=</small> Sin[x^2]/x^2
</pre>
 
fornisce un risultato che non concorda con le regole di derivazione composta di una funzione. Questo perché l'intestazione è stata valutata senza tener conto degli argomenti della funzione. Il risultato dell'operazione è infatti la derivata funzionale del seno integrale valutata in corrispondenza del valore x^2.
Per ottenere un risultato in accordo con la regola di derivazione delle funzioni composte è necessario utilizzare il comando D[expr,var] in cui si specifica la variabile rispetto alla quale si deriva:
<code>
<small>In[5]:=</small> '''D[SinIntegral[x^2],x]'''
<small>Out[5]=</small> 2 Sin[x^2]/x </code>
 
<pre>
==== La riduzione a forma normale ====
<small>In[5]:=</small> '''D[SinIntegral[x^2],x]'''
Affinché le regole di sostituzione possano essere applicate con consistenza ed evitando il rischio di una ricorsione infinita, è fondamentale che le differenti forme sintattiche con cui un'espressione può essere rappresentata siano riconducibili in maniera univoca ad una unica forma che non sia passibile di ulteriori trasformazioni. Questa forma, che altro non è che il punto fisso delle trasformazioni applicabili (siano esse predefinite o definite dall'utente) è la cosiddetta ''forma normale''.
<small>Out[5]=</small> 2 Sin[x^2]/x
</pre>
 
=== La riduzione a forma normale ===
Affinché le regole di sostituzione possano essere applicate con consistenza ed evitando il rischio di una ricorsione infinita, è fondamentale che le differenti forme sintattiche con cui un'espressione può essere rappresentata siano riconducibili in maniera univoca ad un'unica forma che non sia passibile di ulteriori trasformazioni. Questa forma, che altro non è che il punto fisso delle trasformazioni applicabili (siano esse predefinite o definite dall'utente) è la cosiddetta ''forma normale''.
La riduzione in forma normale è importante ai fini della programmazione in Mathematica sia quando essa sia dovuta a regole integrate nel sistema, sia quando debba essere implementata nel codice utente.
 
Line 194 ⟶ 203:
che non vengono automaticamente elaborate da Mathematica in assenza di comandi specifici. Un ipotetico codice utente deputato a estrarre informazioni dal polinomio (come il coefficiente di x) deve occuparsi di ridurre le diverse rappresentazioni alla medesima forma normale, ad esempio forzandone l'espansione ed eventualmente semplificando ulteriormente il risultato. Una volta raggiunta la forma normale sarà possibile applicare le regole per l'estrazione delle informazioni ed ottenere risultati consistenti indipendentemente dalla sintassi usata per passare l'input.
 
==== Meccanismi di controllo della valutazione ====
Mathematica offre diversi meccanismi che permettono al programmatore di condizionare il modo in cui un'espressione viene valutata. I principali sono gli attributi associati alle funzioni e i costrutti del tipo '''Hold''' ed '''Evaluate'''.
 
=== Manipolazione delle espressioni ===
Uno dei principi guida di Mathematica è la struttura unificata presente dietro quasi tutti gli oggetti rappresentabili in Mathematica. Ad esempio se inseriamo l'espressione <math>x^4+1</math>, essa verrà rappresentata come se fosse stato scritto:
 
<code>
<pre>
<small>In[1]:=</small> '''x^4 + 1'''
<small>OutIn[1]:=</small> 1+'''x<sup>^4</sup> + </code>1'''
<small>Out[1]=</small> 1+x<sup>4</sup>
</pre>
 
Comunque se il comando <kbd>FullForm</kbd> è utilizzato in questa espressione:
 
<code>
<pre>
<small>In[2]:=</small> '''FullForm[x^4 + 1]'''
<small>OutIn[2]:=</small> Plus[1, Power'''FullForm[x, ^4]] + </code>1]'''
<small>Out[2]=</small> Plus[1, Power[x, 4]]
</pre>
 
Quasi tutti gli oggetti in Mathematica hanno la forma base ''head''[''e''<sub>1</sub>, ''e''<sub>2</sub>, ''...''] (che può anche essere visualizzata o inserita in qualche altro stile). Per esempio, la ''head'' dell'esempio precedente è <kbd>Plus</kbd>, a simboli come ''x'' hanno la forma <kbd>Symbol["x"]</kbd>. Anche le liste hanno questa struttura, dove la ''Head'' è <kbd>List</kbd>.
 
Questo principio permette alle ordinarie espressioni che non hanno nulla a che fare con le liste, di contenere operatori relativi alle liste:
 
<code>
<pre>
<small>In[3]:=</small> '''Expand[(Cos[x] + 2 Log[x^11])/13]<nowiki>[[2, 1]]</nowiki>'''
<small>OutIn[3]:=</small> '''Expand[(Cos[x] + 2 Log[x^11])/13]<nowiki>[[2, 1]]</codenowiki>'''
<small>Out[3]=</small> 2/13
</pre>
 
Può anche avvenire il contrario—Le liste possono essere modificate con gli operatori normali:
 
<code>
<pre>
<small>In[4]:=</small> '''Map[Apply[Log, #] &, {{2, x}, {3, x}, {4, x}}]'''
<small>OutIn[4]:=</small> {Log'''Map[Apply[x]/Log[2, #] &, {{2, Log[x]/Log[}, {3], Log[x]/Log[4]}, {4, </code>x}}]'''
<small>Out[4]=</small> {Log[x]/Log[2], Log[x]/Log[3], Log[x]/Log[4]}
</pre>
 
Dove la funzione <kbd>Apply</kbd> cambia la ''Head'' del suo secondo argomento in quella del primo.
 
==== Esempi ====
Il seguente esempio di codice Mathematica trova il [[Determinante (algebra)|determinante]] di una [[matrice]] 6&times;6 i cui elementi ''i'', ''j''-esimi contengono ''ij'' e gli elementi nulli sono sostituiti con 1.
 
<code>
<pre>
<small>In[1]:=</small> '''Det[Array[Times, {6, 6}, 0] /. 0 -> 1]'''
<small>OutIn[1]:=</small> 0'''Det[Array[Times, {6, 6}, 0] </code. 0 -> 1]'''
<small>Out[1]=</small> 0
</pre>
 
Quindi il determinante di questa matrice è 0.
 
Il seguente calcolo numerico trova la radice dell'equazione ''e''<sup>''x''</sup> = ''x''<sup>2</sup> + 2, partendo dal punto ''x'' = -1.
 
<code>
<pre>
<small>In[2]:=</small> '''FindRoot[Exp[x] == x^2 + 2, {x, -1}]'''
<small>OutIn[2]:=</small> '''FindRoot[Exp[x] == x^2 + 2, {x, -> 1.3190736768573652} </code>]'''
<small>Out[2]=</small> {x -> 1.3190736768573652}
</pre>
 
== La programmazione in Mathematica ==
Line 239 ⟶ 261:
 
L'approccio più sintetico è quello di utilizzare una delle varie funzioni specializzate:
 
<code>
<pre>
<small>In[3]:=</small> '''Array[GCD, {5, 5}]'''
<small>In[3]:=</small> '''Array[GCD, {5, 5}]'''
<small>Out[3]=</small> {{1, 1, 1, 1, 1}, {1, 2, 1, 2, 1}, {1, 1, 3, 1, 1}, {1, 2, 1, 4, 1}, {1, 1, 1, 1, 5}}
</codepre>
 
Ci sono almeno altri tre modi di fare la stessa cosa:
 
<code>
<pre>
<small>In[4]:=</small> '''Table[GCD[x, y], {x, 1, 5}, {y, 1, 5}]'''
<small>OutIn[4]:=</small> {{1'''Table[GCD[x, 1, 1, 1, 1}y], {1, 2x, 1, 2, 15}, {1, 1, 3, 1, 1}, {1, 2, 1, 4, 1}, {1, 1, 1y, 1, 5}} </code>]'''
<small>Out[4]=</small> {{1, 1, 1, 1, 1}, {1, 2, 1, 2, 1}, {1, 1, 3, 1, 1}, {1, 2, 1, 4, 1}, {1, 1, 1, 1, 5}}
</pre>
 
Un approccio in stile APL:
 
<code>
<pre>
<small>In[5]:=</small> '''Outer[GCD, Range[5], Range<nowiki>[[5]]</nowiki>'''
<small>In[5]:=</small> '''Outer[GCD, Range[5], Range[5]]'''
<small>Out[5]=</small> {{1, 1, 1, 1, 1}, {1, 2, 1, 2, 1}, {1, 1, 3, 1, 1}, {1, 2, 1, 4, 1}, {1, 1, 1, 1, 5}}
</codepre>
 
<kbd>Outer</kbd> corrisponde all'operatore prodotto esterno, <kbd>Range</kbd> corrisponde all'[[operatore iota]].
 
Un approccio iterativo:
<codepre>
<small>In[6]:=</small>''' l1 = {}; (* inizializza come lista vuota,'''
'''dato che in conclusione vogliamo una lista *)'''
'''For[i = 1, i <= 5, i++,'''
'''l2 = {};'''
'''For[j = 1, j <= 5, j++,'''
'''l2 = Append[l2, GCD[i, j]]'''
'''];'''
'''l1 = Append[l1, l2];
'''(* appende la sottolista, cioè la riga *)'''
''']; l1'''
<small>Out[6]=</small> {{1, 1, 1, 1, 1}, {1, 2, 1, 2, 1}, {1, 1, 3, 1, 1}, {1, 2, 1, 4, 1}, {1, 1, 1, 1, 5}}
</codepre>
 
Notare come questa soluzione sia considerevolmente più lunga delle altre.
 
Line 278 ⟶ 307:
 
== I pacchetti ==
Il sistema viene fornito con una nutrita schiera di pacchetti standard che coprono un'ampia gamma di applicazioni matematiche e non. Numerosi altri pacchetti, e relativi ''notebook'', possono essere reperiti (per lo più gratuitamente) sul Web e in particolare sul sito del [http://library.wolfram.com/ Wolfram Information Center].
 
== Interfacciamento con altre applicazioni ==
La comunicazione con altre applicazioni avviene attraverso il protocollo ''MathLink''. Esso permette non solo la comunicazione tra il kernel ede ile front-endinterfacce, ma fornisce anche un'interfaccia generale tra il kernel ed una applicazione arbitraria. Wolfram Research distribuisce gratuitamente un kit di sviluppo per collegare applicazioni scritte in C al kernel di Mathematica attraverso ''MathLink''. Altri due componenti di Mathematica, attraverso ''MathLink'', permettono agli sviluppatori di collegare il kernel ad un programma in [[Java (linguaggio di programmazione)|Java]] o un programma .NET: ''J/Link'' e ''.NET/Link''.
 
''J/Link'' permette di interfacciare codice Java e programmi in linguaggio Mathematica. Da un lato i programmi Java di utilizzare i comandi di Mathematica per eseguire calcoli; dall'altro viene concesso a Mathematica di caricare [[Classe (informatica)|classi]] Java, manipolare oggetti Java ed eseguire chiamate a metodi rendendo possibile, ad esempio, la costruzione di un'[[interfaccia grafica]] per un'esecuzione interattiva del codice Mathematica.
Line 293 ⟶ 322:
Dalla versione 5.1, Mathematica dispone di un package (denominato WebServices.m) che consente di accedere ai [[web service|servizi messi a disposizione dai siti Web]], rendendone disponibili le funzioni come se si trattasse di comandi di Mathematica. WebServices.m supporta il protocollo [[SOAP]] ed è in grado di rilevare ed installare funzionalità aggiuntive tramite [[Web Services Description Language|WSDL]].
 
A partire dalla versione 8, Mathematica permette di interagire con il motore di ricerca Wolfram|Alpha direttamente dal front-enddall'interfaccia del ''notebook''.
 
== Pro e Contro ==
=== Vantaggi ===
Il front-endL'interfaccia standard adottatoadottata dalle versioni più recenti di Mathematica (in pratica da tutte quelle attualmente supportate) semplifica drasticamente la stesura di calcoli e la loro documentazione. Il codice viene eseguito cliccandoci sopra e premendo maiusc-invio. È anche possibile selezionare diverse celle contenenti il codice (anche in blocchi organizzati secondo una struttura gerarchica) evidenziando le rispettive barre laterali ed eseguire il codice in successione. Il vantaggio di questo approccio è che gli utilizzatori possono modificare alcuni parametri del calcolo e rieseguire il codice in pochi secondi. Gli eventuali errori possono essere corretti direttamente all'interno del ''notebook'' ed i calcoli rieseguiti senza dover ridigitare, ricopiare o ricompilare le linee di codice successive. Altri ambienti di calcolo richiedono invece, quando usati in modalità interattiva, di andare a ricercare nello storico i calcoli effettuati, ricopiarli, modificarli e poi eseguirli.
 
Un altro dei vantaggi di Mathematica risiede nella sua abilità nel trattare numeri in precisione arbitraria e quantità esatte (come i numeri razionali). Risulta così possibile effettuare calcoli esatti o con una precisione limitata solo dalla disponibilità di risorse della macchina hardware.
Line 314 ⟶ 343:
Il costo di una singola licenza standard di Mathematica 8 per l'utente professionale che non possa trarre vantaggio dagli sconti riservati a studenti, insegnanti, istituti governativi ed educativi è di 3185 euro per le piattaforme Windows/Macintosh/Linux. Il costo comprende la licenza perpetua e un anno di manutenzione Premier Service (seconda licenza per il laptop, aggiornamenti e supporto). L'utente non professionale può acquistare la licenza Home Edition offerta a un prezzo sensibilmente ridotto<ref>[http://store.wolfram.com/view/app/mathematica/ Costo delle licenze di Mathematica] sul sito Wolfram.com</ref>
 
Una critica che viene mossa ai forum presenti sul sito di Wolfram Research e al gruppo di discussione pubblico comp.soft-sys.math.mathematica è che si tratta di gruppi moderati in cui la comunicazione viene rallentata dall'esigenza di moderazione. Una delle regole per postare sul newsgroupgruppo di discussione pubblico, inoltre, prevede che non sia possibile citare altri sistemi di calcolo numerico o simbolico e questo viene percepito da alcuni come un ostacolo alla libertà di discutere di certi aspetti del linguaggio che sono realizzati meglio o peggio in altri software.
 
== Mathematica sul Web ==
[http://mathworld.wolfram.com/ MathWorld] è un'enciclopedia matematica in continua crescita e realizzata con la tecnologia di Mathematica. Moltissimi argomenti offrono un ''notebook'' da scaricare contenente le formule o i grafici più importanti.
 
[http://functions.wolfram.com/ The Wolfram Functions Site] è un sito che riporta la più vasta collezione di formule e grafici relativi alle più disparate funzioni matematiche. È possibile scaricare i formulari e le applicazioni in formato ''notebook''.
 
[[Wolfram Demonstration Project]] raccoglie un'ampia gamma di dimostrazioni realizzate con Mathematica 6 e fruibili per mezzo del programma gratuito Mathematica Player.
 
[https://web.archive.org/web/20130325084513/http://integrals.wolfram.com/index.jsp The Wolfram Integrator] (precedentemente noto come 'The Mathematica Integrator') è un sito web in cui la tecnologia di Mathematica viene messa a disposizione dei navigatori che vogliano calcolare integrali in forma simbolica. Si immette la funzione da integrare con la notazione di Mathematica e la si sottopone a un kernel remoto per la valutazione.
 
Sulla [httphttps://oeis.org/ Online Encyclopedia of Integer Sequences], Mathematica e Maple sono i due Computer Algebra System più usati per i quali sono forniti comandi per calcolare sequenze.
 
[https://web.archive.org/web/20060927124053/http://www.vis.uni-stuttgart.de/~kraus/LiveGraphics3D/ LiveGraphics3D] è un'applet scritta in Java 1.1 che permette di inserire grafici interattivi all'interno di una pagina Web. I grafici, rappresentati con la sintassi di Mathematica, sono interpretati dall'applet Java e visualizzati in una finestra interattiva sulla pagina Web. L'utente può così ruotare a piacere le figure nello spazio 3D, attivare o fermare animazioni, e addirittura modificare determinati parametri della rappresentazione, spostando elementi predefiniti. L'applet non richiede la presenza di Mathematica sul sistema che produce o legge le pagine e può essere utilizzata gratuitamente per scopi personali (l'uso commerciale richiede invece una licenza da parte di Wolfram Research Inc.).
 
== Versioni ==
Sono state rilasciatepubblicate le seguenti versioni<ref>[http{{Cita web|url=https://www.wolfram.com/products/mathematica/quickrevisionhistoryquick-revision-history.html|titolo=Mathematica Latest Version and Quick Revision History of Mathematica]|lingua=en|accesso=2021-07-08}}</ref>:
 
<div style="-moz-column-count:2; column-count:2;">
{{Div col|cols=strette}}
* Mathematica 1.0 (1988)<ref>[http://query.nytimes.com/gst/fullpage.html?res=940DE6DB133EF933A05753C1A96E948260 Supercomputer Pictures Solve the Once Insoluble], John Markoff, October 30, 1988.</ref>
* Mathematica 1.0 (1988)<ref>[https://query.nytimes.com/gst/fullpage.html?res=940DE6DB133EF933A05753C1A96E948260 Supercomputer Pictures Solve the Once Insoluble], John Markoff, 30 ottobre 1988.</ref>
* Mathematica 1.2 (1989)<ref>[http://www.accessmylibrary.com/coms2/summary_0286-9205258_ITM Mathematica 1.2 adds new graphics options: upgrade also promises concurrent operations] by Elinor Craig, ''MacWee''k, July 25, 1989.</ref>
* Mathematica 21.02 (19911989)<ref>[http://www.accessmylibrary.com/coms2/summary_0286-9227849_ITM9205258_ITM Mathematica +1.2 283adds functionsnew =graphics Mathematicaoptions: 2.0upgrade also promises concurrent operations] by RainesElinor CohenCraig, ''MacWeekMacWee''k, January25 15,luglio 19911989.</ref>
* Mathematica 2.0 (1991)<ref>[http://www.accessmylibrary.com/coms2/summary_0286-9227849_ITM Mathematica + 283 functions = Mathematica 2.0] by Raines Cohen, ''MacWeek'', 15 gennaio 1991.</ref>
* Mathematica 2.1 (1992)<ref>[http://www.accessmylibrary.com/coms2/summary_0286-9256461_ITM New Mathematica: faster, leaner, linkable and QuickTime-compatible: MathLink kit allows ties to other apps. (Wolfram Research Inc. ships Mathematica 2.1, new QuickTime-compatible version of Mathematica software)] by Daniel Todd, MacWeek, June15 15,giugno 1992.</ref>
* Mathematica 2.2 (1993)<ref>[http://www.highbeam.com/doc/1G1-13185601.html New version of Mathematica] {{Webarchive|url=https://web.archive.org/web/20121023115106/http://www.highbeam.com/doc/1G1-13185601.html |data=23 ottobre 2012 }}, ''Mechanical Engineering'', June 1, giugno 1993.</ref>
* Mathematica 3.0 (1996)<ref>[http://www.businessweek.com/1997/02/b3509205.htm New Mathematica] by Stephen H. Wildstrom, ''BusinessWeek'', June 15, giugno 1997.</ref>
* Mathematica 4.0 (1999)<ref>[http://www.highbeam.com/doc/1G1{{RivistaVG|mc|199|172-61370961.html 175|10|1999|titolo=Mathematica 4.0] by Charles Seiters, ''Macworld'', October 1, 1999.}}</ref>
* Mathematica 4.1 (2000)
* Mathematica 4.2 (2002)<ref>[httphttps://www.macworld.com/2002/11/reviews/mathematica/ Mathematica 4.2: Feature-Rich Math Program Integrates with the Web, Adds Full Java Support] {{webarchive|url=https://web.archive.org/web/20071121151440/http://www.macworld.com/2002/11/reviews/mathematica/ |data=21 novembre 2007 }} bydi Charles Seiter, ''Macworld'', November 1, novembre 2002.</ref>
* Mathematica 5.0 (2003)<ref>[http://www.mywire.com/pubs/PCMagazine/2003/09/02/420220?extID=10051 Mathematica 5.0 Adds Up: Exactly 15 years after Mathematica's initial release, Wolfram Research has released Mathematica ] {{Webarchive|url=https://web.archive.org/web/20190805054228/http://www.mywire.com/pubs/PCMagazine/2003/09/02/420220?extID=10051 |date=5 agosto 2019 }}, ''PC Magazine'', September 3, settembre 2003.</ref>
* Mathematica 5.1 (2004)<ref>[http://moreresults.factiva.com/results/index/index.aspx?ref=PCW0000020050115e0c60001i Mathematica 5.1's Web Services Add Up; Mathematica 5.1 delivers improvements over Version 5.0 that are vastly out of proportion for a .1 upgrade.] {{Webarchive|url=https://web.archive.org/web/20121209111950/http://moreresults.factiva.com/results/index/index.aspx?ref=PCW0000020050115e0c60001i |date=9 dicembre 2012 }} by Peter Coffee, ''eWeek'', December 6, dicembre 2004.</ref>
* Mathematica 5.2 (2005)<ref>[http://www.macworld.co.uk/news/index.cfm?NewsID=12069&Page=1&pagePos=6 Mathematica hits 64-bit] {{Webarchive|url=https://web.archive.org/web/20110610164355/http://www.macworld.co.uk/news/index.cfm?NewsID=12069&Page=1&pagePos=6 |date=10 giugno 2011 }}, ''MacWorld'' UK, July 13, luglio 2005.</ref>
* Mathematica 6.0 (2007)<ref>[http://www.scientific-computing.com/products/review_details.php?review_id=17 Mathematica 6: Felix Grant finds that version 6 of Wolfram Research's symbolic mathematical software really does live up to its expectations.] {{Webarchive|url=https://web.archive.org/web/20110113024403/http://www.scientific-computing.com/products/review_details.php?review_id=17 |date=13 gennaio 2011 }} Scientific Computing, 2007.</ref>
* Mathematica 6.0.1 (2007)
* Mathematica 6.0.2 (2008)
* Mathematica 6.0.3 (2008)
* Mathematica 7.0 (2008)<ref>[httphttps://blog.wolfram.com/2008/11/18/surprise-mathematica-70-released-today/ Mathematica 7: Released] Wolfram Blog, 2008.</ref>
* Mathematica 7.0.1 (2009)
* Mathematica 8.0 (2010)<ref>[http{{Cita web|url=https://blog.wolfram.com/2010/11/15/mathematica-8/]|titolo=Mathematica Wolfram8!—Wolfram Blog, 2010|sito=blog.wolfram.com|lingua=en|accesso=2021-07-08}}</ref>
* Mathematica 8.0.1 (2011)
* Mathematica 9.0 (2012)<ref>[http{{Cita web|url=https://blog.wolfram.com/2012/11/28/mathematica-9-is-released-today/]|titolo=Mathematica Wolfram9 Blog,Is 2012Released Today!—Wolfram Blog|sito=blog.wolfram.com|lingua=en|accesso=2021-07-08}}</ref>
* Mathematica 10.0 (2014)
* Mathematica 10.0.1 (2014)
Line 367 ⟶ 397:
* Mathematica 11.1.1 (2017)
* Mathematica 11.2 (2017)
* Mathematica 11.3 (2018)
</div>
* Mathematica 12 (2019)
* Mathematica 12.1 (2020)<ref>{{Cita web|url=https://blog.wolfram.com/2020/03/18/in-less-than-a-year-so-much-new-launching-version-12-1-of-wolfram-language-mathematica/|titolo=In Less Than a Year, So Much New: Launching Version 12.1 of Wolfram Language & Mathematica—Wolfram Blog|sito=blog.wolfram.com|lingua=en|accesso=2021-07-08}}</ref>
* Mathematica 12.2 (2020)
* Mathematica 12.3 (2021)
{{div col end}}
 
== Note ==
<references />
 
== Bibliografia ==
* {{RivistaVG|mc|90|142-147|11|1989}}
* {{RivistaVG|mc|125|252-255|1|1993|titolo=Mathematica - Un sistema per la matematica al calcolatore}} La rubrica su Mathematica continua in quasi tutti i numeri successivi fino al n° 208.
 
== Voci correlate ==
Line 377 ⟶ 416:
* [[IMTEK Mathematica Supplement]], un add-on open source di Mathematica per la [[Metodo degli elementi finiti|Simulazione ad elementi finiti]]
* '''[[FOSS|Free Software/Open Source]] e Freeware simili:'''
** [[Axiom (software)|Axiom computer algebra system]]
** [[Maxima (software)|Maxima]]
** [[GNU Octave|Octave]]
Line 394 ⟶ 433:
 
== Collegamenti esterni ==
* {{SitoCollegamenti ufficialeesterni}}
* [https://www.wolfram.com/company/history/ The History of Mathematica] {{Webarchive|url=https://web.archive.org/web/20080704082226/http://www.wolfram.com/company/history/ |date=4 luglio 2008 }}, un'introduzione sulla storia del sistema e del suo sviluppo
* {{cita web|http://www.wolfram.com|Wolfram Research}}
* {{cita web | 1 = http://integrals.wolfram.com/index.jsp | 2 = The Integrator - Calcolo formale di primitive (Wolfram Research) | accesso = 22 settembre 2006 | urlarchivio = https://web.archive.org/web/20130325084513/http://integrals.wolfram.com/index.jsp | dataarchivio = 25 marzo 2013 | urlmorto = sì }}
* [http://www.wolfram.com/company/history/ The History of Mathematica], un'introduzione sulla storia del sistema e del suo sviluppo
* {{collegamento interrotto|1=[http://www.mathematica-users.org/ Wiki-Mathematica] |data=gennaio 2018 |bot=InternetArchiveBot }}, un wiki-Mathematica
* {{cita web|http://integrals.wolfram.com/index.jsp|The Integrator - Calcolo formale di primitive (Wolfram Research)}}
* {{collegamento interrotto|1=[http://www.mathematica-users.org/ Wiki-Mathematica] |date=gennaio 2018 |bot=InternetArchiveBot }}, un wiki-Mathematica
* [http://ai.eecs.umich.edu/people/dreeves/mash MASH], UNIX-scripting interface to Mathematica
* [httphttps://www.sagemath.org/ SAGE], [[SAGE Math|Open Source Mathematica-like software]]
* [https://web.archive.org/web/20060118052359/http://www.imtek.uni-freiburg.de/simulation/mathematica/IMSweb/ IMS], the Open Source IMTEK Mathematica Supplement (IMS)
* [http://gallery.wolfram.com/ Mathematica Graphics Gallery], per numerosi esempi artistici nell'uso di Mathematica