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.
Similar content being viewed by others
References
Alexander, R.: Diagonally implicit Runge–Kutta methods for stiff ODEs. SIAM J. Numer. Anal. 14, 1006–1021 (1977)
Björck, A., Elfving, T.: Algorithms for confluent Vandermonde systems. Numer. Math. 21, 130–137 (1973)
Björck, A., Pereyra, V.: Solution of Vandermonde systems of equations. Math. Comput. 24, 893–903 (1970)
Butcher, J.C., Chen, D.J.L.: A new type of singly-implicit Runge–Kutta method. Appl. Numer. Math. 34, 179–188 (2000)
Cash, J.R.: On the integration of stiff systems of ODEs using extended backward differentiation formula. Numer. Math. 34, 235–246 (1980)
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)
Cash, J.R., Considine, S.: An MEBDF code for stiff initial value problems. ACM Trans. Math. Softw. 18, 142–160 (1992)
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)
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
Enright, W.H., Pryce, J.D.: Two Fortran packages for assessing initial value methods. ACM Trans. Math. Softw. 13, 1–27 (1987)
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)
Galimberti, G., Pereyra, V.: Solving confluent Vandermonde systems of Hermite type. Numer. Math. 18, 44–60 (1971)
Gear, C.W.: Numerical Initial Value Problems in Ordinary Differential Equations. Prentice-Hall, Englewood Cliffs (1971)
Hairer, E., Wanner, G.: Solving Ordinary Differential Equations II. Stiff and Differential-Algebraic Problems. corr. sec. print, Springer, Berlin (2002)
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)
Hojjati, G., Rahimi, M.Y., Hosseini, S.M.: New second derivative multistep methods for stiff systems. Appl. Math. Model. 30, 466–476 (2006)
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)
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)
Lambert, J.D.: Numerical Methods for Ordinary Differential Systems. Wiley, Chichester (1991)
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)
Nordsieck, A.: On numerical integration of ordinary differential equations. Math. Comput. 16, 22–49 (1962)
Petzold, L.R.: A description of DASSL: a differential/algebraic system solver. In: Proceedings of IMACS World Congress, Montréal, Canada (1982)
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)
Sharp, P.W.: Numerical comparison of explicit Runge–Kutta pairs of orders four through eight. ACM Trans. Math. Softw. 17, 387–409 (1991)
Author information
Authors and Affiliations
Corresponding author
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.
Rights and permissions
About this article
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
Received:
Accepted:
Published:
Issue Date:
DOI: https://doi.org/10.1007/s10092-014-0121-0
Keywords
- General linear method for stiff ODE’s
- Hermite–Birkhoff method
- Endpoint error
- Number of function evaluations
- Stiff DETEST problems
- Confluent Vandermonde-type systems
- C++