summaryrefslogtreecommitdiff
path: root/examples/ButcherTableau.hs
diff options
context:
space:
mode:
Diffstat (limited to 'examples/ButcherTableau.hs')
-rw-r--r--examples/ButcherTableau.hs47
1 files changed, 47 insertions, 0 deletions
diff --git a/examples/ButcherTableau.hs b/examples/ButcherTableau.hs
new file mode 100644
index 0000000..e667ef1
--- /dev/null
+++ b/examples/ButcherTableau.hs
@@ -0,0 +1,47 @@
1{-# OPTIONS_GHC -Wall #-}
2
3import Numeric.Sundials.ARKode.ODE
4import Numeric.LinearAlgebra
5
6import Data.List (intercalate)
7
8import Text.PrettyPrint.HughesPJClass
9
10
11butcherTableauTex :: ButcherTable -> String
12butcherTableauTex (ButcherTable m c b b2) =
13 render $
14 vcat [ text ("\n\\begin{array}{c|" ++ (concat $ replicate n "c") ++ "}")
15 , us
16 , text "\\hline"
17 , text bs <+> text "\\\\"
18 , text b2s <+> text "\\\\"
19 , text "\\end{array}"
20 ]
21 where
22 n = rows m
23 rs = toLists m
24 ss = map (\r -> intercalate " & " $ map show r) rs
25 ts = zipWith (\i r -> show i ++ " & " ++ r) (toList c) ss
26 us = vcat $ map (\r -> text r <+> text "\\\\") ts
27 bs = " & " ++ (intercalate " & " $ map show $ toList b)
28 b2s = " & " ++ (intercalate " & " $ map show $ toList b2)
29
30main :: IO ()
31main = do
32
33 let res = butcherTable (SDIRK_2_1_2 undefined)
34 putStrLn $ show res
35 putStrLn $ butcherTableauTex res
36
37 let resA = butcherTable (KVAERNO_4_2_3 undefined)
38 putStrLn $ show resA
39 putStrLn $ butcherTableauTex resA
40
41 let resB = butcherTable (SDIRK_5_3_4 undefined)
42 putStrLn $ show resB
43 putStrLn $ butcherTableauTex resB
44
45 let resC = butcherTable (FEHLBERG_6_4_5 undefined)
46 putStrLn $ show resC
47 putStrLn $ butcherTableauTex resC