看到这种算数题,果断翻出高数书,回忆一下辛普森规则,其实它就是抛物线法求定积分的近似值。当然求定积分的近似值还有矩形法和梯形法,说到定积分,有同学可能已经忘了这是什么东东了,定积分说简单点,就是求函数曲线在[a,b]这个区间,与x轴围城的面积大小,也就是f(x) 跟 x 轴所围成的面积。 辛普森规则其实就是用抛物线去求曲线的近似面积,假设我们把[a,b]分为n份,每一份的距离都是(a-b)/n,我们把它计做h,为了方便计算,我们先取(a,ya)、(m,yb)、(b,yc)三个点,有以下公式:
P
(
x
)
=
p
x
2
+
q
x
+
r
y
a
=
p
a
2
+
q
a
+
r
y
b
=
p
m
2
+
q
m
+
r
y
c
=
p
b
2
+
q
b
+
r
a
=
m
−
h
b
=
m
+
h
P(x) = px^2+qx+r\\ y_a=pa^2+qa+r\\ y_b=pm^2+qm+r\\ y_c=pb^2+qb+r\\ a = m - h\\ b = m + h\\
P ( x ) = p x 2 + q x + r y a = p a 2 + q a + r y b = p m 2 + q m + r y c = p b 2 + q b + r a = m − h b = m + h 根据公式可以推导出:
y
a
−
2
y
b
+
y
c
=
2
p
h
2
y_a-2y_b+y_c = 2ph^2
y a − 2 y b + y c = 2 p h 2 根据牛顿-莱布尼兹公式,P(x)在[a,b]的定积分就为P(x)的原函数在(a,b)两点的差值即: 为了便于运算,我们假设m刚好为0,(a,ya)、(m,yb)、(b,yc)三个点就变成(-h,ya)、(0,yb)、(h,yc)
∫
a
b
f
(
x
)
d
x
=
F
(
b
)
−
F
(
a
)
∫
a
b
f
(
p
x
2
+
q
x
+
r
)
d
x
=
[
1
3
p
x
3
+
1
2
p
x
2
+
x
r
]
a
b
=
1
3
h
3
+
1
2
p
h
2
+
h
r
−
1
3
p
(
−
h
)
3
−
1
2
p
(
−
h
)
2
−
(
−
h
)
r
=
2
3
h
3
+
2
h
r
=
1
3
h
(
2
p
h
2
+
6
r
)
=
1
3
h
(
y
a
−
2
y
b
+
y
c
+
4
y
b
)
=
1
3
h
(
y
a
+
4
y
b
+
y
c
)
\int_a^bf\left(x\right)dx=F\left(b\right)-F\left(a\right)\\ \int_a^bf\left(px^2+qx+r\right)dx=\left[\frac13px^3+\frac12px^2+xr\right]_a^b\\=\frac13h^3+\frac12ph^2+hr-\frac13p\left(-h\right)^3-\frac12p\left(-h\right)^2-\left(-h\right)r\\=\frac23h^3+2hr\\=\frac13h\left(2ph^2+6r\right)\\=\frac13h\left(y_a-2y_b+y_c+4y_b\right)\\=\frac13h\left(y_a+4y_b+y_c\right)\\
∫ a b f ( x ) d x = F ( b ) − F ( a ) ∫ a b f ( p x 2 + q x + r ) d x = [ 3 1 p x 3 + 2 1 p x 2 + x r ] a b = 3 1 h 3 + 2 1 p h 2 + h r − 3 1 p ( − h ) 3 − 2 1 p ( − h ) 2 − ( − h ) r = 3 2 h 3 + 2 h r = 3 1 h ( 2 p h 2 + 6 r ) = 3 1 h ( y a − 2 y b + y c + 4 y b ) = 3 1 h ( y a + 4 y b + y c ) 然后我们将每个区域的面积求出来
F
0
=
1
3
h
(
y
0
+
4
y
1
+
y
2
)
F
1
=
1
3
h
(
y
2
+
4
y
3
+
y
4
)
F
2
=
1
3
h
(
y
4
+
4
y
5
+
y
6
)
.
.
.
.
.
.
.
.
F
m
=
1
3
h
(
y
n
−
2
+
4
y
n
−
1
+
y
n
)
.
F_0 = \frac13h\left(y_0+4y_1+y_2\right)\\ F_1 = \frac13h\left(y_2+4y_3+y_4\right)\\ F_2 = \frac13h\left(y_4+4y_5+y_6\right)\\........\\ F_m= \frac13h\left(y_{n-2}+4y_{n-1}+y_n\right)\\.
F 0 = 3 1 h ( y 0 + 4 y 1 + y 2 ) F 1 = 3 1 h ( y 2 + 4 y 3 + y 4 ) F 2 = 3 1 h ( y 4 + 4 y 5 + y 6 ) . . . . . . . . F m = 3 1 h ( y n − 2 + 4 y n − 1 + y n ) . 我们得到最终的公式,也就是辛普森规则
F
=
1
3
h
(
y
0
+
4
y
1
+
2
y
2
+
4
y
3
+
2
y
4
+
4
y
5
+
.
.
.
.
.
.
.
.
.
+
2
y
n
−
2
+
4
y
n
−
1
+
y
n
)
F = \frac13h\left(y_0+4y_1+2y_2+4y_3+2y_4+4y_5+.........+2y_{n-2}+4y_{n-1}+y_n\right)
F = 3 1 h ( y 0 + 4 y 1 + 2 y 2 + 4 y 3 + 2 y 4 + 4 y 5 + . . . . . . . . . + 2 y n − 2 + 4 y n − 1 + y n ) 然后我们开始写按照辛普森规则编写程序
#lang racket
( define ( sum term a next b)
( if ( > a b)
0
( + ( term a)
( sum term ( next a ) next b) ) ) )
( define ( inc n) ( + n 1 ) )
( define ( cube n) ( * n n n) )
( define ( simpson- inregral f a b n)
( let ( ( h ( / ( - b a) n) ) )
( define ( simpson- term k)
( * ( cond ( ( or ( = k 0 ) ( = k n) ) 1 )
( ( even? k) 2 )
( else 4 ) ) ( f ( + a ( * k h) ) ) ) )
( if ( odd? n) ( simpson- inregral f a b ( + n 1 ) ) ( / ( * ( sum simpson- term 0 inc n) h) 3.0 ) ) ) )
( simpson- inregral cube 0 1 1000 )
( simpson- inregral cube 0 1 10 )
运行结果:
0.25
0.25
结果比书中的计算要精确。