第4章 数值微分与积分(附录)

合集下载

数值分析-第4章 数值积分和数值微分

数值分析-第4章  数值积分和数值微分

A0+A1=2 A0x0+A1x1=0 A0x02+A1x12=2/3 A0x03+A1x13=0
A0 A1 1 解得: 1 x 0 x1 3
求积公式为
1 1 1 f ( x)dx f ( ) f ( ) 3 3
x f(x)
数值分析
1 4
2 4.5
3 6
4 8
5 8.5
1
一、数值积分的基本概念 求积节点 数值积分定义如下:是离散点上的函数值的线性组合
I [ f ] f ( x)dx I n [ f ] Ai f ( xi )
b a i 0 n
称为数值积分公式
称为求积系数,与f (x)无关,与积分区间和求积节点有关
b a
Rn ( x) dx
定理:形如 Ak f ( xk ) 的求积公式至少有 n 次代数精度
A 该公式为插值型(即: k a l k ( x)dx )
数值分析
b
5
例1 试确定参数A0,A1,A2,使求积公式
1 f ( x)dx A0 f (1) A1 f (0) A2 f (1)
证明 因为Simpson公式对不高于三次的多项式精确成立。即

b
a
p 2 ( x)dx
ba ab [ p 2 (a) 4 p 2 ( ) p 2 (b)] 6 2
构造三次多项式H3(x),使满足 H3(a)=(a) ,H3(b)=(b),
H 3 (( a b) / 2) f (( a b) / 2), H 3 (( a b) / 2) f (( a b) / 2), 这时插值误差为
1

数值分析课件 第4章 数值积分与数值微分

数值分析课件 第4章 数值积分与数值微分

第4章 数值积分与数值微分1 数值积分的基本概念实际问题当中常常需要计算定积分。

在微积分中,我们熟知,牛顿—莱布尼兹公式是计算定积分的一种有效工具,在理论和实际计算上有很大作用。

对定积分()ba I f x dx =⎰,若()f x 在区间[,]ab 上连续,且()f x 的原函数为()F x ,则可计算定积分()()()ba f x dx Fb F a =-⎰ 似乎问题已经解决,其实不然。

如1)()f x 是由测量或数值计算以数据表形式给出时,Newton-Leibnitz 公式无法应用。

2)许多形式上很简单的函数,例如222sin 1(),sin ,cos ,,ln x x f x x x e x x-=等等,它们的原函数不能用初等函数的有限形式表示。

3)即使有些被积函数的原函数能通过初等函数的有限形式表示,但应用牛顿—莱布尼兹公式计算,仍涉及大量的数值计算,还不如应用数值积分的方法来得方便,既节省工作量,又满足精度的要求。

例如下列积分24111ln11arc 1)arc 1)xdxxtg tg C++=+⎡⎤+++-+⎣⎦⎰对于上述这些情况,都要求建立定积分的近似计算方法—数值积分法。

1.1 数值求积分的基本思想根据以上所述,数值求积公式应该避免用原函数表示,而由被积函数的值决定。

由积分中值定理:对()[,]f x C a b∈,存在[,]a bξ∈,有()()()baf x dx b a fξ=-⎰表明,定积分所表示的曲边梯形的面积等于底为b a-而高为()fξ的矩形面积(图4-1)。

问题在于点ξ的具体位置一般是不知道的,因而难以准确算出()fξ。

我们将()fξ称为区间[,]a b上的平均高度。

这样,只要对平均高度()fξ提供一种算法,相应地便获得一种数值求积分方法。

如果我们用两端的算术平均作为平均高度()f ξ的近似值,这样导出的求积公式[()()]2b a T f a f b -=+ (1.1)便是我们所熟悉的梯形公式(图4-2)。

数值分析(清华大学第五版) 第四章数值积分和微分

数值分析(清华大学第五版) 第四章数值积分和微分


