第六章 数值微分
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
微分一次及两次, 微分一次及两次,令 x = 0 ,得:
′ ≈ f 2 + 4 f1 3 f 0 f0 2h
′′ ≈ f 2 2 f1 + f 0 f0 2 h
二次多项式, 若已知函数是一过点 x = [0,1, 2], y = [1,0,0] 二次多项式, 该系数可由polyfit获得,再用polyder求导即可. 获得,再用 求导即可. 该系数可由 获得 求导即可
坐标轴上两个相邻节点之间的长度, 其中 h 代表 x 坐标轴上两个相邻节点之间的长度, 可用线性插值函数A, 则 f 0′ = f ′( x0 ) 可用线性插值函数 B, C的梯度来 的梯度来 分别称为向前差分,向后差分,中心差分, 分别称为向前差分,向后差分,中心差分, 向前差分 近似, 近似, 具体如下: 具体如下:
或
d=polyfit(xd-a,yd,L-1); deriv=polyval(d,0); for n=1:L-1 d=polyder(d); deriv=[polyval(d,0),deriv]; end deriv
结果按导数阶数从大到小排列,最后一个为函数值: 结果按导数阶数从大到小排列,最后一个为函数值:
(3) 式 <1> 减式 <2> 得:
′ + 1 h3 f i′′′ + fi +1 fi 1 = 2hfi 3 解得中心差分近似 中心差分近似: 解得中心差分近似:
′ = f i +1 f i 1 + E fi 2h
h 2 ′′′ E ≈ fi 6
的差分近似: 下面用 f i , fi +1 , f i + 2 来推导 fi′ 的差分近似: 由
微分一次及两次, 微分一次及两次,令 x = 0 ,得: ′ ≈ f1 f 1 ′′ ≈ f1 2 f 0 + f 1 f0 f0 2h h2 (3) 过点 xi (i = 2, 1,0) 的Lagrange插值多项式为: 插值多项式为: 插值多项式为
f ( x) ≈ g ( x) ( x x1 )( x x0 ) ( x x2 )( x x0 ) = f 2 + f 1 ( x2 x1 )( x2 x0 ) ( x1 x2 )( x1 x0 ) ( x x2 )( x x1 ) + f0 ( x0 x2 )( x0 x1 )
′ = f i +1 f i + E fi h
其中: 其中:
h ′′ E ≈ fi 2
(2) fi 1 关于 xi 的Taylor展开式为: 展开式为: 展开式为
h 2 ′′ h3 ′′′ h 4 (4) fi 1 = f i hfi′ + fi fi + fi + < 2 > 2 6 24 解得向后差分近似 向后差分近似: 解得向后差分近似: h ′′ ′ = f i fi 1 + E fi E ≈ fi h 2
插值多项式的所有阶导数都可以用命令poly_drv计算: 计算: 插值多项式的所有阶导数都可以用命令 计算
function der = poly_drv(xd,yd,a) m = length(xd)-1; d = polyfit(xd-a, yd, m); c = d(m:-1:1); fact(1)=1; for i=2:m fact(i)=i*fact(i-1); end der = c.*fact;
c=polyfit([0,1,2],[1,0,0]); cd1=polyder(c); cd2=polyder(cd1) dd1=polyval(cd,0); dd2=polyval(cd2,0)
(2) 过点 xi (i = 1,0,1) 的Lagrange插值多项式为: 插值多项式为: 插值多项式为
y ( k ) (0) 的近似.值得注意的是,如果有 的近似.值得注意的是, 这些都是
n+1个节点,则可以求得 n 阶导数的近似. + 个节点 个节点, 阶导数的近似.
处的导数值. 通过坐标变换可以计算任意点 x 处的导数值. 处的导数值, 若求函数 g ( x) 在 x = a 处的导数值, 采用变换
y
f 1 f ( x)
A
向前差分
y
f 1 f ( x) f1
向后差分
f0
f0
B
′ ≈ f1 f 0 f0 h
x
f1
o x1 x1 x0
x1
x
f ( x)
f0
′ ≈ f 0 f 1 f0 h ′ ≈ f1 f 1 f0 2h
x
f1
C
o x1 x0
x1
差分近似方法与插值多项式密切相关. 差分近似方法与插值多项式密切相关.考虑 p+1个点 个点
h 2 ′′ h3 ′′′ h 4 (4) fi +1 = fi + hf i′ + fi + fi + fi + 2 6 24 fi +2 4h 2 ′′ 8h3 ′′′ 16h 4 (4) = fi + 2hf i′ + fi + fi + f i + 2 6 24 4 f i +1 f i + 2 2h3 ′′′ = 3 f i + 2hf i′ + fi + 3
3 f i 4 f i 1 + fi 2 h 2 ′′′ f i′ = +E E≈ fi 2h 3
二阶导数的差分近似同理可得, 二阶导数的差分近似同理可得,基本原则是消去 一阶导数项,再尽可能消掉三阶或更高阶的导数项. 一阶导数项,再尽可能消掉三阶或更高阶的导数项. (1) 利用 f i +1 , f i , f i 1推导 fi′′ 的差分近似 h 4 (4) fi +1 + f i 1 = 2 fi + h 2 fi′′ + fi + 12 f i′′的中心差分近似
h 2 ′′′ E≈ fi 3
两式相消, 两式相消,得:
解得三个节点的向前差分近似: 解得三个节点的向前差分近似:
′ = fi + 2 + 4 fi +1 3 fi + E fi 2h
同理, 可得到三个节点的向后差分近似: 同理,利用 f i , fi 1 , fi 2 可得到三个节点的向后差分近似:
第六章
数值微分
数值微分法是一种不通过微分来求函数导数的 方法,其存在有两个必要性: 方法,其存在有两个必要性: 一,函数值在某些离散点上已知,或以表格形式给 函数值在某些离散点上已知, 出,这样就不能得到解析的微分式; 这样就不能得到解析的微分式; 二,即使函数是可微的,但其导数计算过于繁琐. 即使函数是可微的,但其导数计算过于繁琐.
f ( x) ≈ g ( x) ( x x0 )( x x1 ) ( x x1 )( x x1 ) = f 1 + f0 ( x1 x0 )( x1 x1 ) ( x0 x1 )( x0 x1 ) ( x x1 )( x x0 ) + f1 ( x1 x1 )( x1 x0 )
h 2 ′′ h3 ′′′ h 4 (4) fi +1 = f i + hf i′ + fi + fi + fi + < 1 > 2 6 24
解得: 解得:
f i +1 f i h ′′ h 2 ′′′ f i′ = fi fi h 2 6
如果仅考虑右端第一项,就得到了向前差分近似, 如果仅考虑右端第一项,就得到了向前差分近似, 省略的项即为截断误差, 来表示, 省略的项即为截断误差,用首项 (h / 2) fi′′ 来表示, 则向前差分近似表示为: 向前差分近似表示为: 表示为
例1 数据集合为 xd 0 0.2000 0.4000 0.6000 0.8000 1.0000
yd 0.3927 0.5672 0.6982 0.7941 0.8614 0.9053 处的各阶导数. 计算 x = a = 0.3 处的各阶导数.
xd=[0 0.2000 0.4000 0.6000 0.8000 1.0000]; yd=[0.3927 0.5672 0.6982 0.7941 0.8614 0.9053]; a=0.3; L=length(xd); d=polyfit(xd-a,yd,L-1); fact=[1]; for k=1:L-1 fact=[factorial(k),fact]; end deriv=d.*fact
例2 (1) 已知 x0 = 0, x1 = h, x2 = 2h ,相应函数值 f 0 , f1 , f 2 , 则过点 xi (i = 0,1,2) 的Lagrange插值多项式近似 f ( x) : 插值多项式近似
f ( x) ≈ g ( x) ( x x1 )( x x2 ) ( x x0 )( x x2 ) = f0 + f1 ( x0 x1 )( x0 x2 ) ( x1 x0 )( x1 x2 ) ( x x0 )( x x1 ) + f2 ( x2 x0 )( x2 x1 )
( x0 , y0 ),( x1 , y1 ),,( x p , y p )
采用Lagrange插值,p+1个节点最多拟合为 p 阶多项 插值, 采用 插值 个节点最多拟合为 式,可以求到 p 阶导数.在点集上的插值多项式的导 阶导数. 数被称为差分近似, 数被称为差分近似,由导数计算中所依赖的 x0 , x1 ,, x p 集合中点的不同,以及导数阶数的不同, 集合中点的不同,以及导数阶数的不同,可以获得不 同的差分近似. 同的差分近似.
一,插值多项式的导数
当已知函数在一些离散点上的函数值时, 当已知函数在一些离散点上的函数值时,该函数 可用插值多项式来近似, 可用插值多项式来近似,然后对多项式进行微分求得 导数. 导数. 设需要知道函数 y ( x) 在 x = 0 点上的一阶导数值或 其近似值, 上的函数值. 其近似值,但目前已知的只有一些离散点 xi上的函数值. 附近的少量点, 可以选取 x = 0 附近的少量点,即:
( xi , yi ), i = 1,2,, n + 1
是所选的节点数, 其中 n+1是所选的节点数,对其进行插值多项式拟合: 是所选的节点数 对其进行插值多项式拟合:
g ( x) = c1 x + c2 x
n
n 1
+ + cn x + cn+1
微分, 对 g ( x) 微分,并取 x = 0 ,即得 g ( x)在 x = 0 处的一阶 导数, 导数, g ′(0) = cn 近似地等于 y′(0). 同理, 同理,在 x = 0 处的二阶导数 g ′′(0) = 2cn1 更一般地, 更一般地, g ( k ) (0) = cn+1k k ! , k = 0,1,2,, n
微分一次及两次, 微分一次及两次,令 x = 0 ,得: ′ ≈ 3 f 0 4 f 1 + f 2 ′′ ≈ f 0 2 f 1 + f 2 f0 f0 2h h2
三,Taylor展开方法 展开方法
Taylor展开法是推导差分近似的另外一种方法, 展开法是推导差分近似的另外一种方法, 展开法是推导差分近似的另外一种方法 不仅可以自动推导出差分公式, 不仅可以自动推导出差分公式,还可以推导出误 差项. 展开法与微分插值函数法, 差项.Taylor展开法与微分插值函数法,只要使用 展开法与微分插值函数法 相同的节点,得到得差分近似就是一样的. 相同的节点,得到得差分近似就是一样的. 的差分近似: 考虑推导 fi′ = f ′( xi ) 的差分近似 (1) f i +1 关于 xi 的Taylor展开式为: 展开式为: 展开式为
deriv = 1.8750 -1.3750 1.0406 -0.9710 0.6533 0.6376
二,差分近似
处的导数, 设需求函数 f ( x)在 x = x0 处的导数, 已知
x1 = x0 h,
x1 = x0 + h
f 1 = f ( x0 h), f 0 = f ( x0 ), f1 = f ( x0 + h)
z = xa
的表达式: 将 g ( x) 写成 z 的表达式:
g ( x) = g ( z ) = d1 z n + d 2 z n1 + + d n z + d n+1 n+
则
g (a) = g (0) = d n+1k k !, k = 0,1,2,, n
(k ) (k )
直接用 g ( z ) 拟合节点 ( xi a, yi ) 也可以得到系数 di , 即: d = polyfit( x-a , y , length(x)-1 )
′ ≈ f 2 + 4 f1 3 f 0 f0 2h
′′ ≈ f 2 2 f1 + f 0 f0 2 h
二次多项式, 若已知函数是一过点 x = [0,1, 2], y = [1,0,0] 二次多项式, 该系数可由polyfit获得,再用polyder求导即可. 获得,再用 求导即可. 该系数可由 获得 求导即可
坐标轴上两个相邻节点之间的长度, 其中 h 代表 x 坐标轴上两个相邻节点之间的长度, 可用线性插值函数A, 则 f 0′ = f ′( x0 ) 可用线性插值函数 B, C的梯度来 的梯度来 分别称为向前差分,向后差分,中心差分, 分别称为向前差分,向后差分,中心差分, 向前差分 近似, 近似, 具体如下: 具体如下:
或
d=polyfit(xd-a,yd,L-1); deriv=polyval(d,0); for n=1:L-1 d=polyder(d); deriv=[polyval(d,0),deriv]; end deriv
结果按导数阶数从大到小排列,最后一个为函数值: 结果按导数阶数从大到小排列,最后一个为函数值:
(3) 式 <1> 减式 <2> 得:
′ + 1 h3 f i′′′ + fi +1 fi 1 = 2hfi 3 解得中心差分近似 中心差分近似: 解得中心差分近似:
′ = f i +1 f i 1 + E fi 2h
h 2 ′′′ E ≈ fi 6
的差分近似: 下面用 f i , fi +1 , f i + 2 来推导 fi′ 的差分近似: 由
微分一次及两次, 微分一次及两次,令 x = 0 ,得: ′ ≈ f1 f 1 ′′ ≈ f1 2 f 0 + f 1 f0 f0 2h h2 (3) 过点 xi (i = 2, 1,0) 的Lagrange插值多项式为: 插值多项式为: 插值多项式为
f ( x) ≈ g ( x) ( x x1 )( x x0 ) ( x x2 )( x x0 ) = f 2 + f 1 ( x2 x1 )( x2 x0 ) ( x1 x2 )( x1 x0 ) ( x x2 )( x x1 ) + f0 ( x0 x2 )( x0 x1 )
′ = f i +1 f i + E fi h
其中: 其中:
h ′′ E ≈ fi 2
(2) fi 1 关于 xi 的Taylor展开式为: 展开式为: 展开式为
h 2 ′′ h3 ′′′ h 4 (4) fi 1 = f i hfi′ + fi fi + fi + < 2 > 2 6 24 解得向后差分近似 向后差分近似: 解得向后差分近似: h ′′ ′ = f i fi 1 + E fi E ≈ fi h 2
插值多项式的所有阶导数都可以用命令poly_drv计算: 计算: 插值多项式的所有阶导数都可以用命令 计算
function der = poly_drv(xd,yd,a) m = length(xd)-1; d = polyfit(xd-a, yd, m); c = d(m:-1:1); fact(1)=1; for i=2:m fact(i)=i*fact(i-1); end der = c.*fact;
c=polyfit([0,1,2],[1,0,0]); cd1=polyder(c); cd2=polyder(cd1) dd1=polyval(cd,0); dd2=polyval(cd2,0)
(2) 过点 xi (i = 1,0,1) 的Lagrange插值多项式为: 插值多项式为: 插值多项式为
y ( k ) (0) 的近似.值得注意的是,如果有 的近似.值得注意的是, 这些都是
n+1个节点,则可以求得 n 阶导数的近似. + 个节点 个节点, 阶导数的近似.
处的导数值. 通过坐标变换可以计算任意点 x 处的导数值. 处的导数值, 若求函数 g ( x) 在 x = a 处的导数值, 采用变换
y
f 1 f ( x)
A
向前差分
y
f 1 f ( x) f1
向后差分
f0
f0
B
′ ≈ f1 f 0 f0 h
x
f1
o x1 x1 x0
x1
x
f ( x)
f0
′ ≈ f 0 f 1 f0 h ′ ≈ f1 f 1 f0 2h
x
f1
C
o x1 x0
x1
差分近似方法与插值多项式密切相关. 差分近似方法与插值多项式密切相关.考虑 p+1个点 个点
h 2 ′′ h3 ′′′ h 4 (4) fi +1 = fi + hf i′ + fi + fi + fi + 2 6 24 fi +2 4h 2 ′′ 8h3 ′′′ 16h 4 (4) = fi + 2hf i′ + fi + fi + f i + 2 6 24 4 f i +1 f i + 2 2h3 ′′′ = 3 f i + 2hf i′ + fi + 3
3 f i 4 f i 1 + fi 2 h 2 ′′′ f i′ = +E E≈ fi 2h 3
二阶导数的差分近似同理可得, 二阶导数的差分近似同理可得,基本原则是消去 一阶导数项,再尽可能消掉三阶或更高阶的导数项. 一阶导数项,再尽可能消掉三阶或更高阶的导数项. (1) 利用 f i +1 , f i , f i 1推导 fi′′ 的差分近似 h 4 (4) fi +1 + f i 1 = 2 fi + h 2 fi′′ + fi + 12 f i′′的中心差分近似
h 2 ′′′ E≈ fi 3
两式相消, 两式相消,得:
解得三个节点的向前差分近似: 解得三个节点的向前差分近似:
′ = fi + 2 + 4 fi +1 3 fi + E fi 2h
同理, 可得到三个节点的向后差分近似: 同理,利用 f i , fi 1 , fi 2 可得到三个节点的向后差分近似:
第六章
数值微分
数值微分法是一种不通过微分来求函数导数的 方法,其存在有两个必要性: 方法,其存在有两个必要性: 一,函数值在某些离散点上已知,或以表格形式给 函数值在某些离散点上已知, 出,这样就不能得到解析的微分式; 这样就不能得到解析的微分式; 二,即使函数是可微的,但其导数计算过于繁琐. 即使函数是可微的,但其导数计算过于繁琐.
f ( x) ≈ g ( x) ( x x0 )( x x1 ) ( x x1 )( x x1 ) = f 1 + f0 ( x1 x0 )( x1 x1 ) ( x0 x1 )( x0 x1 ) ( x x1 )( x x0 ) + f1 ( x1 x1 )( x1 x0 )
h 2 ′′ h3 ′′′ h 4 (4) fi +1 = f i + hf i′ + fi + fi + fi + < 1 > 2 6 24
解得: 解得:
f i +1 f i h ′′ h 2 ′′′ f i′ = fi fi h 2 6
如果仅考虑右端第一项,就得到了向前差分近似, 如果仅考虑右端第一项,就得到了向前差分近似, 省略的项即为截断误差, 来表示, 省略的项即为截断误差,用首项 (h / 2) fi′′ 来表示, 则向前差分近似表示为: 向前差分近似表示为: 表示为
例1 数据集合为 xd 0 0.2000 0.4000 0.6000 0.8000 1.0000
yd 0.3927 0.5672 0.6982 0.7941 0.8614 0.9053 处的各阶导数. 计算 x = a = 0.3 处的各阶导数.
xd=[0 0.2000 0.4000 0.6000 0.8000 1.0000]; yd=[0.3927 0.5672 0.6982 0.7941 0.8614 0.9053]; a=0.3; L=length(xd); d=polyfit(xd-a,yd,L-1); fact=[1]; for k=1:L-1 fact=[factorial(k),fact]; end deriv=d.*fact
例2 (1) 已知 x0 = 0, x1 = h, x2 = 2h ,相应函数值 f 0 , f1 , f 2 , 则过点 xi (i = 0,1,2) 的Lagrange插值多项式近似 f ( x) : 插值多项式近似
f ( x) ≈ g ( x) ( x x1 )( x x2 ) ( x x0 )( x x2 ) = f0 + f1 ( x0 x1 )( x0 x2 ) ( x1 x0 )( x1 x2 ) ( x x0 )( x x1 ) + f2 ( x2 x0 )( x2 x1 )
( x0 , y0 ),( x1 , y1 ),,( x p , y p )
采用Lagrange插值,p+1个节点最多拟合为 p 阶多项 插值, 采用 插值 个节点最多拟合为 式,可以求到 p 阶导数.在点集上的插值多项式的导 阶导数. 数被称为差分近似, 数被称为差分近似,由导数计算中所依赖的 x0 , x1 ,, x p 集合中点的不同,以及导数阶数的不同, 集合中点的不同,以及导数阶数的不同,可以获得不 同的差分近似. 同的差分近似.
一,插值多项式的导数
当已知函数在一些离散点上的函数值时, 当已知函数在一些离散点上的函数值时,该函数 可用插值多项式来近似, 可用插值多项式来近似,然后对多项式进行微分求得 导数. 导数. 设需要知道函数 y ( x) 在 x = 0 点上的一阶导数值或 其近似值, 上的函数值. 其近似值,但目前已知的只有一些离散点 xi上的函数值. 附近的少量点, 可以选取 x = 0 附近的少量点,即:
( xi , yi ), i = 1,2,, n + 1
是所选的节点数, 其中 n+1是所选的节点数,对其进行插值多项式拟合: 是所选的节点数 对其进行插值多项式拟合:
g ( x) = c1 x + c2 x
n
n 1
+ + cn x + cn+1
微分, 对 g ( x) 微分,并取 x = 0 ,即得 g ( x)在 x = 0 处的一阶 导数, 导数, g ′(0) = cn 近似地等于 y′(0). 同理, 同理,在 x = 0 处的二阶导数 g ′′(0) = 2cn1 更一般地, 更一般地, g ( k ) (0) = cn+1k k ! , k = 0,1,2,, n
微分一次及两次, 微分一次及两次,令 x = 0 ,得: ′ ≈ 3 f 0 4 f 1 + f 2 ′′ ≈ f 0 2 f 1 + f 2 f0 f0 2h h2
三,Taylor展开方法 展开方法
Taylor展开法是推导差分近似的另外一种方法, 展开法是推导差分近似的另外一种方法, 展开法是推导差分近似的另外一种方法 不仅可以自动推导出差分公式, 不仅可以自动推导出差分公式,还可以推导出误 差项. 展开法与微分插值函数法, 差项.Taylor展开法与微分插值函数法,只要使用 展开法与微分插值函数法 相同的节点,得到得差分近似就是一样的. 相同的节点,得到得差分近似就是一样的. 的差分近似: 考虑推导 fi′ = f ′( xi ) 的差分近似 (1) f i +1 关于 xi 的Taylor展开式为: 展开式为: 展开式为
deriv = 1.8750 -1.3750 1.0406 -0.9710 0.6533 0.6376
二,差分近似
处的导数, 设需求函数 f ( x)在 x = x0 处的导数, 已知
x1 = x0 h,
x1 = x0 + h
f 1 = f ( x0 h), f 0 = f ( x0 ), f1 = f ( x0 + h)
z = xa
的表达式: 将 g ( x) 写成 z 的表达式:
g ( x) = g ( z ) = d1 z n + d 2 z n1 + + d n z + d n+1 n+
则
g (a) = g (0) = d n+1k k !, k = 0,1,2,, n
(k ) (k )
直接用 g ( z ) 拟合节点 ( xi a, yi ) 也可以得到系数 di , 即: d = polyfit( x-a , y , length(x)-1 )