Skip to main content
Log in

Three-stage Hermite–Birkhoff solver of order 8 and 9 with variable step size for stiff ODEs

  • Published:
Calcolo Aims and scope Submit manuscript

Abstract

Variable-step (VS) \(3\)-stage Hermite–Birkhoff (HB) methods HB\((p=k+1)\) of order \(p=8\) and 9 are constructed as a combination of linear \(k\)-step methods of order \((p-2)\) and a diagonally implicit one-step \(3\)-stage Runge–Kutta method of order 3 (DIRK3) for solving stiff ordinary differential equations. Forcing a Taylor expansion of the numerical solution to agree with an expansion of the true solution leads to multistep and Runge–Kutta type order conditions which are reorganized into linear confluent Vandermonde-type systems. This approach allows us to develop A-stable methods of order up to 5 and A(\(\alpha \))-stable methods of order up to 10. Fast algorithms are developed for solving these systems in O\((p^2)\) operations to obtain HB interpolation polynomials in terms of generalized Lagrange basis functions. The stepsize of these methods are controlled by a local error estimator. When programmed in C++, HB(\(p\)) of order \(p=8\) and 9 compare favorably with existing Cash modified extended backward differentiation formulae of order 7 and 8, MEBDF(7–8), in solving problems often used to test higher order stiff ODE solvers on the basis of CPU time and error at the endpoint of the integration interval.

This is a preview of subscription content, log in via an institution to check access.

Access this article

Price excludes VAT (USA)
Tax calculation will be finalised during checkout.

Instant access to the full article PDF.

Fig. 1
Fig. 2

Similar content being viewed by others

