Automatismo

Anche il concetto di automatismo in Mathematica è pervasivo. Il sistema cerca di effettuare le migliori scelte sia in merito al calcolo sia in merito alla presentazione dei risultati, per qualsiasi operazione noi eseguiamo.

Scelta automatica del migliore algoritmo risolutivo, nel senso di bilanciamento tra performance e affidabilità del risultato. Vediamo un esempio di NIntegrate dove si nota che la scelta automatica dell’algoritmo è la migliore possibile

Plot3D[((Abs[x-y])^(3/2)),{x,-1,1},{y,-1,1}]

NIntegrate[((Abs[x-y])^(3/2)),{x,0,1},{y,0,1}]

Table[Column[{res,ListPlot[xys=Reap[res=NIntegrate[((Abs[x-y])^(3/2)),{x,0,1},{y,0,1},Method->method,EvaluationMonitor:>Sow[{x,y}]]][[2,1]], AspectRatio->Automatic,ImageSize->300,PlotLabel->"Number of points:"<> ToString[Length[xys]]]}],
{method,{"GaussKronrod","MonteCarlo","LocalAdaptive",Automatic}}]

Chiarezza ed estetica. Alcuni esempi sui grafici nei quali il sistema cerca di mostrare la regione che suppone sia di maggiore interesse per l’utente

Plot[1/x,{x,0,1}]

Altri sistemi si comportano così

Plot[1/x,{x,0,1},PlotRange->All]

Plot3D[1/(x^2+y^2),{x,-2,2},{y,-2,2}]

Plot3D[1/(x^2+y^2),{x,-2,2},{y,-2,2},PlotRange->All]

Quando creiamo degli elementi di interfaccia il sistema cerca di individuare automaticamente i controlli che meglio si addicono al caso

Manipulate[Plot[If[t,Sin[x],Cos[x]],{x,0,10}],{t,{True,False}}]

Manipulate[Plot[f[x],{x,0,2Pi}],{f,{Sin,Cos,Tan,Cot}}]

Manipulate[Plot[f[x],{x,-2π,2π}],{f,{Sin,Cos,Tan,Cot, ArcTan,ArcSin,ArcCos}}]

Manipulate[Plot[f[k x],{x,0,10},FillingStyle->c,Filling->0],
{k,1,10},{f,{Sin,Cos,Tan,Cot, ArcTan,ArcSin,ArcCos}},{c,Yellow}]

Mathematical Knowledge

Il livello di robustezza e affidabilità del sistema Mathematica è estremamente elevato. Mathematica si fonda su oltre 20 anni di ricerca e sviluppo e molti degli algoritmi impiegati sono frutto di ricerche ed invenzioni proprie degli sviluppatori del team Wolfram. Questo conferisce al sistema Mathematica una base di conoscenze matematiche unica e altamente integrata.

I macro solutori NDSolve e NIntegrate

NDsolve può a tutti gli effetti considerarsi una "superfunction" per la soluzione di equazioni differenziali numeriche (incluse le ODE, PDE, DDE, DAE).
Esempio di soluzione di un problema con metodo degli eventi: ogni volta che la pallina tocca la superfice cambiano le condizioni iniziali. NDSolve è in grado di gestire questo tipo di problemi.

NIntegrate

In Mathematica 8 NIntegrate è ancora più potente

Plot3D[x y Floor[x y],{x,-2,2},{y,-2,2},PlotPoints->35,Mesh->None,PlotStyle->Yellow,ExclusionsStyle->{None,Red}]

NIntegrate[x y Floor[x y],{x,-2,2},{y,-2,2}]

Integrali di funzioni altamente oscillanti (SIAM challenge problem)

Plot[Sin[x] ((1/x)+Sin[x^2] ((1/x)+Sin[x^3])),{x,0,20}]

NIntegrate[Sin[x] (Sin[x^2] (Sin[x^3]+(1/x))+(1/x)),{x,0,∞}]

Integrale di funzioni composte con funzioni speciali

Plot[BesselY[2/3,x]Sin[x+(Sqrt[x])]^4,{x,0,20}]

NIntegrate[BesselY[2/3,x]Sin[x+(Sqrt[x])]^4,{x,0,10^4}]