, 8 min read
Comparing BDF vs. Tendler vs. Tischer formulas, #2
- 1. Runge's function
- 2. Negative logarithmic error in double precision
- 3. Negative logarithmic error in quadruple precision
- 4. Raw results
- 5. Scripts to generate results
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
It has the exact solution $y(t) = 1/(1+t^2)$.
This is a numerical quadrature problem and not really a differential equation. 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:
- BDF order 1–6
- Tendler's formulas order 3–7
- new Tendler-like formulas order 3–9
- 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
All formulas produce accurate results and the error is alway way below one. We therefore show
Higher is better. That's what is shown in below graphics.
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.
For $h=0.001$ Tendler5 gives the best accuracy closely followed by BDF5 and BDF6. For $h=0.01$ eTendler8 achieves the best accuracy. For $h=0.1$ BDF6 is best, closely followed by eTendler6.
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.
From an accuracy point of view the formulas eTendler6-9 are outperformed by BDF6 and Tendler7 for the step size $h=0.001$. For $h=0.01$ eTendler8 shows the best accuracy.
4. Raw results
Computations were done in double precision (double) and quadruple precision (long 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
5. 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";