References

  1. Alexander, R.: Diagonally implicit Runge–Kutta methods for stiff ODEs. SIAM J. Numer. Anal. 14, 1006–1021 (1977)

    Article  MathSciNet  Google Scholar 

  2. Björck, A., Elfving, T.: Algorithms for confluent Vandermonde systems. Numer. Math. 21, 130–137 (1973)

    Article  MATH  MathSciNet  Google Scholar 

  3. Björck, A., Pereyra, V.: Solution of Vandermonde systems of equations. Math. Comput. 24, 893–903 (1970)

    Article  Google Scholar 

  4. Butcher, J.C., Chen, D.J.L.: A new type of singly-implicit Runge–Kutta method. Appl. Numer. Math. 34, 179–188 (2000)

    Article  MATH  MathSciNet  Google Scholar 

  5. Cash, J.R.: On the integration of stiff systems of ODEs using extended backward differentiation formula. Numer. Math. 34, 235–246 (1980)

    Article  MATH  MathSciNet  Google Scholar 

  6. Cash, J.R.: The integration of stiff initial value problems in ODEs using modified extended backward differentiation formula. Comput. Math. Appl. 9, 645–657 (1983)

    Article  MATH  MathSciNet  Google Scholar 

  7. Cash, J.R., Considine, S.: An MEBDF code for stiff initial value problems. ACM Trans. Math. Softw. 18, 142–160 (1992)

    Article  MATH  MathSciNet  Google Scholar 

  8. Cash, J.R.: Modified extended backward differentiation formulae for the numerical solution of stiff initial value problems in ODEs and DAEs. J. Comput. Appl. Math. 125, 117–130 (2000)

    Article  MATH  MathSciNet  Google Scholar 

  9. Ebadi, M., Gokhale, M.Y.: Hybrid BDF methods for the numerical solutions of ordinary differential equations. Numer. Algorithms 55, 1–17 (2010). doi:10.1007/s11075-009-9354-4

    Article  MATH  MathSciNet  Google Scholar 

  10. Enright, W.H., Pryce, J.D.: Two Fortran packages for assessing initial value methods. ACM Trans. Math. Softw. 13, 1–27 (1987)

    Article  MATH  Google Scholar 

  11. Field, J., Noyes, R.M.: Oscillations in chemical systems. IV: Limit cycle behavior in a model of a real chemical reaction. J. Chem. Phys. 60, 1877–1884 (1974)

    Article  MATH  Google Scholar 

  12. Galimberti, G., Pereyra, V.: Solving confluent Vandermonde systems of Hermite type. Numer. Math. 18, 44–60 (1971)

    Article  MathSciNet  Google Scholar 

  13. Gear, C.W.: Numerical Initial Value Problems in Ordinary Differential Equations. Prentice-Hall, Englewood Cliffs (1971)

    MATH  Google Scholar 

  14. Hairer, E., Wanner, G.: Solving Ordinary Differential Equations II. Stiff and Differential-Algebraic Problems. corr. sec. print, Springer, Berlin (2002)

  15. Hojjati, G., Rahimi, M.Y., Hosseini, S.M.: A-EBDF: an adaptive method for numerical solution of stiff systems of ODEs. Math. Comput. Simul. 66, 33–41 (2004)

    Article  MATH  Google Scholar 

  16. Hojjati, G., Rahimi, M.Y., Hosseini, S.M.: New second derivative multistep methods for stiff systems. Appl. Math. Model. 30, 466–476 (2006)

    Article  MATH  Google Scholar 

  17. Hull, T.E., Enright, W.H., Fellen, B.M., Sedgwick, A.E.: Comparing numerical methods for ordinary differential equations. SIAM J. Numer. Anal. 9, 603–637 (1972)

    Article  MATH  MathSciNet  Google Scholar 

  18. Krogh, F.T.: Changing stepsize in the integration of differential equations using modified divided differences. In: Bettis, D.G. (ed.) Proceedings of the Conference on the Numerical Solution of Ordinary Differential Equations, University of Texas at Austin 1972. Lecture Notes in Mathematics, vol. 362, pp. 22–71. Springer, Berlin (1974)

  19. Lambert, J.D.: Numerical Methods for Ordinary Differential Systems. Wiley, Chichester (1991)

    MATH  Google Scholar 

  20. Nguyen-Ba, T., Kengne, E., Vaillancourt, R.: One-step 4-stage Hermite–Birkhoff–Taylor ODE solver of order 12. Can. Appl. Math. Q. 16(1), 77–94 (2008)

    MATH  MathSciNet  Google Scholar 

  21. Nordsieck, A.: On numerical integration of ordinary differential equations. Math. Comput. 16, 22–49 (1962)

    Article  MATH  MathSciNet  Google Scholar 

  22. Petzold, L.R.: A description of DASSL: a differential/algebraic system solver. In: Proceedings of IMACS World Congress, Montréal, Canada (1982)

  23. Robertson, H.H.: The solution of a set of reaction rate equations. In: Walsh, J. (ed.) Numerical Analysis: An Introduction, pp. 178–182. Academic Press, London (1966)

    Google Scholar 

  24. Sharp, P.W.: Numerical comparison of explicit Runge–Kutta pairs of orders four through eight. ACM Trans. Math. Softw. 17, 387–409 (1991)

    Article  MATH  Google Scholar 

Download references

Author information

Authors and Affiliations

Authors

Corresponding author

Correspondence to Truong Nguyen-Ba.

Additional information

This work was supported in part by the Natural Sciences and Engineering Research Council of Canada.

Appendices

Appendix A: Algorithms

Algorithm 1

This algorithm constructs \(L_k(i,i-1)\) entries of lower bidiagonal matrices \(L_k\) (applied to \({{\mathrm{\hbox {IF}}}}\), \({{\mathrm{\hbox {P}}}}_2\) and \({{\mathrm{\hbox {P}}}}_3\)) as functions of \(\eta _j\), \(j=2,3,\ldots ,p-1\).

  • For \(k=2:k_{\text {end}}\), do the following iteration:

    • For \(i=i_0:-1:k+1\), do the following two steps:

      • Step (1)   \(L_k(i,i-1)=-M^\ell (i,k)/M^\ell (i-1,k)\).

      • Step (2)   For \(j=k:m\), compute:

        $$\begin{aligned} M^\ell (i,j) = M^\ell (i,j)+M^\ell (i-1,j)L_k(i,i-1), \end{aligned}$$

    where \(k_{\text {end}} =m-2, i_{0}= m \) for \({{\mathrm{\hbox {IF}}}}\), \(k_{\text {end}} =m-1, i_{0}= m \) for \({{\mathrm{\hbox {P}}}}_2\) and \(k_{\text {end}} =m-2, i_{0}= m-1 \) for \({{\mathrm{\hbox {P}}}}_3\).