b
a
l j ( x)dx ( x x j -1 )( x x j 1 ) ( x x j 1 )( x x j 1 ) ( x xn ) ( x j xn )
dx
作变量代换, x a th ,则
n t (t 1) h (t j 1)(t j 1) (t n) 上式 dt b a 0 j ( j 1) 1(1) ( j n) 1 n t (t 1) (t j 1)(t j 1) (t n) dt n 0 j ( j 1) 1 (1) ( j n)
该积分仅与 n 有关,与 a, b, f ( x) 无关.
③ 设 n 1 个线性无关的次数 n 的多项式为 e0 ( x), 等距结点 x0 ,
过同样 , en ( x) ,
, xn , 对每一个 ei ( x) 利用 Newton Cotes 公式求积,且积分
余项均为零.即有
n b 1 b a a e0 ( x) dx c j e0 ( x j ) j 0 n 1 b e1 ( x)dx c j e( x j ) a (1) b a j 0 n b 1 b a a en ( x)dx c j en ( x j ) j 0
, n) ,
又设过该结点的次数 n 的 Lagrange插值多项式
P( x) f ( x j )l j ( x) ,
j 0
n
余项
f ( ) R( x) ( x) . (n 1)!
( n 1)
代数精确度
b n
定义 设求积公式 f ( x)dx A j f ( x j ) R(a, b, f ) .

研究生课程《数值分析》第四章数值积分与数值微分

研究生课程《数值分析》第四章数值积分与数值微分

b
a
f
(x)dx
1 (b 6
a)
f
(a)
4
f
(a
2
b)
f
(b)
y=f(x)
梯形公式把 f(a), f(b) 的加权平均值
1 f (a) f (b)
2
aa ((aa++bb))//22 bb
作为平均高度 f( ) 的近似值而获得的一种数值积分方法。
中矩形公式把 [a,b] 的中点处函数值
f
ab 2
定义 (代数精度) 设求积公式(1)对于一切次 数小于等于 m 的多项式( f (x) 1, x, x2 , , xm 或 f (x) a0 a1x a2 x 2 am x m )是准确的,而对于 次数为 m+1 的多项式是不准确的,则称该求积公 式具有 m 次代数精度(简称代数精度)
作为平均高度 f( ) 的近似值而获得的一种数值积分方法。
Simpson公式是以函数 f(x)在 a, b, (a+b)/2 这三点的函数
值 f(a),
f(b),
f
a
2
b
的加权平均值

1 ( f (a) 4 f ( a b ) f (b))作为平均高度 f() 的近
6
2
似值而获得的一种数值积分方法。
将积分区间细分, 在每个小区间内用简单函数代替复 杂函数进行积分,这是数值积分的思想。本章主要讨论 用代数插值多项式代替 f(x) 进行积分。
5.1.1 数值积分的基本思想
积分 I b f (x)dx 在几何上可以理解为由 x=a, x=b, a
y=0 以及 y = f(x) 这四条边所围成的曲边梯形面积。如图 1 所 示,而这个面积之所以难于计算是因为它有一条曲边 y=f(x)。

数值分析数值计算方法课程课件PPT之第四章数值积分与数值微分

数值分析数值计算方法课程课件PPT之第四章数值积分与数值微分
4
( x a )( x b ) d x a
b
[ a , b ].
(2) f ( x) C [a, b], 则 辛 普 森 公 式 的 截 断 差 误 为:
f ()b a b 2 R ( x a )( x ) ( x b ) d x S a 4 ! 2
b ab a 4 ( 4 ) ( ) f ( ), 180 2
n 1
I k 求出积分值Ik,然后将它们累加求和,用 作为所求积分 I的近 k 0 似值。
h I f ( x ) dx f ( x ) dx f ( x ) f ( x ) k k 1 a x k 2 k 0 k 0 h f ( x ) 2 ( f ( x ) f ( x ) ... f ( x )) f ( x ) 0 1 2 n 1 n 2

1 S f ( a ) 4 f ( x ) 2 f ( x ) f ( b ) 1 n k k 2 6 k 0 k 1
n 1 n 1
称为复化辛普森公式。
18
类似于复化梯形公式余项的讨论,复化辛普森公式的求 积余项为
R s h f 2880 ba
1

