Sunteți pe pagina 1din 35

Adaptive Quadrature

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

schi [2000] for Excel - VBA

evisited, BIT Vol. 40, No. 1, pp. 84--101.

m the Eidgenssische Technische Hochschule (ETH) Zrich

Number of function evaluations


Simpson
Fct Eval 1
Fct Eval 2

3+5
45

Lobatto
Fct Eval 1
Fct Eval 2

13
45

minimal number of Fct Eval


Simpson
10 8+2
Lobatto
18 13+5
Fct Eval at each level of recursion
Simpson
2
Lobatto
5

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

nd the partial integral

respective recursive functions of the two procedures.


adaptlob()
a

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!

Define a formula as string and evaluate the desired interval.

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

Examples (take care for your decimal seperator settings )


sin(x)
cos(x)
-1/10*x^3+23*x-3.5
x^3
sin(x)-cos(x)

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

2010-03-29 Martin Schmelzle

Description
Initial release

S-ar putea să vă placă și