Algorithm 2

This algorithm constructs diagonal entries \(U_k(j,j)\) of upper bidiagonal matrices \(U_k\) applied to \({{\mathrm{\hbox {IF}}}}\) as functions of \(\eta _j\), \(j=2,3,\ldots ,p-1\).

  • For \(k=1:m_1-3\), do the following iteration:

    • For \(j=m_1-2:-1:k+1\), do the following two steps:

      • Step (1)   \(U_k(j,j)=1/[M^1(k+1,j)-M^1(k+1,j-1)]\).

      • Step (2)   for \(i=k:j\), compute

        $$\begin{aligned} M^1(i,j) = (M^1(i,j)-M^1(i,j-1))U_k(j,j). \end{aligned}$$

Algorithm 3

This algorithm constructs diagonal entries \(U_k(j,j)\) of upper bidiagonal matrices \(U_k\) applied to \({{\mathrm{\hbox {P}}}}_2\) as functions of \(\eta _j\), \(j=2,3,\ldots ,p-1\).

  • For \(k=1:m_2-1\), do the following iteration:

    • For \(j=m_2:-1:k+1\), do the following two steps:

      • Step (1)   \(U_k(j,j)=1/[M^2(k+1,j)-M^2(k+1,j-1)]\).

      • Step (2)   for \(i=k:j\), compute

        $$\begin{aligned} M^2(i,j) = (M^2(i,j)-M^2(i,j-1))U_k(j,j). \end{aligned}$$

Algorithm 4

This algorithm constructs diagonal entries \(U_k(j,j)\) of upper triangular matrices \(U_k\) applied to \({{\mathrm{\hbox {P}}}}_3\) as functions of \(\eta _j\), \(j=2,3,\ldots ,p-1\).

  • For \(k=1\), do the following iteration:

    • For \(j=m_3-2:-1:k+1\), do the following two steps:

      • Step (1)   \(U_k(j,j)=1/[M^3(k+1,j)-M^3(k+1,j-1)]\).

      • Step (2)   for \(i=k:j\), compute

        $$\begin{aligned} M^3(i,j) = (M^3(i,j)-M^3(i,j-1))U_k(j,j). \end{aligned}$$
  • For \(k=2:m_3-2\), do the following iteration:

    • For \(j=m_3-1\), do the following two steps:

      • Step (1)   \(U_k(j,j)=1/[M^3(k+1,j)-M^3(k+1,j-k)]\).

      • Step (2)   for \(i=k:j\), compute

        $$\begin{aligned} M^3(i,j) = (M^3(i,j)-M^3(i,j-k ))U_k(j,j). \end{aligned}$$
    • For \(j=m_3-2:-1:k+1\), do the following two steps:

      • Step (1)   \(U_k(j,j)=1/[M^3(k+1,j)-M^3(k+1,j-1)]\).

      • Step (2)   for \(i=k:j\), compute

        $$\begin{aligned} M^3(i,j) = (M^3(i,j)-M^3(i,j-1))U_k(j,j). \end{aligned}$$

Algorithm 5

This algorithm solves the systems for \({{\mathrm{\hbox {IF}}}}\) in \(O(m^2)\) operations.

