, 7 min read

Comparing BDF vs. Tendler vs. Tischer formulas, #2

In Comparing BDF vs. Tendler vs. Tischer formulas we already compared BDF, Tendler's formulas and Tischer's formulas. There we used the classical Dahlquist test equation $y'=\lambda y$.

We repeat the test but with another differential equation.

1. Runge's function

The test equation is

$$ y´(t) = {-2 t\over (1+t^2)^2} \in \mathbb{R}, \quad y(t_0) = {1\over 1+t_0^2}, \quad t\in[t_0, t_1]. $$

It has the exact solution $y(t) = 1/(1+t^2)$. This is Runge's function showcasing Runge's phenomenon.

For the numerical solution we used the step sizes $h=0.1$, $h=0.01$, and $h=0.001$.

Above differential equation is now solved with the following formulas:

  1. BDF order 1–6
  2. Tendler's formulas order 3–7
  3. new Tendler-like formulas order 3–9, see Tendler-like formulas
  4. Tischer's formulas of order 2–8 using $S=0$

This creates 75 data points. Multiply by two precisions, gives 150 records.

Again, We report the summed global error computed as

$$ g_\hbox{err} = \sum_{i=0}^n |y(t_i) - y_i|, \quad n={t_1-t_0\over h}. $$

All formulas produce accurate results and the error is alway way below one. We therefore show

$$ \hat g_\hbox{err} = -\log_{10} g_\hbox{err}. $$

Higher is better. That's what is shown in below graphic.

2. Negative logarithmic error in double precision

Below 3D chart can be rotated and zoomed in or out. Clicking on any entry shows the log global error $\hat g_\hbox{err}$. Double precision on AMD Ryzen.

3. Negative logarithmic error in quadruple precision

Below 3D chart can be rotated and zoomed in or out. Clicking on any entry shows the negative log global error $\hat g_\hbox{err}$. Quadruple precision on AMD Ryzen. It is striking that the accurary has increased by two orders of magnitude.

4. Raw results for double precision

Computations were done in double precision (double).

The script.

#!/bin/bash
# Run stabregion2 with precision $1 and various various step sizes $2 for Runge's problem

echo BDF1-6
for i in 1 2 3 4 5 6; do stabregion2 -f BDF$i -u$1:-5:5:$2 | tail -1; done
echo Tendler3-7
for i in 3 4 5 6 7; do stabregion2 -f Tendler$i -u$1:-5:5:$2 | tail -1; done
echo eTendler3-9
for i in 3 4 5 6 7 8 9; do stabregion2 -f eTendler$i -u$1:-5:5:$2 | tail -1; done
echo Tischer2-8
for i in 2 3 4 5 6 7 8 ; do stabregion2 -f Tischer$i -u$1:-5:5:$2 | tail -1; done

The results. First double precision.

$ for h in 0.1 0.01 0.001; do echo h=$h; stabregion2-batchRunge 2 $h; done | tee stabregion2-runge-55-0.1-0.001.txt

h=0.1
BDF1-6
      101        5.00000000       0.036982249      0.0014792899        0.96301775      0.0095348292
      101        5.00000000       0.038461624     8.5615576e-08       0.081866559     0.00081055999
      101        5.00000000       0.038457995     3.5430565e-06       0.014724693     0.00014578904
      101        5.00000000       0.038461536     2.5370797e-09      0.0039593414       3.92014e-05
      101        5.00000000        0.03846151      2.814651e-08      0.0014265072     1.4123834e-05
      101        5.00000000        0.03846154     1.5475533e-09     0.00064442835     6.3804787e-06
Tendler3-7
      102        5.10000000       0.036999342     2.3982797e-05       0.044467626     0.00043595711
      103        5.20000000       0.035663316     2.2332109e-08      0.0067510688     6.5544358e-05
      101        5.00000000       0.038470049     8.5102832e-06      0.0037145982       3.67782e-05
      102        5.10000000       0.037021167     2.1578698e-06      0.0051242663     5.0237905e-05
      103        5.20000000       0.035647113     1.6224676e-05      0.0037800996     3.6699997e-05
