Documente Academic
Documente Profesional
Documente Cultură
Two adaptive integration procedures from Gander and Gautschi [2000] for Excel - VBA
adaptsim() Adaptive Lobatto Quadrature
adaptlob() Adaptive Simpson Quadrature
Reference
Gander, W. and W. Gautschi [2000] Adaptive Quadrature - Revisited, BIT Vol. 40, No. 1, p
freely available as "Technical Report 306" (August 1998) from the Eidgenssische Techn
ftp://ftp.inf.ethz.ch/pub/publications/tech-reports/3xx/306.ps.gz
3+5
45
Lobatto
Fct Eval 1
Fct Eval 2
13
45
8
90
98
13
225
238
Trace the left end point of the current interval, the interval length and the partial integ
(cf Table 1 in Gander and Gautschi [1998])
To trace the used interval strucure, use the Debug.Print() statement in the respective recursive f
adaptsim()
a
0
0.625
0.9375
12
0.9765625
0.99609375
1.005859375
1.015625
10
1.09375
1.25
8 2.5
2.8125
2.96875
2.98828125
6
2.998046875
2.9992675781
2.9998779297
4
2.9999542236
2.9999923706
3.0000019073
3.0000114441
2
3.0000305176
3.0001831055
3.0004882813
0
3.0029296875
0
3.0078125
3.046875
3.125
3.75
b-a
0.625
0.3125
0.0390625
0.01953125
0.009765625
0.009765625
0.078125
0.15625
1.25
0.3125
0.15625
0.01953125
0.009765625
0.0012207031
0.0006103516
7.63E-05
3.81E-05
9.54E-06
9.54E-06
1.91E-05
0.0001525879
0.0003051758
0.0024414063
0.0048828125
1
0.0390625
0.078125
0.625
1.25
integral:
partial integral
0.8203125
0.556640625
0.0764465332
3.88E-02
0.0195056068
1.94E-02
0.1519775391
0.2856445313
1.40625
0.107421875
0.0170898438
4.20E-04
6.68E-05
1.64E-06
2.61E-07
6.40E-09
1.02E-09
1.48E-06
1.91E-05
3.81E-05
0.0003051758
0.0006103516
0.0048828125
0.009765625
2
0.078125
0.15625
1.25
2.5
7.4999968211
0
0.4587585477
0.5434644107
0.7139268149
0.9203622795
0.9393030863
0.9774196386
0.9816549317
0.9901780519
0.9911250923
0.9930309199
0.9953389386
0.9976469572
0.9995527848
1.0004998252
1.0108215984
1.0193447186
1.0235800118
1.0697403849
1.1078569373
1.1267977441
1.2972601482
1.3819660113
2.5
4
2.6025815298
2.8090169944
2.8319549218
2.8781152949
2.9340169944
2.9899186938
2.994153987
2.9949359978
2.9965097195
2.9984155471
2.99859041
2.9989423049
2.9993684609
2.9997946169
2.9998269038
2.9998918782
b-a
partial integral
0.4587585477
0.5639882502
8.47E-02
0.1271529434
0.1704624042
0.2776313698
0.2064354646
0.3751230788
1.89E-02 f(x)
3.66E-02
3.81E-02
7.46E-02
4.24E-03
8.38E-03
8.52E-03
1.69E-02
9.47E-04
1.89E-03
1.91E-03
3.80E-03
2.31E-03
4.60E-03
2.31E-03
4.61E-03
1.91E-03
3.81E-03
9.47E-04
1.89E-03
1.03E-02
2.06E-02
8.52E-03
0.0169176848
4.24E-03
8.38E-03
0.0461603732
9.02E-02
3.81E-02
7.28E-02
1.89E-02
3.57E-02
0.1704624042
0.3047818444
8.47E-02
0.1406445071
1.1180339887
1.1840169944
0.1025815298
5
6 4.60E-02
0.2064354646
6.07E-02
2.29E-02
4.12E-03
4.62E-02
6.69E-03
5.59E-02
5.25E-03
5.59E-02
2.13E-03
4.24E-03
3.37E-05
7.82E-04
4.27E-06
1.57E-03
6.73E-06
1.91E-03
4.84E-06
1.75E-04
2.62E-07
3.52E-04
4.34E-07
4.26E-04
3.60E-07
4.26E-04
1.78E-07
3.23E-05
6.11E-09
6.50E-05
9.14E-09
7.87E-05
5.41E-09
2.9999705643
2.9999777839
2.9999923126
2.999993927
2.9999971757
2.9999975367
2.9999982631
2.9999991428
3.0000000226
3.000000749
3.00000111
3.0000050443
3.000008293
3.0000099074
3.0000275021
3.0000420308
3.0000492504
3.0001142248
3.0001465117
3.0003213747
3.0018950963
3.0026771072
3.0129988804
3.0233206536
3.0318437738
3.036079067
3.0590169944
3.3090169944
3.515452459
3.6180339887
4.5412414523
7.22E-06
1.45E-05
1.61E-06
3.25E-06
3.61E-07
7.26E-07
8.80E-07
8.80E-07
7.26E-07
3.61E-07
3.93E-06
3.25E-06
1.61E-06
1.76E-05
1.45E-05
7.22E-06
6.50E-05
3.23E-05
1.75E-04
1.57E-03
7.82E-04
1.03E-02
1.03E-02
8.52E-03
4.24E-03
2.29E-02
0.25
0.2064354646
0.1025815298
0.9232074636
0.4587585477
integral:
1.86E-10
2.17E-10
1.11E-11
1.45E-11
9.54E-13
1.53E-12
1.14E-12
4.61E-08
1.45E-06
7.22E-07
7.87E-06
6.50E-06
3.23E-06
3.52E-05
2.91E-05
1.44E-05
1.30E-04
6.46E-05
3.50E-04
3.15E-03
1.56E-03
2.06E-02
2.06E-02
1.70E-02
8.47E-03
4.59E-02
0.5
0.4128709292
0.2051630596
1.8464149271
0.9175170954
7.5000000038
Function f
x
0
0.025
0.05
0.075
0.1
0.125
0.15
0.175
0.2
0.225
0.25
0.275
0.3
0.325
0.35
0.375
0.4
0.425
0.45
0.475
0.5
0.525
0.55
0.575
0.6
0.625
0.65
0.675
0.7
0.725
0.75
0.775
0.8
0.825
0.85
0.875
0.9
0.925
0.95
0.975
1
1.025
1.05
1.075
1.1
Simpson
x
f(x)
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
0
0.625
0.9375
0.9765625
0.99609375
1.00585938
1.015625
1.09375
1.25
2.5
2.8125
2.96875
2.98828125
2.99804688
2.99926758
2.99987793
2.99995422
2.99999237
3.00000191
3.00001144
3.00003052
3.00018311
3.00048828
3.00292969
3.0078125
3.046875
3.125
3.75
5
f(x)
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
1.125
1.15
1.175
1.2
1.225
1.25
1.275
1.3
1.325
1.35
1.375
1.4
1.425
1.45
1.475
1.5
1.525
1.55
1.575
1.6
1.625
1.65
1.675
1.7
1.725
1.75
1.775
1.8
1.825
1.85
1.875
1.9
1.925
1.95
1.975
2
2.025
2.05
2.075
2.1
2.125
2.15
2.175
2.2
2.225
2.25
2.275
2.3
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
2.325
2.35
2.375
2.4
2.425
2.45
2.475
2.5
2.525
2.55
2.575
2.6
2.625
2.65
2.675
2.7
2.725
2.75
2.775
2.8
2.825
2.85
2.875
2.9
2.925
2.95
2.975
3
3.025
3.05
3.075
3.1
3.125
3.15
3.175
3.2
3.225
3.25
3.275
3.3
3.325
3.35
3.375
3.4
3.425
3.45
3.475
3.5
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
3.525
3.55
3.575
3.6
3.625
3.65
3.675
3.7
3.725
3.75
3.775
3.8
3.825
3.85
3.875
3.9
3.925
3.95
3.975
4
4.025
4.05
4.075
4.1
4.125
4.15
4.175
4.2
4.225
4.25
4.275
4.3
4.325
4.35
4.375
4.4
4.425
4.45
4.475
4.5
4.525
4.55
4.575
4.6
4.625
4.65
4.675
4.7
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
4.725
4.75
4.775
4.8
4.825
4.85
4.875
4.9
4.925
4.95
4.975
5
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
You can enter any valid VBA function like statements as formula string and then chos
Caution: This implementation is meant for illustration purposes and is highly experim
I recommend to define the functions to be integrated in a proper way in VBA.
function string
-1/10*x^3+23*x-3.5
f(x)
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
b
-8
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
23
result
#VALUE!
12
10
0
0
20
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
#VALUE!
ed interval.
formula string and then chose the lower and upper integration bounds.
urposes and is highly experimental, the solution might be unstable.
a proper way in VBA.
function evaluations
#VALUE! {=adaptsimString(B9;C9;D9)}
0
0
20
40
60
80
f(x)
lowe
r
80
100
120
perator settings )
Disclaimer
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
A copy of the GNU General Public License is available at
http://www.fsf.org/licensing/licenses
Copyright 2010 Martin Schmelzle
Contact information
martin.schmelzle@pfadintegral.com
http://pfadintegral.com
Revision History
Version
Date
1.0
By
Description
Initial release