Given \([\eta _2, \eta _3,\ldots , \eta _{p-1} ]\) and \({\varvec{r}}=r(1:m)\), the following algorithm overwrites \({\varvec{r}}\) with the solution \({\varvec{u}}=u(1:m)\) of the system \(M{\varvec{u}}={\varvec{r}}\).

  • Step (1) The following iteration overwrites \({\varvec{r}}=r(1:m)\) with \(L_{m-2} L_{m-3} \cdots \) \(L_2 {\varvec{r}}\):

    • for \(k=2,3,\ldots , m-2\), compute

      $$\begin{aligned} r(i) =r(i)+r(i-1)L_k(i,i-1),\qquad i=m, m-1,\ldots ,k+1. \end{aligned}$$
  • Step (2) This step computes the coefficients \(G_{m-1}(i)\), \(i=1,2,\ldots ,m\) used to form the two matrices \(L_{m-1}\) and \(L_{m}\) which transform \(W_2^1 \) into a diagonal+last-column matrix \(W_1^1 = L_{m} L_{m-1} W_2^1\):

    • First set \(G_{m-1}(1:m)\),

      $$\begin{aligned} G_{m-1}(1:m) = M(1:m, m-1). \end{aligned}$$
    • The following computation overwrites \(G_{m-1}(1:m) \) with \(L_{m-2} L_{m-3} \cdots \) \(L_2 G_{m-1}(1:m)\): for \(k=2,3,\ldots ,m-2\), compute

      $$\begin{aligned} G_{m-1}(i)&= G_{m-1}(i) +G_{m-1}(i-1)L_k(i,i-1),\\&\quad i=m, m-1,\ldots ,k+1. \end{aligned}$$
  • Step (3) The following computation overwrites the newly obtained \({\varvec{r}}\) with \(L_{m}L_{m-1}{\varvec{r}}\):

    $$\begin{aligned} r(m-1) =r(m-1)/G_{m-1}(m-1), \end{aligned}$$
    • next, for \(k=m-2,m-3,\ldots ,1,\) compute

      $$\begin{aligned} r(k) =r(k)- G_{m-1}(k)r(m-1), \end{aligned}$$
    • and

      $$\begin{aligned} r(m) =r(m)- G_{m-1}(m)r(m-1). \end{aligned}$$
  • Step (4) This step computes the coefficients \(G_{m}(i)\), \(i=1,2,\ldots ,m\) used to form the two matrices \(L_{m+1}\) and \(L_{m+2}\) which transform \(W_1^1 \) into the identity matrix \(I^1 = L_{m+2} L_{m+1} W_1^1\):

    • First set \(G_{m}(1:m)\):

      $$\begin{aligned} G_{m}(1:m) = M(1:m, m). \end{aligned}$$
    • The following computation overwrites \(G_{m}(1:m) \) with \(L_{m-2} L_{m-3} \cdots L_2 G_{m}(1:m)\): for \(k=2,3,\ldots ,m-2\), compute

      $$\begin{aligned} G_{m}(i)&= G_{m}(i) +G_{m}(i-1)L_k(i,i-1),\\&\quad i=m, m-1,\ldots ,k+1. \end{aligned}$$
    • The following computation overwrites the newly obtained \(G_{m}(1:m) \) with \(L_{m} L_{m-1} G_{m}(1:m)\):

      $$\begin{aligned} G_{m}(m-1) =G_{m}(m-1)/G_{m-1}(m-1), \end{aligned}$$

    next, for \(k=m-2,m-3,\ldots ,1,\) compute

    $$\begin{aligned} G_{m}(k) =G_{m}(k)- G_{m-1}(k) G_{m}(m-1), \end{aligned}$$

    and

    $$\begin{aligned} G_{m}(m) =G_{m}(m)- G_{m-1}(m)G_{m}(m-1). \end{aligned}$$
  • Step (5) The following computation overwrites the newly obtained \({\varvec{r}}\) with \(L_{m+2}L_{m+1}{\varvec{r}}\):

    $$\begin{aligned} r(m) =r(m)/G_{m}(m-1), \end{aligned}$$
    • next, for \(k=m-1,m-2,\ldots ,1,\) compute

      $$\begin{aligned} r(k) =r(k)- G_{m}(k)r(m). \end{aligned}$$
  • Step (6) The following iteration overwrites \({\varvec{r}}=r(1:m)\)

    • with \( U_1 U_2 \cdots U_{m-3} {\varvec{r}}\): For \(k=m-3, m-4,\ldots ,1,\) compute

      $$\begin{aligned} r(i)&= r(i)U_k(i,i),\quad i=k+1,k+2,\ldots , m-2, \\ r(i)&= r(i)-r(i+1),\quad i=k,k+1,\ldots ,m-3. \end{aligned}$$

