5 changed files with 94 additions and 1 deletions
@ -0,0 +1,90 @@ |
|||
(** |
|||
IF# Notebook |
|||
============ |
|||
|
|||
[iPython](http://ipython.org/) provides a rich browser-based interactive notebook with support for code, text, mathematical expressions, |
|||
inline plots and other rich media. [IfSharp](https://github.com/BayardRock/IfSharp), developed by Bayard Rock, is an F# profile |
|||
for iPython with IntelliSense and embedded FSharp.Charting. Thanks to its NuGet support it can load other packages like Math.NET Numerics on demand. |
|||
|
|||
 |
|||
|
|||
|
|||
Installing IF# Notebook |
|||
----------------------- |
|||
|
|||
Follow the instructions at [IfSharp/Installation](http://bayardrock.github.io/IfSharp/installation.html). |
|||
|
|||
Essentially: |
|||
|
|||
1. Install [Anaconda](http://continuum.io/downloads) |
|||
2. In a shell, run |
|||
|
|||
conda update conda |
|||
conda update ipython |
|||
|
|||
3. Install [IfSharp](https://github.com/BayardRock/IfSharp/releases). |
|||
|
|||
*Note that while IfSharp does have support for custom display printers in the repository, |
|||
the v2.0-Beta release does not include this yet. Until a newer release is available you may have to compile |
|||
IfSharp yourself from [master](https://github.com/BayardRock/IfSharp) and replace the installed binaries.* |
|||
|
|||
|
|||
Display Printers for Matrices and Vectors |
|||
----------------------------------------- |
|||
|
|||
By itself IfSharp does not know how to display matrices and vectors in a nice way, but we can tell it how to do so by providing our own display printers for them. |
|||
|
|||
 |
|||
|
|||
Run the following snipped once within a notebook to render matrices and vectors with LaTeX/MathJax, and adapt it to your needs e.g. if you want it to show more rows. |
|||
Alternatively you can add it to an Includes.fsx file within the IfSharp installation to make it always available. |
|||
|
|||
open MathNet.Numerics.LinearAlgebra |
|||
|
|||
let inline (|Float|_|) (v:obj) = |
|||
if v :? float then Some(v :?> float) else None |
|||
let inline (|Float32|_|) (v:obj) = |
|||
if v :? float32 then Some(v :?> float32) else None |
|||
let inline (|PositiveInfinity|_|) (v: ^T) = |
|||
if (^T : (static member IsPositiveInfinity: 'T -> bool) (v)) |
|||
then Some PositiveInfinity else None |
|||
let inline (|NegativeInfinity|_|) (v: ^T) = |
|||
if (^T : (static member IsNegativeInfinity: 'T -> bool) (v)) |
|||
then Some NegativeInfinity else None |
|||
let inline (|NaN|_|) (v: ^T) = |
|||
if (^T : (static member IsNaN: 'T -> bool) (v)) |
|||
then Some NaN else None |
|||
|
|||
let inline formatMathValue (floatFormat:string) = function |
|||
| PositiveInfinity -> "\\infty" |
|||
| NegativeInfinity -> "-\\infty" |
|||
| NaN -> "\\times" |
|||
| Float v -> v.ToString(floatFormat) |
|||
| Float32 v -> v.ToString(floatFormat) |
|||
| v -> v.ToString() |
|||
|
|||
let inline formatMatrix (matrix: Matrix<'T>) = |
|||
String.concat Environment.NewLine |
|||
[ "\\begin{bmatrix}" |
|||
matrix.ToMatrixString(10,4,7,2,"\\cdots","\\vdots","\\ddots", |
|||
" & ", "\\\\ " + Environment.NewLine, (fun x -> formatMathValue "G4" x)) |
|||
"\\end{bmatrix}" ] |
|||
|
|||
let inline formatVector (vector: Vector<'T>) = |
|||
String.concat Environment.NewLine |
|||
[ "\\begin{bmatrix}" |
|||
vector.ToVectorString(12, 80, "\\vdots", " & ", "\\\\ " + Environment.NewLine, |
|||
(fun x -> formatMathValue "G4" x)) |
|||
"\\end{bmatrix}" ] |
|||
|
|||
App.AddDisplayPrinter (fun (x:Matrix<float>) -> |
|||
{ ContentType = "text/latex"; Data = formatMatrix x }) |
|||
App.AddDisplayPrinter (fun (x:Matrix<float32>) -> |
|||
{ ContentType = "text/latex"; Data = formatMatrix x }) |
|||
App.AddDisplayPrinter (fun (x:Vector<float>) -> |
|||
{ ContentType = "text/latex"; Data = formatVector x }) |
|||
App.AddDisplayPrinter (fun (x:Vector<float32>) -> |
|||
{ ContentType = "text/latex"; Data = formatVector x }) |
|||
|
|||
|
|||
*) |
|||
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 55 KiB |
Loading…
Reference in new issue