diff --git a/src/FSharpExamples/Apply.fs b/src/FSharpExamples/Apply.fs
new file mode 100644
index 00000000..a887d434
--- /dev/null
+++ b/src/FSharpExamples/Apply.fs
@@ -0,0 +1,92 @@
+//
+// Math.NET Numerics, part of the Math.NET Project
+// http://mathnet.opensourcedotnet.info
+//
+// Copyright (c) 2009 Math.NET
+//
+// Permission is hereby granted, free of charge, to any person
+// obtaining a copy of this software and associated documentation
+// files (the "Software"), to deal in the Software without
+// restriction, including without limitation the rights to use,
+// copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following
+// conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+// OTHER DEALINGS IN THE SOFTWARE.
+//
+
+open MathNet.Numerics
+open MathNet.Numerics.LinearAlgebra.Double
+
+/// Flag to specify wether we want pretty printing or tab separated output.
+let prettyPrint = false
+
+/// The size of the vector we want to map things for.
+let N = 1000000
+/// The number of times we repeat a call.
+let T = 10
+/// The list of all functions we want to test.
+let FunctionList : (string * (float -> float) * (float -> float)) [] =
+ [| ("Cosine", cos, System.Math.Cos);
+ ("Sine", sin, System.Math.Sin);
+ ("Tangent", tan, System.Math.Tan);
+ ("Inverse Cosine", acos, System.Math.Acos);
+ ("Inverse Sine", asin, System.Math.Asin);
+ ("Inverse Tangent", atan, System.Math.Atan);
+ ("Hyperbolic Cosine", cosh, System.Math.Cosh);
+ ("Hyperbolic Sine", sinh, System.Math.Sinh);
+ ("Hyperbolic Tangent", tanh, System.Math.Tanh);
+ ("Abs", abs, System.Math.Abs);
+ ("Exp", exp, System.Math.Exp);
+ ("Log", log, System.Math.Log);
+ ("Sqrt", sqrt, System.Math.Sqrt);
+ ("Error Function", SpecialFunctions.Erf, SpecialFunctions.Erf);
+ ("Error Function Complement", SpecialFunctions.Erfc, SpecialFunctions.Erfc);
+ ("Inverse Error Function", SpecialFunctions.ErfInv, SpecialFunctions.ErfInv);
+ ("Inverse Error Function Complement", SpecialFunctions.ErfcInv, SpecialFunctions.ErfcInv) |]
+
+/// A vector with random entries.
+let w =
+ let rnd = new Random.MersenneTwister()
+ (new DenseVector(Array.init N (fun _ -> rnd.NextDouble() * 10.0))) :> Vector
+
+/// A stopwatch to time the execution.
+let sw = new System.Diagnostics.Stopwatch()
+
+
+for (name, fs, dotnet) in FunctionList do
+ if prettyPrint then printfn "Running %s on an %d dimensional vector for %d iterations:" name N T
+ else printf "%s" name
+
+ /// Perform the standard F# map function.
+ do
+ let v = w.Clone()
+ sw.Start()
+ for t in 1 .. T do Vector.mapInPlace fs v
+ sw.Stop()
+ if prettyPrint then printfn "\tVector.map (F#): %d milliseconds." sw.ElapsedMilliseconds
+ else printf "\t%d" sw.ElapsedMilliseconds
+ sw.Reset()
+ (*
+ /// Perform the Apply.Map function.
+ do
+ let v = w.Clone()
+ sw.Start()
+ for t in 1 .. T do v.Map(fun x -> dotnet x)
+ sw.Stop()
+ if prettyPrint then printfn "\tApply.Map (MKL): %d milliseconds." sw.ElapsedMilliseconds
+ else printf "\t%d" sw.ElapsedMilliseconds
+ sw.Reset()*)
+
+ printfn ""
\ No newline at end of file
diff --git a/src/FSharpExamples/DenseVector.fs b/src/FSharpExamples/DenseVector.fs
index 12fdbd9e..8a25fe46 100644
--- a/src/FSharpExamples/DenseVector.fs
+++ b/src/FSharpExamples/DenseVector.fs
@@ -1,4 +1,32 @@
-open MathNet.Numerics.FSharp
+//
+// Math.NET Numerics, part of the Math.NET Project
+// http://mathnet.opensourcedotnet.info
+//
+// Copyright (c) 2009 Math.NET
+//
+// Permission is hereby granted, free of charge, to any person
+// obtaining a copy of this software and associated documentation
+// files (the "Software"), to deal in the Software without
+// restriction, including without limitation the rights to use,
+// copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following
+// conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+// OTHER DEALINGS IN THE SOFTWARE.
+//
+
+open MathNet.Numerics.FSharp
open MathNet.Numerics.LinearAlgebra
// Create a new 100 dimensional dense vector.
diff --git a/src/FSharpExamples/FSharpExamples.fsproj b/src/FSharpExamples/FSharpExamples.fsproj
index e264d823..19695e9d 100644
--- a/src/FSharpExamples/FSharpExamples.fsproj
+++ b/src/FSharpExamples/FSharpExamples.fsproj
@@ -51,6 +51,7 @@
+