eTendler3-9
      102        5.10000000       0.036969106     5.4218914e-05       0.055089196     0.00054009016
      103        5.20000000       0.035663776     4.3751847e-07       0.038297457     0.00037181997
      101        5.00000000       0.038460826     7.1258628e-07        0.01320941     0.00013078623
      102        5.10000000       0.037027163     3.8384301e-06       0.006025627     5.9074774e-05
      103        5.20000000       0.035654912     8.4256313e-06      0.0015834431     1.5373234e-05
      104        5.30000000       0.034339883     3.6191523e-05      0.0023867322     2.2949348e-05
      104        5.30000000       0.032928864      0.0014472107       0.070966298     0.00068236825
Tischer2-8
      102        5.10000000       0.037021558     1.7662689e-06       0.034696237     0.00034015918
      101        5.00000000       0.038464072     2.5330643e-06       0.073964887     0.00073232561
      102        5.10000000       0.037021992       1.33266e-06       0.080142047     0.00078570635
      101        5.00000000       0.038462774     1.2360023e-06       0.069495329     0.00068807256
      102        5.10000000       0.037023224     1.0045479e-07       0.052946899     0.00051908725
      101        5.00000000         0.0384616     6.1856937e-08       0.049366255      0.0004887748
      102        5.10000000       0.037023314     1.0531468e-08       0.052023547     0.00051003477
h=0.01
BDF1-6
     1001        5.00000000       0.038313609     0.00014792899        0.96168639     0.00096072566
     1001        5.00000000       0.038461538     7.3774736e-12      0.0083432045     8.3348697e-06
     1001        5.00000000       0.038461535     3.1877376e-09     0.00014955862     1.4940921e-07
     1001        5.00000000       0.038461538     2.7346181e-14     4.0610376e-06     4.0569806e-09
     1001        5.00000000       0.038461538     2.2077479e-13     1.4989554e-07     1.4974579e-10
     1001        5.00000000       0.038461538     6.9388939e-16     6.9781085e-09     6.9711374e-12
Tendler3-7
     1002        5.01000000       0.038314013     1.6181477e-08     0.00073858905     7.3711482e-07
     1003        5.02000000       0.038167356     4.7892246e-14     9.5453879e-06     9.5168374e-09
     1001        5.00000000       0.038461538     5.7392285e-13     3.7829891e-07     3.7792099e-10
     1002        5.01000000       0.038314029     4.7829796e-14     1.9396052e-08     1.9357337e-11
     1003        5.02000000       0.038167356     5.9369176e-14     5.2200313e-10      5.204418e-13
eTendler3-9
     1002        5.01000000          0.038314     2.9506259e-08      0.0012932428     1.2906615e-06
     1003        5.02000000       0.038167356     3.0298264e-12     6.3388015e-05      6.319842e-08
     1001        5.00000000       0.038461538     6.0814687e-12     4.1263006e-06     4.1221784e-09
     1002        5.01000000       0.038314029      4.422851e-14     4.3091486e-08     4.3005475e-11
     1003        5.02000000       0.038167356     7.7771123e-14     2.2565377e-09     2.2497884e-12
     1004        5.03000000       0.038021513     1.4530044e-14     3.6280652e-11     3.6136108e-14
     1004        5.03000000       0.038021513     5.5994792e-13     3.0639519e-10     3.0517449e-13
Tischer2-8
     1002        5.01000000       0.038314028     1.7507024e-09      0.0034396059     3.4327405e-06
     1001        5.00000000        0.03846154     1.1967474e-09     9.2690537e-05     9.2597939e-08
     1002        5.01000000       0.038314029     1.1046185e-11     5.5457648e-05     5.5346954e-08
     1001        5.00000000       0.038461538     8.1363527e-12     5.3013635e-06     5.2960674e-09
     1002        5.01000000       0.038314029     8.0717377e-13     3.6786879e-07     3.6713452e-10
     1001        5.00000000       0.038461538     5.1623913e-12     3.5959124e-08     3.5923201e-11
     1002        5.01000000       0.038314029     5.6720066e-11     2.8704729e-08     2.8647434e-11