4.3 复化求积公式
问题1:由梯形、辛普森和柯特斯求积公式余项,分析随着求 积节点数的增加,对应公式的精度是怎样变化? 问题2:当n≥8时N—C求积公式还具有数值稳定性吗?可用增 加求积节点数的方法来提高计算精度吗? 在实际应用中,通常将积分区间分成若干个小区间, 在每个小区间上采用低阶求积公式,然后把所有小区间上 的计算结果加起来得到整个区间上的求积公式,这就是复 化求积公式的基本思想。常用的复化求积公式有复化梯形 公式和复化辛普森公式。

04数值积分与微分.pdf

04数值积分与微分.pdf

d W d S
V V U
S
S
³ ³ / [ \ GW D VLQ W E FRV WGW





\

[
;<
;<
³³ 3
S [ \ G[G\
:
[ D

\ E
d
D
E

D
7 [ I [
I [
7 [
I
cc KN
[

[N
[

[N

[KN [N [N
[[N [[N [N[N
[N
³> I [ 7 [ @G[
[N
³ I cc [N
[ [N [ [N G[
([SHULPHQWV LQ 0DWKHPDWLFV






c d
q
r
³E [ H G[ D
³ E VLQ [ G[ D[
d





c
c

\
V
V
U
R
[
V NP
V NP
U NP D a
[ D FRV W \ E VLQ W E a
[N
[N
K
I cc [N


, 7Q
, 7Q K
E
³ I [ G[ 7 Q
D
¦ K
Q N
I cc [ N
³ o


E
I
[ G[
D
I

第4章 数值微分和积分

第4章 数值微分和积分

(4.1.13)
φ2 (h) = f '( x) − ∑ ⎜
⎛ 1 ⎞ a − 1⎟ 2 2 n h 2 n 2n−2 ⎠ 2 −1 n=2 ⎝ 2
(4.1.14)
42
这样,用 φ2 ( h) 近似 f '( x) 将是 O(h ) 的精度。继续逐次将步长减半,会得到递推关系:
4
h 22( m −1) φm −1 ( ) − φm −1 (h) 2 φm (h) = 2( m −1) 2 −1
f '( x) ≈ L'2 ( x) =
⎤ 1 ⎡⎛ 2 x − x1 − x2 ⎞ ⎛ 2 x − x0 − x2 ⎞ ⎛ 2 x − x0 − x1 ⎞ ⎜ ⎟ f ( x0 ) − 2 ⎜ ⎟ f ( x1 ) + ⎜ ⎟ f ( x2 ) ⎥ ⎢ h h h 2h ⎣ ⎝ ⎠ ⎝ ⎠ ⎝ ⎠ ⎦
f ′ ( x ) = lim
如果取函数 f ( x) 的一阶数值微商为:
h →0
f ( x + h) − f ( x) h
f '( x) =
f ( x + h) − f ( x ) h
(4.1.2)
(4.1.2)式称为数值微分的 Euler 方法, 根据(4.1.1) ,其误差为 Ο ( h ) ,是 h 的量级,称为一阶精度。 这是两点微商公式,是用向前差商近似微商。对于泰勒展开
f ( x − h ) = f ( x ) − hf ′ ( x ) +
可以用向后差商近似微商,
h2 f ′′ ( x ) − 2!
+
hn ( n) f ( x) + n!
(4.1.3)
f '( x) =

《数值分析-李庆杨》第4章 数值积分与数值微分-文档资料

《数值分析-李庆杨》第4章  数值积分与数值微分-文档资料

(a

b).得到的求积公式就是中矩形公式。再令

f (x) x2, 代入(1.4)式的第三式有

分 析 》
A0 x02
(b
a)( a
b)2 2

b
a 4
(a2
b2)

b x2dx 1 (b3 a3 ),
a
3
说明中矩形公式对f (x) x2不精确成立,故它的代数精确度为1.
当f(x)=x2时(1.4)式的第三个式子不成立,因为
b a (a2 b2 ) b x2dx 1 (b3 a3).
2
a
3
故梯形公式(1.1)的代数精确度为1.
第4章 数值积分与数值微分
在方程组(1.4)中如果节点xi及系数Ai都不确定,那么方 程组(1.4)是关于xi及Ai(i=0,1,…,n)的2n+2个参数的非线性方 程组。此方程组当n>1时求解是很困难的,但当n=0及n=1的 情形还可通过求解方程组(1.4)得到相应的求积公式。
练习 设有求积公式
1
1 f (x)dx A0 f (1) A1 f (0) A2 f (1)
试确定系数A0, A1, A2, 使上述求积公式的代数精度尽量高.
三、插值型求积公式
第4章 数值积分与数值微分
在n 1个互异节点a x0 x1 xn b上已知函数值f0,

A1

1(b a).于是得 2
数 值
I ( f ) b f ( x)dx b a [ f (a) f (b)]
a
2

析 这就是梯形公式(1.1),它表明利用线性方程组(1.4)推出的求积公式,

数值微分与数值积分资料

数值微分与数值积分资料

1 2
C (1) 1
2
1 6
C(2) 0
4 6
C(2) 1
1 6
C(2) 2
3
1 8
C(3) 0
3 8
C(3) 1
3 8
C(3) 2
1 8
C(3) 3
4
7 90
C(4) 0
16 45
C
(4) 1
2 15
C(4) 2
16 45
C(4) 3
7C
90
(4 4
)
5 19
25
25
25
25
19
288
96
144 144
96
288
6 41
9
9
34
9
9
41
840
35
280 105 280
25
840
7 751 3577 1323 2989 2989 1323 3577 751 17280 17280 17280 17280 17280 17280 17280 17280
a
Ck f (xk )
k 0
称为牛顿-柯特斯求积公式,Ck 称为柯特斯系数。
15
柯特斯系数性质
n
容易验证 Ck 1 k 0

Ck
1 ba
Ak
b
Ak a lk (x)dx

n
Ck
k 0
n
1
k0 b a
b
a lk (x)dx
1
ba
b a
n k 0
lk
( x)dx
b
1
a
b
1dx 1
第4章 数值积分和数值微分

数值分析第四章数值积分-69页精选文档

数值分析第四章数值积分-69页精选文档

x
m k

1 m 1
b m 1 a m 1
由上面代数精度条件确定求积公式可分两种情形:
1. 若事先给定求积节点xk(k=0,…,n),例如被积函数以表的形式 给出时xk确定,可令m=n,由上式确定n+1个系数Ak即可---待定系数法和插值法。
2. 若xk和Ak都可选择,令m=2n +1,确定xk和法Ak ---Gauss法
求积系数,与被
b
n
积函数无关
f (x)dx
a
Ak f(xk)
k0
求积节 点
像这样,将积分用若干节点上被积函数值的线性组合来表示
的数值积分公式称为机械求积公式。
求积误差
b
n
R[f] f(x)dx a
Akf(xk)
k0
机械型求积公式的构造归结为,确定求积节点xk和求积系
Case 1---方法1
Case 1---方法2 §1 插值型求积 公式
插值型积分公式
/*interpolatory quadrature*/
思 路
利用插值多项式
Pn(x)f(x)则积分易算。
在[a, b]上取 a x0 < x1 <…< xn b,做 f 的 n 次插值
n
多项式 Ln(x) f(xk)lk(x),即得到 k0
数Ak,使在某种意义下精确度较高。总之,要解决三个问 题:
1. 精确度的度量标准;
2. 如何构造具体的求积公式;
3. 具体求积公式构造出来后,误差如何估计?
问题1
定义:代数精度
若某个求积公式对次数 m 阶的多项式准确成立,而对 m+1 阶 的 多 项 式 不 一 定 准 确 成 立 。 即 对 应 的 误 差 满 足 : R[ Pk ]=0 对任意 k m 阶的多项式成立,且 R[ Pm+1 ] 0 对某 个 m+1 阶多项式成立,则称此求积公式的代数精度为 m 。

第四章 数值积分与数值微分

第四章 数值积分与数值微分
一.插值型求积公式
寻找一个足够精度的简单函数p(x)代替f(x) ,于是
有 a
b
f ( x)dx p( x)dx,把p(x)取成插值多项式,
a
b
则可得到插值型求积公式。
设给定节点 a x0 x1 x2 xn b
并已知这些节点上的函数值 f ( xk ) (k 0,1,, n)
当求积系数由 Ak
l ( x)dx
a k
b
所唯一确定时,所得的求积公式称为插值型求 积公式。 Remark:由截断误差可知,插值型求积公式 至少具有n次代数精度。
2018/11/17 17
二. Newton-cotes公式
h (b a) n 将[a,b]分为n等份, 取节点 xk a kh(k=0,1,…,n)
a a a
m a0 Ak a1 Ak xk am Ak xk k 0 k 0 k 0
2018/11/17 5
n
n
n
求积公式的代数精确度(续)

b
a
dx Ak
n

b
a
xdx Ak xk
k 0 n

b
a
x dx Ak x
m k 0

k 0
3
2018/11/17 12
三.收敛性与稳定性
Ak f ( xk ) f ( x)dx (lim R[ f ] 0), 如果 lim a n h 0
b n
( xi xi 1 ),则称该求积公式是收敛的。 其中 h max 1 i n
k 0
n
如果求积公式对舍入误差不敏感(误差能够控 制),则称该求积公式是稳定的。

计算物理学(刘金远)第4章-数值微分与积分(课后习题及答案)

计算物理学(刘金远)第4章-数值微分与积分(课后习题及答案)

4.1数值第4章数值微分与积分微分【4.1.1】已知x 2.5 2.6 2.7 2.8 2.9y12.182513.463714.879716.444618.1741(1)用前差、后差和中心差求 2.7x =的一阶导数值(2)用中心差求 2.7x =的二阶导数值【4.1.2】用泰勒展开()()()()()()()2312!3!i i i i i f x f x f x f x f x x x x +¢¢¢¢¢¢=+D +D +D +K\*MERGEFORMAT (1.1)()()()()()()()2312!3!i i i i i f x f x f x f x f x x x x -¢¢¢¢¢¢=-D +D -D +K\*MERGEFORMAT (1.2)(1)推导微分公式()()()()1i i i f x f x f x O x x+-¢=+D D ()()()()1i i i f x f x f x O x x--¢=+D D ()()()()2112i i i f x f x f x O x x+--¢=+D D ()()()()()()1122i i i i f x f x f x f x O x x +--+¢¢@+D D 另外:()()()()()()()()()()111112''2i i i i i i i i i i f x f x f x f x f x f x h h f x h h f x f x f x h +-++-----¢¢»=-+=【4.1.3】采用泰勒展开方法确定下列数值微分公式0000(,)()()(2)x h af x bf x h cf x h f =++++提示:取00(,)'()x h f x f =,00(,)''()x h f x f =【解】2300001()()'()''()()2f x h f x hf x h f x O h +=+++230000(2)()2'()2''()()f x h f x hf x h f x O h +=+++00023000()()(2)1()()(2)'()(2)''()max(,,)()2af x bf x h cf x h a b c f x b c hf x b c h f x a b c O h ++++=+++++++如果:(1)取00(,)'()x h f x f =,则有关系:210; (2)1; (2)02a b c b c h b c h ++=+=+=得到:123,,c b a =-==-(2)取00(,)''()x h f x f =,则有关系:210; (2)0; (2)12a b c b c h b c h ++=+=+=得到:222121,,c b a ==-=【4.1.4】(1)二阶微分写为:11/2211/21/22()2()()''()(/2)()2()()''()(/2)j j j j j j j j f x f x f x f x h f x f x f x f x h +++++-+=-+=\*MERGEFORMAT (1.3)有什么区别(2)1/2111/2211/2()()'(()()/)'()/2''(2)()2()()/2j j j j j j j j j j f x f x f x f x h f f x f x x h hf x f x f x h h ++++++---==-=-+\*MERGEFORMAT (1.4)结果对否,为什么?【解】对于(1.3)式23111()()'()''()'''()26j j j j j f x f x hf x h f x h f x +=++++L \*MERGEFORMAT (1.5)231/2111()()'()(/2)''()(/2)'''()226j j j j j f x f x hf x h f x h f x +=++++L \*MERGEFORMAT (1.6)将2(1.6)(1.5)´-,得,(非对称,一阶精度),对称,二阶精度)对于(1.4)式应该是1/2111/221()()()()'()'()/2''()()2()()/4j j j j j j j j j j f x f x f x f x h f f x f x x hhx f hf f x x h +++++--=--==-+\*MERGEFORMAT (1.7)11'()()()j j j f x f x f x h++=-,即差分定义要围绕j x 点,而(1.4)式中1'()j f x +的下一步定义111/2()('())/2j j j f x f x f x h +++-=与j x 点无关,结果是错的。

数值分析第四章数值积分与数值微分

数值分析第四章数值积分与数值微分

称 f 为区间 a , b 的平均高度.
3、求积公式的构造
若简单选取区间端点或中点的函数值作为平均高度,则 可得一点求积公式如下:
左矩形公式: Iffaba
中矩形公式: Iff a2bba
右矩形公式: Iffbba
左矩形公式: Iffaba
0
0
上述积分称为第二类椭圆积分。
WhatI’st’tshseo Ocorimgipnlaelx that funwcteiocnan?!not
get it.
2. 有些被积函数其原函数虽然可以用初等函数表示成有限 形式,但表达式相当复杂,计算极不方便. 例如函数:
x2 2x2 3
并不复杂,但它的原函数却十分复杂:
(i) 对所有次数≤m次的多项式 Pm (x,)有
R (P m ) I(P m ) In(P m ) 0
(ii)存在m+1次多项式 Pm1(x),使得
R (P m 1 ) I(P m 1 ) In (P m 1 ) 0
上述定义中的条件(i),(ii)等价于:
( i )R ( x k ) I ( x k ) I n ( x k ) 0 ,( 0 k m )
f x xn1 的余项为零。
由于 f x xn1,所以 fn1xn1!
即得
R(f)hn2 n n (tj)dt 0
j0
引进变换 t u n ,因为 n 为偶数,故 n 为整数,
2
2
于是有
n
R(f)hn2
2 n
2
n (unj)du
且每个波纹以近似 2 英寸为一个周期. 求制做一块波纹瓦所需
铝板的长度L.
这个问题就是要求由函数 f xsinx

数值分析——第4章 数值积分与微分法(“公式”相关文档)共76张

数值分析——第4章 数值积分与微分法(“公式”相关文档)共76张

n
a Pm1( x)dx Ak Pm1( xk ).
k0
则称求积公式具有m次代数精度.
注①求积公式具有m次代数精度 0 i m有
b xidx a
n
Ak x i .

b xm1dx
a
n
Ak x m1 .
k0
k0
§1 Newton—cotes公式
1.1 插值型求积公式与科茨系数(cotes系数)
§1 Newton—cotes公式
n
In Ak f (xk )
1.1 插值型求积公式与科茨系数(cotesk系0 数)
1. 插值型求积公式
将[a, b]n等分:h b a 为步长,节点为等分点: n
xk a kh.(k 0,1,2,..., n) .
取I≈In.余项记为:
b
Rn (In ) a Rn ( x)dx
同理可得复合型Simpson公式:
b a
n1
n1
Sn
6n
[ f (a) 2 f (xk )
k 1
f (b) 4
k0
f
(
x
k
1
)].
2
复合Cotes公式:
b a
n1
n1
n1
Cn
[7 f (a) 14
90n
k 1
f ( xk ) 7 f (b) 12
k0
f
(
x
k
1 2
)
32
式,再将结果求和. 设x=a+th. (k=0,1,2,…,n), h b a
b
h
n1
a
f ( x)dx
[ f (a) 2

第四章 数值微分与数值积分

第四章  数值微分与数值积分
Company Logo
插值型微分计算公式
利用数据表构造函数f (x)的插值多项式 Pn(x),并取Pn ‘(x)的值作为f ‘(x)的近似值, 这样建立的数值公式f ‘(x)≈Pn’(x) 称为插值 型微分公式。
若取拉氏插值式,则得
f ( n1) ( ) f ( x) Ln ( x) ( x) (n 1)!
b
( x xk ) Ai l i ( x)dx dx a a k 0 ( xi xk )
b b n k i
i 0
a
所以

b
a
f ( x)dx Ai f ( xi )
i 0
n
上式中Ai称为求积系数,xi叫做求积节点。
Company Logo
差商型微分计算公式
考虑到差商的特点,用计算函数差商的 方法来近似求函数的导数。 微积分中的导数f '(x)表示f (x)在x0处切 线P的斜率;而差商表示过(x0,f (x0))和(x0+h, f (x0+h))两点的直线Q的斜率,是一条过x0的 割线;可见差商型微分计算公式是用近似值 内接弦的斜率代替准确值切线的斜率。
( n 1) f ( ) ' R( x) f ' ( x) Ln ( x) ' ( x) (n 1)!
Company Logo
取等距节点(xi=x0+ih,i=0,1,…,n)时常用公式
1.两点公式(n=1)
' 1
L1 ( x)
f ( x1 ) f ( x0 ) f ' ( x1 ) h

Company Logo
2.三点公式(n=2)
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第4章附录
4.2.2 复化求积分
例题4.2.5计算程序
//simp.c//
# include<stdio.h>
# include<math.h>
# define f(x) 4./(1+(x)*(x))
void main(void)
{ float a = 0., b = 1., s, h;
int n = 100, i;
h = (b-a)/n;
s = f(a)+f(b);
for(i=1;i<=n-1;i++)
{ if(i%2==0)
s = s+2.0*f(a+i*h);
else
s=s+4.*f(a+i*h);
}
s = s*h/3;
printf("%10.5f\n",s);
}
====================================
4.2.3 变步长求积分公式和龙贝格求积分公式
例题4.2.6计算程序
!!!!Trapezia.for!!!
program trapezia
external f
real(8) f,a,b,s
a=0.0; b=1.0; eps=1.e-6
call trap(a,b,f,eps,s,n)
write(*,10) s,n
10 format(1x,'s=',d15.6,3x,'n=',i5)
end
function f(x)
real(8) x
f=exp(-x*x)
end
subroutine trap(a,b,f,eps,t,n)
real(8) a,b,f,t,fa,fb,h,t0,s,x
fa=f(a); fb=f(b)
n=1; h=b-a
t0=h*(fa+fb)/2.0
5 s=0.0
do 10 k=0,n-1
x=a+(k+0.5)*h
s=s+f(x)
10 continue
t=(t0+h*s)/2.0
if (abs(t-t0).ge.eps) then
t0=t
n=n+n
h=h/2.0
goto 5
end if
return
end
%%% demo_aTrapInt.m %%%
function demo_aTrapInt
clc;clear; format long;
[T nsub] = aTrapInt(@f01,0,1,0.000001)
end
function [T nsub]= aTrapInt(f,a,b,eps)
tol = 1; nsub = 1;
inall = 0;
T = 0.5*(b-a)*(f(a)+f(b));
while tol > eps
T0 = T;
nsub = 2*nsub;
n = nsub + 1; % total number of nodes h = (b-a)/nsub; % stepsize
x = a:h:b; % divide the interval inall = inall + sum(f(x(2:2:n-1)));
T = 0.5*h * (f(a)+2*inall+f(b));
tol = abs(T-T0);
end
end
%%% demo_aSimpInt.m%%%
function demo_aSimpInt
clc;clear; format long;
[S nsub] = aSimpInt(@f01,0,1,0.000001)
end
function [S nsub] = aSimpInt(f,a,b,eps)
nsub = 2;
even = f((a+b)/2);
odd = 0;
S = (b-a)*(f(a) + 4*even + 2*odd + f(b))/6;
inall = even + odd;
tol = 1;
while tol > eps
S0 = S;
nsub = 2*nsub;
n = nsub + 1; % total number of points
h = (b-a)/nsub; % stepsize
x = a:h:b; % divide the interval
even = sum(f(x(2:2:n-1))); % 偶节点
odd = inall; % 间隔取半前的全部内节点inall 在间隔取半时全部变为奇节点S = (h/3)*( f(a) + 4*even +2*odd + f(b));
inall = even + odd;
tol = abs(S - S0);
end
====================================
例题4.2.7计算程序
!!!Simpson.f90
program simpson ! f=sin(x),fp=cos(x)
parameter(pi=3.1415926,n=64)
real(8) a(0:n),b(0:n),c(0:n),r(0:n),u(0:n)
real(8) x(0:n),f(0:n),fp(0:n),dx,d
integer i
open(2,file='exa4_1_3_old.txt')
open(5,file='exa4_1_3.txt')
dx = 2.0*pi/n
d = 3.0/dx
fp(0) = 1.0 ! fp(0) = cos(0) =1
fp(n) = 1.0 ! fp(n) = cos(2pi)=1
do i = 0,n
x(i) = i*dx; f(i) = sin(x(i))
write(2,'(2x,2f10.6)') x(i),f(i)
end do
a = 1.;
b = 4.;
c = 1.
do i = 1,n-1
r(i) = 3.0*(f(i+1)-f(i-1))/dx
end do
r(1) = r(1)-fp(0); r(n-1) = r(n-1)-fp(n)
call tridag(a,b,c,r,u,n-1) ! 注意三对角矩阵是n-1维u(0) = fp(0); u(n) = fp(n)
do i = 0,n
write(5,'(2x,2f10.6)') x(i),u(i)
end do
end
subroutine tridag(a,b,c,r,u,n)
parameter (nmax=500)
integer n,j
real(8) a(0:n),b(0:n),c(0:n),r(0:n),u(0:n)
real(8) bet,gam(nmax)
if(b(1).eq.0.)pause 'tridag: rewrite equations'
bet=b(1)
u(1)=r(1)/bet
do j=2,n
gam(j)=c(j-1)/bet
bet=b(j)-a(j)*gam(j)
if(bet.eq.0.)pause 'tridag failed'
u(j)=(r(j)-a(j)*u(j-1))/bet
end do
do j=n-1,1,-1
u(j)=u(j)-gam(j+1)*u(j+1)
end do
return
end
!!!Romberg.for
program romberg
external f
double precision f,a,b,s
a=0.0
b=1.0
eps=0.000001
call romb(a,b,f,eps,s,n)
write(*,10) s,n
10 format(1x,'s=',d15.8,1x,'n=',i6)
end program romberg
function f(x)
double precision f,x
! f=log(1+x)/(1+x*x)
! f=x/(4+x*x)
f=4./(1.+x*x)
return
end
subroutine romb(a,b,f,eps,t,n)
dimension y(10)
double precision a,b,f,t,y,h,p,s,q
h=b-a
y(1)=h*(f(a)+f(b))/2.0
m=1
n=1
10 p=0.0
do 20 i=0,n-1
20 p=p+f(a+(i+0.5)*h)
p=(y(1)+h*p)/2.0
s=1.0
do 30 k=1,m
s=4*s
q=(s*p-y(k))/(s-1)
y(k)=p
p=q
30 continue
if ((abs(q-y(m)).ge.eps).and.(m.le.9)) then
m=m+1
y(m)=q
n=n+n
h=h/2.0
goto 10
end if
t=q
return
end。

相关文档
最新文档