Mathematica 8

Roberto Cavaliere
Wolfram Research, Inc.
roberto@wolfram.com

Agenda

Cosa è Mathematica?

Perchè Mathematica? ... Principi e vantaggi

Mathematica: breve tour

Deployment diversificato e flessibile

Conclusioni

Cosa è Mathematica?

Compute, Develop and Deploy con un unico ambiente integrato

Perchè Mathematica? ... Principi e vantaggi

Principi

Automatismo & Mathematical knowledge: decrementa il tempo di prototipazione e sviluppo eliminando passaggi superflui tramite meccanismi di automazione (scelta automatica dell'algoritmo, delle impostazioni di visualizzazione, dei controlli nelle strutture dinamiche (esempio). L’automatismo è reso possibile anche grazie all’enorme bagaglio di “conoscenze matematiche” del sistema. Ci sono migliaia di funzioni, algoritmi e metodi (es. NDSolve ha circa 25 differenti algoritmi di risoluzione delle equazioni differenziali) sempre aggiornati agli ultimi risultati della ricerca mondiale.

Architettura coerente: incrementa la produttività grazie alla sua capacità di gestire qualsiasi espressione in maniera uniforme e coerente con il principio su cui è stato creato "everything is an expression" (esempio)

Ambiente integrato: Mathematica include decine di pacchetti specialistici (Business Graphics, Geographic Information Systems, Finance, Database Access Kit, Image Processing, High Performance Computing, Cuda/OpenCL-Link, Control Systems, Wavelet Analysis, Statistics, ecc. e dispone di molteplici banche dati estese e curate direttamente accessibili dal codice Mathematica

Interfacciabile: Mathematica si interfaccia a numerosi altri linguaggi/ambienti: Mathematica Link for Excel, Mathematica Link for LabView, C, C++, Fortran, Java, .NET, web services, ecc

Linguaggio pluriparadigmatico: Mathematica offre set di comandi per diversi paradigmi: procedurale, basato su regole, funzionale

Perchè Mathematica? ... Principi e vantaggi

Workflow semplificato: un unico strumento integrato

Workflow snellito: dallo sviluppo all’utilizzo

Ambiente altamente integrato

I principali vantaggi

Verticalizzazione del software su diverse aree specifiche, con funzionalità e performance comparabili con software dedicati

Possibilità di sviluppare semplici o complesse applicazioni in qualsiasi settore tecnico-scientifico utilizzando sempre la stessa logica

Perchè Mathematica? ... Principi e vantaggi

... e benefici

Mathematica: breve tour

Analisi dati

Vediamo ora in quali momenti cruciali si evidenzia l’importanza di avere un elevato grado di integrazione e verticalizzazione in specifiche aree.
Come esempio portante consideriamo un tipico processo di analisi dati schematizzato in figura

Mathematica: breve tour

Integrazione con altri linguaggi/ambienti e formati di dati standard

Mathematica consente di importare dati in diversi modi. Il più semplice e comune è tramite il comando Import, che è in grado di riconoscere e trattare oltre cento formati di dati provenienti da altri ambienti e definiti secondo altri standard.

$ImportFormats

Import è in grado di importare sia dal file system su cui è installato Mathematica sia da reti intranet/internet, semplicmenete attraverso l’URL.
Questo è un esempio di Import di dati dal sito http://finance.yahoo.com

Panel[Column[{"France Telecom",
Grid[{{ "Current Values",Hyperlink["http://finance.yahoo.com/q?s=FTE"]},
{ "Historical Prices",Hyperlink["http://finance.yahoo.com/q/hp?s=FTE+Historical+Prices"]},
{"Link to time serie", "http://ichart.finance.yahoo.com/table.csv?s=FTE&d=8&e=8&f=2010&g=d&a=9&b=20&c=1997&ignore=.csv"}}, Alignment->Left]}, Alignment->Center]]

fte=Import[];

Export["c:\\temp\\fte.xls",fte]

Questo è l’import di dati da un file in formato Comma Separated Value (CSV)

eni=Import["C:\\temp\\ENI.MI.CSV"];

Questo comando visualizza una tabella con le prima 10 righe e prime 6 colonne dell’intera matrice di dati appena importata

Grid[eni[[1;;10,{1,2,3,4,5,6}]]]

Mathematica: breve tour

Sorgenti dati computabili

Oltre alle interfacce con altri ambienti/linguaggi ed al riconoscimento dei principali formati di file, Mathematica mette a disposizione una serie di banche dati affidabili, robuste ed aggiornate costantemente. Questo è un elenco completo delle banche dati Computable Data

Vediamo alcuni esempi

ChemicalData["SulfurousAcid"]

ChemicalData["SulfurousAcid","Properties"]

ChemicalData["SulfurousAcid","AcidityConstant"]

ChemicalData["SulfurousAcid","MoleculePlot"]

Ovviamente i dati sono disponibili in formato e struttura tali da poter essere immediatamente disponibili in Mathematica. Pertanto, si possono programmare anche complesse applicazioni che sfruttano tali dati e creano report, grafici, modelli, ecc. semplicemente richiedendo i dati ai server Wolfram. Ecco un esempio di come una chiamata a ChemicalData si innesta facilmente in una porzione di codice Mathematica

Una distribuzione dei pesi molecolari

all=ChemicalData[];
all=Map[ChemicalData[#,"MolecularWeight"]&,all];
all=Cases[all,_Real];
dist=BinCounts[all,{0,800,20}];

dist=Transpose[{Table[i,{i,20,800,20}],dist}]

ListLogPlot[dist,Filling->Axis]

Una distribuzione dei punti di ebollizione

ListPlot[Transpose[{Table[i,{i,-100,1000,10}],BinCounts[Cases[ChemicalData[#,"BoilingPoint"]&/@ChemicalData[],_Real],{-105,1005,10}]}],Filling->Axis,Frame->True,Axes->None,PlotRange->All,FrameLabel->{"boiling point",None}]

WeatherData fornisce dati meteo in tempo reale da tutte le stazioni del mondo

WeatherData[{"Caserta",5}]

WeatherData["LIML", "Properties"]

WeatherData["LIML", "Temperature","DateValue"]

DateListPlot[WeatherData["LIML", "MeanTemperature", {{2000,12,31},{2009,12,2}, "Month"}], Joined->True,Filling->Bottom]

DateListPlot[WeatherData["LIML", "Temperature", {{2009,1,1},{2010,12,2}, "Month"}], Joined->True,Filling->Bottom]

min=WeatherData["LIML", "MinTemperature", {{2009, 1, 1}, {2009, 12, 31}, "Day"}];
max=WeatherData["LIML", "MaxTemperature", {{2009, 1, 1}, {2009, 12, 31}, "Day"}];

DateListPlot[{min,max}, Joined->True,Filling->{1->{2}}]

StreamPlot dei flussi del vento per una griglia di coordinate relative agli Stati Uniti

Show[Graphics[{GrayLevel[.7],CountryData["USA","Polygon"]}],ListStreamPlot[Table[{{x,y},Through[{Cos,Sin}[WeatherData[{y,x},"WindDirection"] °]]},{x,-125,-67,4},{y,24,50,4}]]]

Integrazione con WolframAlpha

Una particolare sorgente di dati aggiunta in Mathematica 8 è quella fornita dal motore di computazione della conoscenza chiamato WolframAlpha. W|A include circa dieci trilioni di data sets sugli argomenti più svariati. Ci sono diversi modi per richiamare WolframApha dall’interno di Mathematica. Sia da linea di codice sia programmaticamente.

Esempi di domande
Dini surface
Fermat theorem
nutrition facts cheese
population history in Italy
how far is Milan from Rome
GDP history in France
boiling point of sulphur
earthquake in Italy 1980

Un esempio di funzioni applicata al risultato di una interrogazione eseguita con WolframAlpha. DateListPlot realizza il grafico dell’andamento della popolazione italiana basandosi sui dati restituiti da W|A

DateListPlot[]

WolframAlpha può essere anche interrogato da codice

info=WolframAlpha["weather Milan Italy","PodInformation"];

ids=Rest[DeleteDuplicates[#[[1,1,1]]& /@ info]];
titles=Map[{{#, 0},"Title"}&,ids] /. info;
contents=Column[Cases[info,_[{{#,_},"Content"},val_]:>val]]& /@ ids;
MenuView[Thread[titles -> contents],ImageSize -> Automatic]

I vantaggi

Il principale vantaggio è ancora una volta l’enorme semplicità con cui si possono costruire applicazioni che richiedono dati di qualsiasi natura

Si provi a fare un breve report sul prodotto interno lordo dei Paese di G8.
Con Google: “GDP changes of G8 countries, since 1970”

Google search »

Con Mathematica...

TabView[Map[Tooltip[Show[CountryData[#,"Shape"],ImageSize->50],#]->DateListPlot[CountryData[#,{{"GDP"},{1970,2010}}]]&,CountryData["GroupOf8"]]]

e con WolframAlpha

Mathematica: breve tour

Calcolo simbolico

Motore di calcolo simbolico tra i più potenti al mondo

Solve[a (x^4)+b x+c==0,x]

Assuming[x∈ℝ,∫(Abs[2-(Abs[x])])\[DifferentialD]x]

(∫_(-∞)^∞)((Boole[(1/2)<sin(x)<(2/3)])/(x^2))\[DifferentialD]x

∫(1/((x^10)-1))\[DifferentialD]x

volendo si può chiedere il risultato in forma tradizionale

∫(1/((x^10)-1))\[DifferentialD]x//TraditionalForm

Mathematica: breve tour

Calcolo numerico

Questo è un esempio di integrazione numerica di una funzione discontinua.

fun=(Piecewise[{{((Sin[10 x])/(Sqrt[-x])), -∞<x<0}, {(1/(Sqrt[x])), 0<x<1}, {Sin[2000 x] (x^2), 1<x<2}, {((Cos[2 x])/x), 2<x<∞}}]);

Questo è il grafico della funzione

Plot[fun,{x,-5,5},ImageSize->700]

Ora si effettua il calcolo dell'integrale

NIntegrate[fun,{x,-Infinity,Infinity}]

Propagazione degli errori e precisione arbitraria

f[x_]:=11 x-2

Questa funzione ha un punto fisso in x=0.2

Reduce[f[x]==x]

Si osserva come computazioni ripetute applicando la funzione nel suo punto fisso producano risultati inattesi

NestList[f,0.2,20]

Il motivo è che mentre 0.2 può essere pensato come un numero decimale esatto (0.20000000000000000000000...) tale numero non può essere rappresentato in maniera esatta con un numero finito di numeri nel sistema binario:

BaseForm[0.2,2]

Usando la precisione macchina, questo numero viene troncato a 32 bit. Ne segue che, l'ultima cifra troncata è un 1, l'ultima cifra utilizzata viene arrotondata per eccesso.

BaseForm[0.2`20,2]

In Mathematica si può spostare l'errore in avanti e lavorare con la precisione desiderata. L'esempio che segue impiega 30 decimali di precisione

NestList[f,0.2`50,20]

Si noti che il risultato, ora, è attendibile per un numero più elevato di computazioni. Si noti, inoltre, che Mathematica individua il numero di cifre affidabili e mostra solo tali valori.

Ovviamente, con Mathematica si può anche usare l'aritmetica esatta.

NestList[f,(1/5),30]

Gestire la precisione

Gli algoritmi per la gestione della precisione arbitraria nel calcolo numerico sono utilizzati da tutte le funzioni numeriche, anche quelle della grafica.

f=(∫_(-∞)^t)((20 Exp[x])/x)\[DifferentialD]x

Plot[Sin[f],{t,-45,-30}]

Plot[Sin[f],{t,-45,-30}, WorkingPrecision->32]

Anche i numeri random possono avere una precisione arbitraria

data=RandomVariate[BinormalDistribution[1/2],10^4, WorkingPrecision->120];//AbsoluteTiming

Length[data]

data//First

Se si vuole impostare la precisione uguale per tutti i valori reali nell’ambito di una sessione di lavoro, si può usare la variabile $Pre ed il comando SetPrecision

$Pre=Function[{input},SetPrecision[input,32]];

2+3

Cos[4]

(1/7)

Mathematica: breve tour

La soluzione ibrida

In realtà, anche quando non lo sappiamo, in molti casi Mathematica impiega algoritmi simbolici per sub-tasks anche in processi di calcoli numerici. Un esempio è la funzione NIntegrate

NIntegrate[(1/x)Cos[((Log[x])/x)],{x,0,1}]

Plot[(1/x)Cos[((Log[x])/x)],{x,0,1},PlotRange->15,Frame->True,ImageSize->Large]

come viene spiegato nella documentazione di NIntegrate “NIntegrate symbolically analyzes its input to transform oscillatory and other integrands, subdivide piecewise functions, and select optimal algorithms.”. Ulteriri dettagli si possono leggere nei vari tutorial, ad esempio in merito al sub-metodo "SymbolicPreprocessing"

Mathematica: breve tour

Un esempio di funzionalità molto comune: il data fitting

Mathematica dispone di numerose “macro” già pronte all’uso per l’analisi di dati. Ovviamente, la potenza del suo linguaggio consente anche all’utente di programmare i propri algoritmi laddove si necessita di integrare il sistema con nuovi modelli e/o algoritmi.
Facciamo alcuni esempi. Il fitting dei dati sperimentali: FindFit, LinearModelFit, NonlinearModelFit, GeneralizedLinearModelFit

data={{0,1},{1,0},{3,2},{5,4}, {6,4},{7,5}};

nlm=NonlinearModelFit[data,Log[a +b x^2],{a,b},x]

nlm["Properties"]

Show[ListPlot[data],Plot[nlm[x],{x,0,7}],Frame->True]

ListPlot[nlm["FitResiduals"], Filling->Axis]

nlm["ANOVATable"]

nlm[{"ParameterTable","ParameterConfidenceIntervalTable"}]

Mathematica: breve tour

La grafica

Mathematica dispone di centinaia di funzioni dedicate espressamente alla grafica in due e tre dimensioni.