diff options
Diffstat (limited to 'packages/sundials/src/Main.hs')
-rw-r--r-- | packages/sundials/src/Main.hs | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/packages/sundials/src/Main.hs b/packages/sundials/src/Main.hs index 5e51372..895e610 100644 --- a/packages/sundials/src/Main.hs +++ b/packages/sundials/src/Main.hs | |||
@@ -11,6 +11,9 @@ import Diagrams.Backend.Rasterific | |||
11 | import Control.Lens | 11 | import Control.Lens |
12 | import Data.List (zip4) | 12 | import Data.List (zip4) |
13 | 13 | ||
14 | import Text.PrettyPrint.HughesPJClass | ||
15 | import Data.List (intercalate) | ||
16 | |||
14 | 17 | ||
15 | brusselator _t x = [ a - (w + 1) * u + v * u^2 | 18 | brusselator _t x = [ a - (w + 1) * u + v * u^2 |
16 | , w * u - v * u^2 | 19 | , w * u - v * u^2 |
@@ -43,8 +46,37 @@ kSaxis :: [(Double, Double)] -> P.Axis B D.V2 Double | |||
43 | kSaxis xs = P.r2Axis &~ do | 46 | kSaxis xs = P.r2Axis &~ do |
44 | P.linePlot' xs | 47 | P.linePlot' xs |
45 | 48 | ||
49 | butcherTableauTex :: (Show a, Element a) => Matrix a -> String | ||
50 | butcherTableauTex m = render $ | ||
51 | vcat [ text ("\n\\begin{array}{c|" ++ (concat $ replicate n "c") ++ "}") | ||
52 | , us | ||
53 | , text "\\end{array}" | ||
54 | ] | ||
55 | where | ||
56 | n = rows m | ||
57 | rs = toLists m | ||
58 | ss = map (\r -> intercalate " & " $ map show r) rs | ||
59 | ts = zipWith (\n r -> "c_" ++ show n ++ " & " ++ r) [1..n] ss | ||
60 | us = vcat $ map (\r -> text r <+> text "\\\\") ts | ||
61 | |||
46 | main :: IO () | 62 | main :: IO () |
47 | main = do | 63 | main = do |
64 | -- $$ | ||
65 | -- \begin{array}{c|cccc} | ||
66 | -- c_1 & a_{11} & a_{12}& \dots & a_{1s}\\ | ||
67 | -- c_2 & a_{21} & a_{22}& \dots & a_{2s}\\ | ||
68 | -- \vdots & \vdots & \vdots& \ddots& \vdots\\ | ||
69 | -- c_s & a_{s1} & a_{s2}& \dots & a_{ss} \\ | ||
70 | -- \hline | ||
71 | -- & b_1 & b_2 & \dots & b_s\\ | ||
72 | -- & b^*_1 & b^*_2 & \dots & b^*_s\\ | ||
73 | -- \end{array} | ||
74 | -- $$ | ||
75 | |||
76 | let res = btGet | ||
77 | putStrLn $ show res | ||
78 | putStrLn $ butcherTableauTex res | ||
79 | |||
48 | let res = odeSolve brusselator [1.2, 3.1, 3.0] (fromList [0.0, 0.1 .. 10.0]) | 80 | let res = odeSolve brusselator [1.2, 3.1, 3.0] (fromList [0.0, 0.1 .. 10.0]) |
49 | putStrLn $ show res | 81 | putStrLn $ show res |
50 | renderRasterific "diagrams/brusselator.png" | 82 | renderRasterific "diagrams/brusselator.png" |