, 7 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. 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 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, see Tendler-like formulas
- 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 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";