File indexing completed on 2024-04-06 12:31:44
0001 template <typename T, int N>
0002 std::pair<typename RKOneCashKarpStep<T, N>::Vector, T> RKOneCashKarpStep<T, N>::operator()(
0003 Scalar x, const Vector& v, const RKDerivative<T, N>& deriv, const RKDistance<T, N>& dist, Scalar step) {
0004 const Scalar a2 = 0.2, a3 = 0.3, a4 = 0.6, a5 = 1., a6 = 7. / 8.;
0005 const Scalar b21 = 0.2;
0006 const Scalar b31 = 3. / 40., b32 = 9. / 40.;
0007 const Scalar b41 = 0.3, b42 = -0.9, b43 = 1.2;
0008 const Scalar b51 = -11. / 54., b52 = 5. / 2., b53 = -70. / 27., b54 = 35. / 27.;
0009 const Scalar b61 = 1631. / 55296., b62 = 175. / 512., b63 = 575. / 13824., b64 = 44275. / 110592., b65 = 253. / 4096.;
0010 const Scalar c1 = 37. / 378., c3 = 250. / 621., c4 = 125. / 594., c6 = 512. / 1771.;
0011
0012 const Scalar d1 = 2825. / 27648., d3 = 18575. / 48384., d4 = 13525. / 55296., d5 = 277. / 14336., d6 = 0.25;
0013
0014
0015 Vector k1 = step * deriv(x, v);
0016 Vector k2 = step * deriv(x + a2 * step, v + b21 * k1);
0017 Vector k3 = step * deriv(x + a3 * step, v + b31 * k1 + b32 * k2);
0018 Vector k4 = step * deriv(x + a4 * step, v + b41 * k1 + b42 * k2 + b43 * k3);
0019 Vector k5 = step * deriv(x + a5 * step, v + b51 * k1 + b52 * k2 + b53 * k3 + b54 * k4);
0020 Vector k6 = step * deriv(x + a6 * step, v + b61 * k1 + b62 * k2 + b63 * k3 + b64 * k4 + b65 * k5);
0021
0022 Vector r5 = v + c1 * k1 + c3 * k3 + c4 * k4 + c6 * k6;
0023 Vector r4 = v + d1 * k1 + d3 * k3 + d4 * k4 + d5 * k5 + d6 * k6;
0024 return std::pair<Vector, T>(r5, dist(r4, r5, x + step));
0025 }
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039