h=0.001
BDF1-6
    10001        5.00000000       0.038446746     1.4792899e-05        0.96160315       9.61507e-05
    10001        5.00000000       0.038461538     1.9914626e-15     0.00083457957     8.3449612e-08
    10001        5.00000000       0.038461538     3.1587094e-12     1.4958062e-06     1.4956566e-10
    10001        5.00000000       0.038461538     1.1116108e-14     4.0607305e-09     4.0603244e-13
    10001        5.00000000       0.038461538     4.4686477e-15     1.4817043e-10     1.4815561e-14
    10001        5.00000000       0.038461538     2.5673907e-15     1.6705484e-10     1.6703814e-14
Tendler3-7
    10002        5.00100000        0.03844675     1.5780807e-11     7.4778939e-06     7.4763986e-10
    10003        5.00200000       0.038431969     1.9900748e-14     9.5641657e-09     9.5612973e-13
    10001        5.00000000       0.038461538     4.4547699e-15     1.0163375e-10     1.0162359e-14
    10002        5.00100000        0.03844675     1.2902179e-13     8.1554464e-10     8.1538156e-14
    10003        5.00200000       0.038431969     2.7894353e-15     2.0495767e-10      2.048962e-14
eTendler3-9
    10002        5.00100000        0.03844675      2.841187e-11     1.3385142e-05     1.3382465e-09
    10003        5.00200000       0.038431969     1.8706564e-13     6.4299091e-08     6.4279807e-12
    10001        5.00000000       0.038461538     4.1720793e-13     2.2926937e-09     2.2924645e-13
    10002        5.00100000        0.03844675     1.3358065e-13      6.842014e-10     6.8406459e-14
    10003        5.00200000       0.038431969     3.1815522e-13     1.8802301e-09     1.8796662e-13
    10004        5.00300000       0.038417198     4.1347481e-13     2.0963204e-09     2.0954822e-13
    10004        5.00300000       0.038417198     3.6944822e-12     1.9619003e-08     1.9611158e-12
Tischer2-8
    10002        5.00100000        0.03844675     1.5202076e-12     0.00034400271     3.4393392e-08
    10001        5.00000000       0.038461538     2.3973878e-13     5.2563173e-07     5.2557918e-11
    10002        5.00100000        0.03844675      5.957318e-12     7.4183894e-08      7.416906e-12
    10001        5.00000000       0.038461538     3.9987597e-12     2.0334518e-08     2.0332484e-12
    10002        5.00100000        0.03844675     8.7370874e-12     4.3888124e-08     4.3879348e-12
    10001        5.00000000       0.038461538     5.0558134e-11     2.5322124e-07     2.5319592e-11
    10002        5.00100000       0.038446749     5.5987329e-10     2.7971488e-06     2.7965895e-10

Second quadruple precision.

$ for h in 0.1 0.01 0.001; do echo h=$h; stabregion2-batchRunge 3 $h; done | tee stabregion2-rungeQuad-55-0.1-0.001.txt

h=0.1
BDF1-6
      101        5.00000000       0.036982249      0.0014792899        0.96301775      0.0095348292
      101        5.00000000       0.038461624     8.5615576e-08       0.081866559     0.00081055999
      101        5.00000000       0.038457995     3.5430565e-06       0.014724693     0.00014578904
      101        5.00000000       0.038461536     2.5370787e-09      0.0039593414       3.92014e-05
      101        5.00000000        0.03846151     2.8146511e-08      0.0014265072     1.4123834e-05
      101        5.00000000        0.03846154     1.5475522e-09     0.00064442835     6.3804787e-06
Tendler3-7
      102        5.10000000       0.036999342     2.3982797e-05       0.044467626     0.00043595711
      103        5.20000000       0.035663316     2.2332109e-08      0.0067510688     6.5544358e-05
      101        5.00000000       0.038470049     8.5102832e-06      0.0037145982       3.67782e-05
      102        5.10000000       0.037021167     2.1578698e-06      0.0051242663     5.0237905e-05
      103        5.20000000       0.035647113     1.6224676e-05      0.0037800996     3.6699997e-05
eTendler3-9
      102        5.10000000       0.036969106     5.4218914e-05       0.055089196     0.00054009016
      103        5.20000000       0.035663776     4.3751846e-07       0.038297457     0.00037181997
      101        5.00000000       0.038460826      7.125863e-07        0.01320941     0.00013078623
      102        5.10000000       0.037027163     3.8384301e-06       0.006025627     5.9074774e-05
      103        5.20000000       0.035654912     8.4256313e-06      0.0015834431     1.5373234e-05
      104        5.30000000       0.034339883     3.6191523e-05      0.0023867322     2.2949348e-05
      104        5.30000000       0.032928864      0.0014472107       0.070966298     0.00068236825
