Comparison of Numerical Performance of Mathematica. and Maple 07. Summary Category Tests Median Mathematica speed Real data operations 0 s faster Real data operations (manual type override) 0 s faster Complex number data operations 6 s faster Complex number data operations (manual type override) 6 s faster Sparse real data operations 7 7,000 s faster Integer data operations 0 s faster Integer data operations (manual type override) 0 s faster Extended precision data operations (0 digits) 6 s faster Extended precision data operations (,000 digits) 6 s faster Random number generation 9 7 s faster Elementary & special functions 90,69 s faster Elementary & special functions (manual type override) 66 6 s faster Complex elementary & special functions 90 6 s faster Complex elementary & special functions (manual type override) 90 s faster Elementary & special functions (0 digits) 90 9 s faster High-precision function evaluation 9 s faster Exact functions 9 s faster GPU operations s faster Total 87 s faster
Machine-Precision Real Linear Algebra.0. Cholesky 00 00 00 000 size 0. 0.0 0.0 0. 0. 0.0 Convert matrix to vector 00 00 00 000 size.0. Covariance 00 00 00 000 size.0..0. Det 00 00 00 000 size.. 0.8 0.6 0. 0. Dot 00 00 00 000 size..0..0. Eigenvalues 00 00 600 800 00 size Eigenvectors Fit. Fourier 8 6 0.8 0.6 0. 0. 00 00 600 800 00 size 000 000 000 000 size 00 000 000 000 size Inverse LinearProgramming 0.8 LinearSolve 8 6 0.6 0. 0. 00 00 00 000 size 00 00 00 000 size 00 00 00 000 size 0. 0. 0. 0. MatrixExp MatrixPower 0 0 80 60 0 0 MatrixRank 0 00 00 00 size 00 00 00 000 size 00 000 000 000 000 6000 size
. 0.8 0.6 Mean 0.7 0.6 0. 0. Power Sort 0. 0. 0. 0. 000 000 000 000 size 00 00 00 000 size 00 000 000 000 size. Sort by absolute value 0.0 Transpose.0. 0.0 0.0 0.0 Mathematica. Maple 07. 0.0 00 000 000 000 size 00 00 00 000 size Machine-Precision Complex Linear Algebra.0. Det..0. Dot 8 6 Eigenvalues 00 00 00 000 size 00 00 00 000 size 00 00 600 800 00 size Eigenvectors Power. Convert matrix to vector 0.8 0.6 0. 0.. 0.8 0.6 0. 0. 00 00 600 800 00 size 00 00 00 000 size 00 00 00 000 size Fourier Inverse LinearSolve 0.0. 0. 0. 0.0 00 000 000 000 size 00 00 00 000 size 00 00 00 000 size
.0 MatrixExp. MatrixPower 00 MatrixRank. 0.8 0.6 00 00 0. 0. 0 0 00 00 00 00 size 00 00 600 800 00 size 00 000 000 000 000 6000 size.0. Mean..0. Sort by absolute value 0.08 0.06 0.0 Transpose 0.0 000 000 000 000 size 00 000 000 000 size 00 00 00 000 size Mathematica. Maple 07. Sparse Data Convert matrix to vector Dot LinearSolve 0 0.0 0.0 0.00-000 000 000 0 000 size 00 0.0 0.00 0.0 0.00 0.00. - 000 000 000 0 000 size 0 0. 00 000 000 000 000 6000 size MatrixPower Mean Power 0 0.0 0.0 0.00 000 000 000 000 6000 7000 8000 size 0.0 0.0 0.00 - - size 0 000 000 0 000 000 0.0 0.00 000 000 000 0 000 size Transpose 0.0 0.0 0.00 Mathematica. Maple 07. - 000 0 000 0 000 0 000 size
Integer Linear Algebra Det Dot Eigenvalues 0 00 00 00 00 600 size 00 00 00 800 600 00 00 00 00 00 000 size 0 0 0 0 60 size.0. Power 0.0 Convert matrix to vector Inverse.0. 0. 0. 0.0 00 00 00 000 size 00 00 00 000 size 0 0 60 80 size LinearSolve 60 0 0 MatrixExp 0 0 MatrixPower 0 0 0 0 0 00 00 00 00 size 0 0 0 size 0 00 00 00 00 size MatrixRank Mean Sort 00 0 0.08 0.06 0. 0. 0 0 0.0 0.0 0.0 00 00 00 000 size 00 000 000 000 size 00 000 000 000 size Sort by absolute value Transpose.0..0. 0.0 0.0 0.0 0.0 0.0 Mathematica. Maple 07. 00 000 000 000 size 00 00 00 000 size
6 Extended-Precision Data Cholesky 8 Det Dot 6 0 0 60 80 0 size 0 0 0 00 size 0 0 60 80 size 8 Eigenvalues 0 Eigenvectors 0 Power 6 0 0 0 0 0 60 size 0 0 60 80 size 00 00 600 800 00 size 8 6 Convert matrix to vector..0..0. Inverse 0. 0. 0. 0. LinearSolve 00 00 00 000 size 0 0 60 80 size 0 0 60 80 0 size MatrixExp MatrixPower MatrixRank 0 0 0 0 0 0 0 0 60 80 0 size 0 0 60 80 size 0 0 0 00 size Mean Sort Sort by absolute value 0. 0. 80 60 0 80 60 0.0 0 0 0 0 0 000 0 000 60 000 80 000 0 000 size 000 000 000 000 size 000 000 000 000 size Transpose 8 6 Mathematica. Maple 07. 00 00 00 000 size
7 Cholesky Det Dot 00 00 00 0 8 6 0 0 60 80 0 size 0 0 0 00 size 0 0 60 80 0 size 0 Eigenvalues 00 Eigenvectors 0 Power 0 0 0 0 0 0 0 0 0 0 60 80 size 0 0 60 80 size 00 00 600 800 00 size 0.8 0.6 Convert matrix to vector 8 6 Inverse LinearSolve 0. 0. 00 00 00 000 size 0 0 60 80 size 0 0 60 80 size 00 00 00 00 0 MatrixExp 0 MatrixPower 0 MatrixRank 0 0 0 0 60 size 0 0 60 80 size 0 0 60 80 0 size 0. 0. 0. 0. Mean 0 Sort 60 0 0 0 0 Sort by absolute value 0 000 0 000 60 000 80 000 0 000 size 00 000 000 000 size 00 000 000 000 size Transpose 0. 0. 0. Mathematica. Maple 07. 0. 00 00 00 000 size
8 Scalability of Data Operations faster 600 Sort 00 Power 00 00 00 00 0 800 600 00 00 real 00 000 000 000 Fit 6 6 6 0 00 00 600 800 00 Sort by absolute value 00 00 00 00 0 real 00 000 000 000 0 000 0 000 0 000 0 000 faster Inverse Det 70 60 0 0 0..0..0. integer integer[8] 0 0 0 0 60 80 MatrixRank 0 0 00 00 00 00 600 Dot 000 000 000 00 000 000 00 integer integer[8] 0 00 00 00 00 00 00 000
9 Random Numbers Maple Mathematica 8 77 8 9 6 0 Function Evaluation
Maple Mathematica 000 Map ~ map 00 00 Sin Cos Tan ArcTan Sec Csc Cot Exp 9 BesselJ BesselK BesselY Zeta Sinh Cosh Tanh Erf Gamma ArcSinh sin(cos(x)) erf(sin(x)) e x Maple Mathematica 00 00 00 0 0 0 Sqrt ArcSin ArcCos Log Log ArcCosh ArcTanh + ( ) + + + ( ) x log(sinh(x)) Map ~ map 0 Maple Mathematica 07 8 87 7 768 89 67 6 67 0 69 89 Map ~ map 0 Sqrt Sin Cos Tan ArcSin ArcCos ArcTan Sec Csc Cot Exp Sinh Cosh Tanh Log Log Erf Gamma
Maple Mathematica 00 00 0 0 Sqrt Sin Cos Tan ArcSin ArcCos ArcTan Sec Csc Cot Exp Sinh Cosh Tanh Log Log Erf Gamma BesselJ BesselK BesselY ArcSinh ArcCosh ArcTanh Zeta + ( ) + + + ( ) sin(cos(x)) x log(sinh(x)) erf(sin(x)) e x Map ~ map Maple Mathematica 00 00 0 0 Sqrt Sin Cos Tan ArcSin ArcCos ArcTan Sec Csc Cot Exp Sinh Cosh Tanh Log Log Erf Gamma BesselJ BesselK BesselY ArcSinh ArcCosh ArcTanh Zeta + ( ) + + + ( ) sin(cos(x)) x log(sinh(x)) erf(sin(x)) e x Map ~ map
Maple Mathematica 0 0 Map ~ map Sqrt Sin Cos Tan ArcSin ArcCos ArcTan Sec Csc Cot Exp Sinh Cosh Tanh Log Log Erf Gamma BesselJ BesselK BesselY ArcSinh ArcCosh ArcTanh Zeta + ( ) + + + ( ) sin(cos(x)) x log(sinh(x)) erf(sin(x)) e x High-Precision Evaluation Maple Mathematica 0 77 66 06 0 0 0 π sin() + +sin e log() tan( + i) K () Γ erf() Exact Numeric Functions π
Function Largest test value Mathematica speed BernoulliB 6,000 s faster Fibonacci 00,000 s faster HarmonicNumber,000 Maple cannot compute for n > 00 Zeta 0,000 s faster Binomial 7 s faster GPU Performance 8 6 Dot 000 000 6000 size General Testing Methodology +
Revision Notes Appendix: Test Source Code Mathematica code $HistoryLength = 0; steps = ; repeats = ; maxvector = ^6; maxmatrix = 000; maxsparsematrix = 0 000; makedata[type_, i_] := Switch type, "RealVector", RandomReal[{-, }, i], "RealMatrix", RandomReal[, {i, i}], "ExtendedMatrix", RandomReal[, {i, i}, WorkingPrecision 0], "ExtendedMatrix00", RandomReal[, {i, i}, WorkingPrecision 00], "ExtendedVector", RandomReal[, {i}, WorkingPrecision 0], "ExtendedVector00", RandomReal[, {i}, WorkingPrecision 00], "IntegerMatrix", RandomInteger[0, {i, i}], "IntegerVector", RandomInteger[0, i], "SparseMatrix", SparseArray Table {RandomInteger[{, i}], RandomInteger[{, i}]} Random[], i^ 000, {i, i}, "SparseVector", SparseArray Table RandomInteger[{, i}] Random[], Floor i 000, {i}, "MediumSparseMatrix", SparseArray Table {RandomInteger[{, i}], RandomInteger[{, i}]} Random[], i^ 00, {i, i}, "ComplexMatrix", RandomComplex[{0, + I}, {i, i}], "ComplexVector", RandomComplex[{0, + I}, {i}], _, Print[type] ;
dreport[path_, fn_, hi_, type_] := Block {data}, Export "Mathematica" <> ToString[$VersionNumber] <> path <> ".txt", Table {Floor[t], Mean[Table[ data = makedata[type, Floor[t]]; AbsoluteTiming[fn[data]][[]], {repeats}]]} hi, t, steps, hi, hi, "Table" ; steps highprecisionreport[path_, fns_, n_] := Export["Mathematica" <> ToString[$VersionNumber] <> path <> ".txt", Map[AbsoluteTiming[N[#, n]][[]] &, fns]] NumericTest[path_, fns_list, n_, type_] := Block[{data}, Export["Mathematica" <> ToString[$VersionNumber] <> path <> ".txt", Table[data = makedata[type, n]; AbsoluteTiming[i[data]][[]], {i, fns}]]]; evaluatetest[path_, expr_hold] := Export["Mathematica" <> ToString[$VersionNumber] <> path <> ".txt", Apply[List, First /@ Map[AbsoluteTiming, expr]]] fnlist = {Sqrt, Sin, Cos, Tan, ArcSin, ArcCos, ArcTan, Sec, Csc, Cot, Exp, Sinh, Cosh, Tanh, Log, Log, Erf, Gamma, BesselJ[0, #] &, BesselK[, #] &, BesselY[, #] &, ArcSinh, ArcCosh, ArcTanh, Zeta, # Sin[Log[#] + * Sqrt[#] + ] + Sqrt[#] + Log[#] &, Sin[Cos[#]] &, # Log[Sinh[#]] &, Erf[Sin[#]] &, Exp[#^] &}; NumericTest["ElementaryFunctions", fnlist, maxvector, "RealVector"]; NumericTest["ElementaryFunctionsComplex", fnlist, maxvector, "ComplexVector"]; NumericTest "ElementaryFunctionsExtended", fnlist, maxvector, "ExtendedVector" ; NumericTest "ElementaryFunctionsExtended00", fnlist, maxvector 0, "ExtendedVector00" ; NumericTest["ElementaryFunctionsSparse", fnlist, 0 000 maxvector, "SparseVector"];
6 dreport["fourierreal", Fourier, maxvector, "RealVector"]; dreport["sortreal", Sort, maxvector, "RealVector"]; dreport["sortcustomreal", SortBy[#, Abs] &, maxvector, "RealVector"]; dreport["meanreal", Mean, maxvector, "RealVector"]; dreport["dotreal", #.# &, maxmatrix, "RealMatrix"]; dreport["inversereal", Inverse, maxmatrix, "RealMatrix"]; Quiet@ dreport["linearsolvereal", LinearSolve[#, #[[]]] &, maxmatrix, "RealMatrix"]; dreport["choleskyreal", CholeskyDecomposition[Transpose[#].#] &, maxmatrix, "RealMatrix"]; dreport["matrixpowerreal", MatrixPower[#, ] &, maxmatrix, "RealMatrix"]; dreport["detreal", Det, maxmatrix, "RealMatrix"]; dreport["transposereal", Transpose, maxmatrix, "RealMatrix"]; dreport["flattenreal", Flatten, maxmatrix, "RealMatrix"]; dreport "EigenvaluesReal", Eigenvalues, maxmatrix, "RealMatrix" ; dreport "EigenvectorsReal", Eigenvectors, maxmatrix, "RealMatrix" ; dreport["linearprogrammingreal", LinearProgramming[Abs[#[[]]], Abs[#], Abs[#[[]]], Method "CLP"] &, maxmatrix, "RealMatrix"]; dreport["elementpowerreal", # ^ &, maxmatrix, "RealMatrix"]; dreport["movingaveragereal", MovingAverage[#, ] &, maxvector, "RealVector"]; dreport "FitReal", Function[{data}, Fit[data, x, x]][transpose[{#, #}]] &;, * maxvector, "RealVector" ; dreport "MatrixExpReal", MatrixExp, maxmatrix, "RealMatrix" ; dreport["covariancereal", Covariance, maxmatrix, "RealMatrix"]; dreport["matrixrank", MatrixRank, maxmatrix, "RealMatrix"]; dreport["fouriercomplex", Fourier, maxvector, "ComplexVector"]; dreport["sortcustomcomplex", SortBy[#, Abs] &, maxvector, "ComplexVector"]; dreport["meancomplex", Mean, maxvector, "ComplexVector"]; dreport["dotcomplex", #.# &, maxmatrix, "ComplexMatrix"]; dreport["inversecomplex", Inverse, maxmatrix, "ComplexMatrix"]; dreport["linearsolvecomplex", LinearSolve[#, #[[]]] &, maxmatrix, "ComplexMatrix"]; dreport["choleskycomplex", CholeskyDecomposition[ConjugateTranspose[#].#] &, maxmatrix, "ComplexMatrix"]; dreport "MatrixPowerComplex", MatrixPower[#, ] &, maxmatrix, "ComplexMatrix" ; dreport["detcomplex", Det, maxmatrix, "ComplexMatrix"]; dreport "EigenvaluesComplex", Eigenvalues, maxmatrix, "ComplexMatrix" ; dreport "EigenvectorsComplex", Eigenvectors, maxmatrix, "ComplexMatrix" ; dreport["transposecomplex", Transpose, maxmatrix, "ComplexMatrix"]; dreport["flattencomplex", Flatten, maxmatrix, "ComplexMatrix"]; dreport["elementpowercomplex", # ^ &, maxmatrix, "ComplexMatrix"]; dreport "MatrixExpComplex", MatrixExp, maxmatrix, "ComplexMatrix" ; dreport["matrixrankcomplex", MatrixRank, maxmatrix, "ComplexMatrix"]
7 dreport["dotsparse", #.# &, maxsparsematrix, "SparseMatrix"]; Quiet@dReport "LinearSolveSparse", LinearSolve[#, #[[]]] &, maxsparsematrix, "MediumSparseMatrix" ; dreport["transposesparse", Transpose, * maxsparsematrix, "SparseMatrix"]; dreport["flattensparse", Flatten, maxsparsematrix, "SparseMatrix"]; dreport["elementpowersparse", # ^ &, maxsparsematrix, "SparseMatrix"]; dreport["meansparse", Mean, maxvector * 0, "SparseVector"]; dreport "MatrixPowerSparse", MatrixPower[#, ] &, * maxsparsematrix, "SparseMatrix" ; dreport["movingaveragesparse", MovingAverage[#, ] &, maxvector, "SparseVector"]; dreport["dotinteger", #.# &, maxmatrix, "IntegerMatrix"]; dreport "InverseInteger", Inverse, maxmatrix, "IntegerMatrix" ; dreport "LinearSolveInteger", LinearSolve[#, #[[]]] &, maxmatrix, "IntegerMatrix" ; dreport "MatrixPowerInteger", MatrixPower[#, ] &, maxmatrix, "IntegerMatrix" ; dreport["detinteger", Det, 600, "IntegerMatrix"]; dreport["transposeinteger", Transpose, maxmatrix, "IntegerMatrix"]; dreport["flatteninteger", Flatten, maxmatrix, "IntegerMatrix"]; dreport["meaninteger", Mean, maxvector, "IntegerVector"]; dreport["sortinteger", Sort, maxvector, "IntegerVector"]; dreport["sortcustominteger", SortBy[#, Abs] &, maxvector, "IntegerVector"]; dreport "EigenvaluesInteger", Eigenvalues, maxmatrix 0, "IntegerMatrix" ; dreport["elementpowerinteger", # ^ &, maxmatrix, "IntegerMatrix"]; dreport["matrixexpinteger", MatrixExp, 0, "IntegerMatrix"]; dreport["matrixrankinteger", MatrixRank, maxmatrix, "IntegerMatrix"]; dreport "DotExtended", #.# &, maxmatrix, "ExtendedMatrix" ; dreport "InverseExtended", Inverse, maxmatrix, "ExtendedMatrix" ; dreport "CholeskyExtended", CholeskyDecomposition[Transpose[#].#] &, maxmatrix 0, "ExtendedMatrix" ; dreport["eigenvaluesextended", Eigenvalues, 60, "ExtendedMatrix"]; dreport["eigenvectorsextended", Eigenvectors, 80, "ExtendedMatrix"]; dreport "ElementPowerExtended", #^ &, maxmatrix, "ExtendedMatrix" ; dreport "LinearSolveExtended", LinearSolve[#, #[[]]] &, maxmatrix 0, "ExtendedMatrix" ; dreport "DetExtended", Det, maxmatrix, "ExtendedMatrix" ; dreport["transposeextended", Transpose, maxmatrix, "ExtendedMatrix"]; dreport["flattenextended", Flatten, maxmatrix, "ExtendedMatrix"]; (*dreport "FourierExtended",Fourier,maxVector 0,"ExtendedVector" ; Maple converts to floats*) dreport "MeanExtended", Mean, maxvector, "ExtendedVector" ; dreport["sortextended", Sort, * maxvector, "ExtendedVector"]; dreport["sortcustomextended", SortBy[#, Abs] &, * maxvector, "ExtendedVector"]; dreport "EigenvectorsExtended", Eigenvectors, maxmatrix, "ExtendedMatrix" ; dreport "MatrixPowerExtended", MatrixPower[#, ] &, maxmatrix, "ExtendedMatrix" ; dreport["matrixexpextended", MatrixExp, 0, "ExtendedMatrix"]; dreport "MatrixRankExtended", MatrixRank, maxmatrix, "ExtendedMatrix" ;
8 dreport "DotExtended00", #.# &, maxmatrix 0, "ExtendedMatrix00" ; dreport "InverseExtended00", Inverse, maxmatrix, "ExtendedMatrix00" ; dreport "CholeskyExtended00", CholeskyDecomposition[Transpose[#].#] &, maxmatrix 0, "ExtendedMatrix00" ; dreport["eigenvaluesextended00", Eigenvalues, 80, "ExtendedMatrix00"]; dreport["eigenvectorsextended00", Eigenvectors, 80, "ExtendedMatrix00"]; dreport "ElementPowerExtended00", #^ &, maxmatrix, "ExtendedMatrix00" ; dreport "LinearSolveExtended00", LinearSolve[#, #[[]]] &, maxmatrix, "ExtendedMatrix00" ; dreport "DetExtended00", Det, maxmatrix, "ExtendedMatrix00" ; dreport["transposeextended00", Transpose, maxmatrix, "ExtendedMatrix00"]; dreport["flattenextended00", Flatten, maxmatrix, "ExtendedMatrix00"]; dreport "MeanExtended00", Mean, maxvector, "ExtendedVector00" ; dreport["sortextended00", Sort, maxvector, "ExtendedVector00"]; dreport["sortcustomextended00", SortBy[#, Abs] &, maxvector, "ExtendedVector00"]; dreport "MatrixPowerExtended00", MatrixPower[#, ] &, maxmatrix, "ExtendedMatrix00" ; dreport["matrixexpextended00", MatrixExp, 60, "ExtendedMatrix00"]; dreport "MatrixRankExtended00", MatrixRank, maxmatrix 0, "ExtendedMatrix00" evaluatetest["exactfunctions", Hold[ Table[BernoulliB[i], {i, 6000}], Table[Fibonacci[i], {i, 0, 00 000, 00}], (*Table[HarmonicNumber[i],{i,000}], Maple fails*) Table[Zeta[i], {i, 0, 0 000, 000}], Table[Binomial[i^, i], {i,, 000}] ]]; evaluatetest["randomnumbers", Hold[ makedata["realmatrix", 000], makedata["realmatrix", 000], makedata["integermatrix", 000], makedata["integermatrix", 000], makedata["extendedmatrix", 000], makedata["extendedmatrix00", 000], RandomVariate[NormalDistribution[0, ], ^ 7], RandomVariate[PoissonDistribution[], ^ 7], RandomVariate[BinomialDistribution[, 0.], ^ 7] ]]; highprecisionreport "ManyDigits", Pi, Sqrt[], Sin[] +, Exp[], Log[], Tan[ + I], 000 000 ; + Sin[] highprecisionreport "FewerDigits", BesselK[, ], Gamma, Erf[], 000 ;
Maple 9
0