Algorithm 6

This algorithm solves the systems for \({{\mathrm{\hbox {P}}}}_2\) in \(O(m^2)\) operations.

Given \([\eta _2, \eta _3,\ldots , \eta _{p-1} ]\) and \({\varvec{r}}=r(1:m)\), the following algorithm overwrites \({\varvec{r}}\) with the solution \({\varvec{u}}=u(1:m)\) of the system \(M{\varvec{u}}={\varvec{r}}\).

  • Step (1) The following iteration overwrites \({\varvec{r}}=r(1:m)\) with \(L_{m-1} L_{m-2} \cdots L_2 {\varvec{r}}\):

    • for \(k=2,3,\ldots , m-1\), compute

      $$\begin{aligned} r(i) =r(i)+r(i-1)L_k(i,i-1),\quad i=m, m-1,\ldots ,k+1. \end{aligned}$$
  • Step (2) The following iteration overwrites \({\varvec{r}}=r(1:m)\)

    • with \( U_1 U_2 \cdots U_{m-1} {\varvec{r}}\): For \(k=m-1, m-2,\ldots ,1,\) compute

      $$\begin{aligned} r(i)&= r(i)U_k(i,i),\quad i=k+1,k+2,\ldots , m, \\ r(i)&= r(i)-r(i+1), \quad i=k,k+1,\ldots ,m-1. \end{aligned}$$

Algorithm 7

This algorithm solves the systems for \({{\mathrm{\hbox {P}}}}_3\) in \(O(m^2)\) operations.