Tischer2-8
      102        5.10000000       0.037021558     1.7662689e-06       0.034696237     0.00034015918
      101        5.00000000       0.038464072     2.5330643e-06       0.073964887     0.00073232561
      102        5.10000000       0.037021992       1.33266e-06       0.080142047     0.00078570635
      101        5.00000000       0.038462774     1.2360024e-06       0.069495329     0.00068807256
      102        5.10000000       0.037023224     1.0045488e-07       0.052946899     0.00051908725
      101        5.00000000         0.0384616      6.185701e-08       0.049366255      0.0004887748
      102        5.10000000       0.037023314     1.0532163e-08       0.052023547     0.00051003477
h=0.01
BDF1-6
     1001        5.00000000       0.038313609     0.00014792899        0.96168639     0.00096072566
     1001        5.00000000       0.038461538     7.3765577e-12      0.0083432045     8.3348697e-06
     1001        5.00000000       0.038461535      3.187737e-09     0.00014955862     1.4940921e-07
     1001        5.00000000       0.038461538      2.147895e-14     4.0610386e-06     4.0569816e-09
     1001        5.00000000       0.038461538     2.1682157e-13     1.4989475e-07       1.49745e-10
     1001        5.00000000       0.038461538     6.2646557e-18     6.9781307e-09     6.9711595e-12
Tendler3-7
     1002        5.01000000       0.038314013     1.6181463e-08     0.00073858904     7.3711481e-07
     1003        5.02000000       0.038167356     4.0604977e-14     9.5453891e-06     9.5168385e-09
     1001        5.00000000       0.038461538     5.5436381e-13     3.7829409e-07     3.7791617e-10
     1002        5.01000000       0.038314029     2.9131157e-17     1.9395319e-08     1.9356606e-11
     1003        5.02000000       0.038167356     6.7644051e-17     5.0508569e-10     5.0357496e-13
eTendler3-9
     1002        5.01000000          0.038314     2.9506202e-08      0.0012932428     1.2906615e-06
     1003        5.02000000       0.038167356     3.0223516e-12     6.3388013e-05     6.3198418e-08
     1001        5.00000000       0.038461538     6.3271927e-12     4.1263626e-06     4.1222404e-09
     1002        5.01000000       0.038314029     1.1011428e-16     4.3085019e-08     4.2999021e-11
     1003        5.02000000       0.038167356      2.327511e-16     2.2366291e-09     2.2299393e-12
     1004        5.03000000       0.038021513     1.8458542e-17     3.0512026e-11     3.0390464e-14
     1004        5.03000000       0.038021513     6.2485959e-16     3.0717034e-11     3.0594655e-14
Tischer2-8
     1002        5.01000000       0.038314028     1.7507017e-09      0.0034396059     3.4327405e-06
     1001        5.00000000        0.03846154     1.1967538e-09     9.2690539e-05     9.2597941e-08
     1002        5.01000000       0.038314029     1.1051463e-11      5.545765e-05     5.5346956e-08
     1001        5.00000000       0.038461538     8.1216551e-12     5.3013609e-06     5.2960649e-09
     1002        5.01000000       0.038314029     8.7515273e-13     3.6787568e-07      3.671414e-10
     1001        5.00000000       0.038461538     4.9692183e-12      3.588457e-08     3.5848722e-11
     1002        5.01000000       0.038314029     5.5859137e-11     2.8294333e-08     2.8237858e-11
h=0.001
BDF1-6
    10001        5.00000000       0.038446746     1.4792899e-05        0.96160315       9.61507e-05
    10001        5.00000000       0.038461538     7.2802821e-16     0.00083457955      8.344961e-08
    10001        5.00000000       0.038461538     3.1547856e-12     1.4957932e-06     1.4956437e-10
    10001        5.00000000       0.038461538     5.8275867e-19     4.0623438e-09     4.0619376e-13
    10001        5.00000000       0.038461538     4.1165801e-18     1.5002423e-11     1.5000923e-15
    10001        5.00000000       0.038461538     6.0173221e-18     8.9236344e-14     8.9227421e-18
