tode.h - numeric - C++ library with numerical algorithms | |
git clone git://src.adamsgaard.dk/numeric | |
Log | |
Files | |
Refs | |
LICENSE | |
--- | |
tode.h (2393B) | |
--- | |
1 // Make sure header is only included once | |
2 #ifndef ODE_H_ | |
3 #define ODE_H_ | |
4 | |
5 #include <vector> | |
6 #include <complex> | |
7 #include "typedefs.h" | |
8 | |
9 // ODE class | |
10 class ODE { | |
11 | |
12 // Values and functions only accessible from the class internally | |
13 private: | |
14 | |
15 // System of ordinary differential equations to solve | |
16 std::vector<std::complex<Floattype> > | |
17 (*f)(const std::complex<Floattype> x, | |
18 const std::vector<std::complex<Floattype> > &y); | |
19 | |
20 // Points to be evaluated | |
21 std::vector<std::complex<Floattype> > x_list; | |
22 | |
23 // Limits of range to evaluate | |
24 const std::complex<Floattype> a; // Lower | |
25 const std::complex<Floattype> b; // Upper | |
26 | |
27 // Step size | |
28 std::complex<Floattype> h; | |
29 | |
30 // Results stored in 2D: vector of vectors | |
31 std::vector<std::vector<std::complex<Floattype> > > y_list; | |
32 | |
33 // Maximum number of steps to evaluate, defined by y size | |
34 const Inttype n_max; | |
35 | |
36 // Accuracy requirement values | |
37 const Floattype delta; // Absolute | |
38 const Floattype epsilon; // Relative | |
39 | |
40 // Tolerance estimator | |
41 Floattype tau(const std::vector<std::complex<Floattype> > &y, | |
42 const std::complex<Floattype> h); | |
43 | |
44 // Runge-Kutta mid-point stepper prototype | |
45 void rkstep12(const std::complex<Floattype> x0, | |
46 const std::vector<std::complex<Floattype> > &y0, | |
47 std::vector<std::complex<Floattype> > &y1, | |
48 std::vector<std::complex<Floattype> > &dy); | |
49 | |
50 // Runge-Kutta driver function parameters | |
51 const Floattype power; | |
52 const Floattype safety; | |
53 | |
54 // Runge-Kutta driver prototype | |
55 void rkdriver(); | |
56 | |
57 | |
58 // Values and functions accessible from the outside | |
59 public: | |
60 | |
61 // Constructor, some parameters with default values | |
62 ODE(std::vector<std::complex<Floattype> > | |
63 (*f_in)(const std::complex<Floattype> x, | |
64 const std::vector<std::complex<Floattype> > &y), | |
65 const std::vector<std::complex<Floattype> > y_start, | |
66 const std::complex<Floattype> a_in, | |
67 const std::complex<Floattype> b_in, | |
68 const Floattype h_start = 0.01f, | |
69 const Inttype max_steps = 1e4, | |
70 const Floattype delta_in = 1e-3f, | |
71 const Floattype epsilon_in = 1e-3f, | |
72 const Floattype power_in = 0.25f, | |
73 const Floattype safety_in = 0.95f | |
74 ); | |
75 | |
76 // Return the number of steps taken | |
77 Inttype steps(); | |
78 | |
79 // Print the x- and y-values to stdout | |
80 void print(); | |
81 | |
82 // Write the x- and y-values to file | |
83 void write(const char* filename); | |
84 | |
85 }; | |
86 | |
87 #endif |