Given \([\eta _2, \eta _3,\ldots , \eta _{p-1} ]\) and \({\varvec{r}}=r(1:m)\), the following algorithm overwrites \({\varvec{r}}\) with the solution \({\varvec{u}}=u(1:m)\) of the system \(M{\varvec{u}}={\varvec{r}}\).

  • Step (1) The following iteration overwrites \({\varvec{r}}=r(1:m)\) with \(L_{m-2} L_{m-3} \cdots L_2 {\varvec{r}}\):

    • for \(k=2,3,\ldots , m-2\), compute

      $$\begin{aligned} r(i) =r(i)+r(i-1)L_k(i,i-1),\quad i=m-1,m-2,\ldots ,k+1. \end{aligned}$$
  • Step (2) This step computes the coefficients \(H_{m-1}\) used to form the matrix \(L_{m-1}\) which transforms \(W_1^3 \) into a diagonal+last-column matrix \(W^3 = L_{m-1} W_1^3\):

    • First set \(H_{m-1}\),

      $$\begin{aligned} H_{m-1} = M(m, m-1). \end{aligned}$$

      The following computation overwrites \(H_{m-1} = M(m,m-1)\) with \( (M(m,1:m)U_1 U_2 \ldots U_{m-2})(m,m-1) \): for \(k=2,3,\ldots , m-2\), compute

      $$\begin{aligned} H_{m-1}= H_{m-1}U_k(m-1,m-1) \end{aligned}$$
  • Step (3) The following computation overwrites the newly obtained \({\varvec{r}}\) with \( L_{m-1}{\varvec{r}}\): compute

    $$\begin{aligned} r(m) =r(m)- H_{m-1} r(m-1). \end{aligned}$$
  • Step (4) This step computes the coefficients \(G_{m}(i)\), \(i=1,2,\ldots ,m\) used to form the two matrices \(L_{m}\) and \(L_{m+1}\) which transform \(W^3 \) into the identity matrix \(I^3 = L_{m+1} L_{m} W^3\):

    • First set \(G_{m}(1:m)\):

      $$\begin{aligned} G_{m}(1:m) = M(1:m, m). \end{aligned}$$

      The following computation overwrites \(G_{m}(1:m) \) with \(\quad L_{m-2} L_{m-3} \cdots L_2 G_{m}(1:m)\): for \(k=2,4,\ldots ,m-2\), compute

      $$\begin{aligned} G_{m}(i)&= G_{m}(i) +G_{m}(i-1)L_k(i,i-1),\\&\quad i=m-1, m-2,\ldots ,k+1. \end{aligned}$$

      The following computation overwrites the newly obtained \(G_{m}(1:m) \) with \( L_{m-1} G_{m}(1:m)\): compute

      $$\begin{aligned} G_{m}(m ) =G_{m}(m )-H_{m-1} G_{m}( m-1 ). \end{aligned}$$
  • Step (5) The following computation overwrites the newly obtained \({\varvec{r}}\) with \(L_{m+1}L_{m}{\varvec{r}}\):

    $$\begin{aligned} r(m) =r(m)/G_{m}(m), \end{aligned}$$
    • next, compute

      $$\begin{aligned} r(k) =r(k)- G_{m}(k)r(m),\quad k=m-1,m-2,\ldots ,1. \end{aligned}$$
  • Step (6) The following iteration overwrites the newly obtained \({\varvec{r}}=r(1:m)\)

    • with \( U_{m-2} {\varvec{r}}\):

    • For \(k=m-2\) compute

      $$\begin{aligned} r(i)&= r(i)U_k(i,i),\quad i=k+1,k+2,\ldots , m-1, \\ r(i)&= r(i)-r(i+1), \quad i=k,k+1,\ldots ,m-2. \end{aligned}$$
  • Step (7) The following iteration overwrites the newly obtained \({\varvec{r}}=r(1:m)\)

    • with \( U_2 U_3 \cdots U_{m-3} {\varvec{r}}\):

    • For \(k=m-3, m-4,\ldots ,2,\) compute

      $$\begin{aligned} r(i)&= r(i)U_k(i,i),\quad i=k+1,k+2,\ldots , m-1, \\ r(k)&= r(k)-r(k+1)-r(m-1), \\ r(i)&= r(i)-r(i+1), \quad i=k+1,k+2,\ldots ,m-3. \end{aligned}$$
  • Step (8) The following iteration overwrites the newly obtained \({\varvec{r}}=r(1:m)\) with \( U_1 {\varvec{r}}\):

    • For \(k=1,\) compute

      $$\begin{aligned} r(i)&= r(i)U_k(i,i),\quad i=k+1,k+2,\ldots , m-2, \\ r(i)&= r(i)-r(i+1),\quad i=k,k+1,\ldots ,m-3. \end{aligned}$$

Appendix B: Coefficients of DIRK3 and HB\((p)\), \(p=3,4, \ldots ,10\)

The appendix lists the coefficients of DIRK3 and HB\((p)\), of order \(p=3,4, \ldots ,10\), considered in this paper. It is to be noted that, in Table 4, 5 and 6, since \(a_{22}=a_{33}=b_4\), only \(b_4\) are listed.

Table 4 Coefficients of the implicit predictors \({{\mathrm{\hbox {P}}}}_i\), \(i=2,3\) and of the integration formulae of DIRK3 and HB(\(p\)), \(p=3,4\)
Table 5 Coefficients of the implicit predictors \({{\mathrm{\hbox {P}}}}_i\), \(i=2,3\) and of the integration formulae of HB(\(p\)), \(p=5,6,7\)
Table 6 Coefficients of the implicit predictors \({{\mathrm{\hbox {P}}}}_i\), \(i=2,3\) and of the integration formulae of HB(\(p\)), \(p=8,9,10\)

Rights and permissions

Reprints and permissions

About this article

Check for updates. Verify currency and authenticity via CrossMark

Cite this article

Nguyen-Ba, T., Giordano, T. & Vaillancourt, R. Three-stage Hermite–Birkhoff solver of order 8 and 9 with variable step size for stiff ODEs. Calcolo 52, 371–405 (2015). https://doi.org/10.1007/s10092-014-0121-0

Download citation

  • Received:

  • Accepted:

  • Published:

  • Issue Date:

  • DOI: https://doi.org/10.1007/s10092-014-0121-0

Keywords

Mathematics Subject Classification

Navigation