Tendler3-7
    10002        5.00100000        0.03844675     1.5796532e-11     7.4779562e-06     7.4764609e-10
    10003        5.00200000       0.038431969     9.5172622e-18     9.6078734e-09     9.6049919e-13
    10001        5.00000000       0.038461538     2.8257019e-18     3.8083017e-11     3.8079209e-15
    10002        5.00100000        0.03844675     3.1136931e-18       2.23309e-13     2.2326435e-17
    10003        5.00200000       0.038431969     4.9839419e-18     4.6430436e-14     4.6416511e-18
eTendler3-9
    10002        5.00100000        0.03844675     2.8328214e-11     1.3384847e-05      1.338217e-09
    10003        5.00200000       0.038431969     4.4140581e-17     6.3839164e-08     6.3820018e-12
    10001        5.00000000       0.038461538     2.7400838e-16     4.2245435e-10      4.224121e-14
    10002        5.00100000        0.03844675     8.9378917e-18     4.7191011e-13     4.7181575e-17
    10003        5.00200000       0.038431969      1.836774e-16     1.2240796e-12     1.2237125e-16
    10004        5.00300000       0.038417198     9.6151792e-17     5.4300267e-13     5.4278556e-17
    10004        5.00300000       0.038417198     1.0707377e-15     5.4988138e-12     5.4966152e-16
Tischer2-8
    10002        5.00100000        0.03844675     1.5206948e-12     0.00034400268      3.439339e-08
    10001        5.00000000       0.038461538     2.4026387e-13     5.2563446e-07      5.255819e-11
    10002        5.00100000        0.03844675     5.9445514e-12     7.4128733e-08      7.411391e-12
    10001        5.00000000       0.038461538     3.8125509e-12     1.9176384e-08     1.9174467e-12
    10002        5.00100000        0.03844675     8.8178837e-12     4.4083648e-08     4.4074833e-12
    10001        5.00000000       0.038461538     4.9772535e-11     2.4826219e-07     2.4823737e-11
    10002        5.00100000       0.038446749     5.5929763e-10     2.7944458e-06      2.793887e-10

4. Scripts to generate results

We used the C program stabregion2.c to generate above results. Below shell script stabregion2-batchRunge was once run with $1=2(double precision) and once with$1=3` (quadruple precision).

#!/bin/bash
# Run stabregion2 with precision $1 and various various step sizes $2 for Runge's problem

echo BDF1-6
for i in 1 2 3 4 5 6; do stabregion2 -f BDF$i -u$1:-5:5:$2 | tail -1; done
echo Tendler3-7
for i in 3 4 5 6 7; do stabregion2 -f Tendler$i -u$1:-5:5:$2 | tail -1; done
echo eTendler3-9
for i in 3 4 5 6 7 8 9; do stabregion2 -f eTendler$i -u$1:-5:5:$2 | tail -1; done
echo Tischer2-8
for i in 2 3 4 5 6 7 8 ; do stabregion2 -f Tischer$i -u$1:-5:5:$2 | tail -1; done

The output of above script was then processed with below Perl script to generate JSON for Apache ECharts:

#!/bin/perl -W
# Generate JSON + ECharts commands from stabregion2-runge-55-0.1-0.001.txt
# That file was generated via
#    for h in 0.1 0.01 0.001; do echo h=$h; stabregion2-batchRunge 2 $h; done

use strict;
my ($log10,$h,$formula,$p,$gerr,@F) = (log(10),0,"",0,0,());

print "[\n\t[\"formula\", \"h\", \"gerr\"],\n";
while (<>) {
    if (/^h=(\d+\.\d+)/) { $h = $1; next; }
    if (/^(BDF|Tendler|eTendler|Tischer)(\d)-(\d)/) { $formula = $1; $p = $2 - 1; next; }
    if (/^\s*\d+\s+\d+\.\d+/) {
        @F = split(/\s+/);
        $gerr = $F[5];
        $p += 1;
        if ($gerr =~ /(-nan|nan)/ || $gerr > 30) { $gerr = 5; }
        else { $gerr = -log($gerr) / $log10; }
    }
    printf("\t[ \"%s%d\", \"%g\", %g],\n",$formula,$p,$h,$gerr);
}
print "];\n";