R语言数值导数
文章目录
- 3 数值导数
3 数值导数
根据导数的定义,当函数的定义域不连续时,其不连续处显然是不存在导数的,但图形可以“欺骗”我们的眼睛。
> x = seq(-1,1,0.1) > y = sin(x) > y1 = cos(x) > xEnd = x+0.1 > yEnd = y+y1*0.1 > plot(x,y) > for(i in seq_along(x)){ + lines(c(x[i],xEnd[i]),c(y[i],yEnd[i]),col="red") + }上图中,圆圈是对y=sinxy=\sin xy=sinx进行抽样的结果,可以理解为是一个不连续的函数;红线则是在每一个分立的点上,sinx\sin xsinx在该点的切线。这两者看上去如此一致,说明连续函数的导数在抽样之后仍然具备一定的数学意义。
相应地,不连续的函数,也应该有类似于导数一样的存在,从而与连续函数的导数相对应,此即数值导数。如果回顾导数的定义
f′(x0)=limΔx→0f(x0+Δx)−f(x0)Δxf'(x_0)=\lim_{\Delta x\to0}\frac{f(x_0+\Delta x)-f(x_0)}{\Delta x} f′(x0)=Δx→0limΔxf(x0+Δx)−f(x0)
当Δx↛0\Delta x\not\to 0Δx→0时,即可理解为数值导数。
假设现在对某个函数f(x)f(x)f(x)进行等间隔抽样,间隔为hhh,则其第nnn个点处的数值导数为
f[xn]=f(xn+1)−f(xn)xn+1−xn=f(xn+h)−f(xn)hf[x_n]=\frac{f(x_{n+1})-f(x_n)}{x_{n+1}-x_n}= \frac{f(x_n+h)-f(x_n)}{h} f[xn]=xn+1−xnf(xn+1)−f(xn)=hf(xn+h)−f(xn)
由于一般称f(xn+1)−f(xn)f(x_{n+1})-f(x_n)f(xn+1)−f(xn)为差分,则数值导数是f(x)f(x)f(x)的差分与xxx的差分的商,所以也叫差商。
仍以sinx\sin xsinx为例,假设在[−5,5][-5,5][−5,5]区间内分别以0.1,0.5,1为间隔,算其差商,然后和其导数cosx\cos xcosx相对比。
x = seq(-5,5,0.1) y = cos(x) x1 = seq(-5,5,0.1) end = length(x1) y1 = (sin(x1[2:end])-sin(x1[1:end-1]))/0.1 x5 = seq(-5,5,0.5) end = length(x5) y5 = (sin(x5[2:end])-sin(x5[1:end-1]))/0.5 x10 = seq(-5,5,1) end = length(x10) y10 = (sin(x10[2:end])-sin(x10[1:end-1]))/0.5 plot(x,y,type="l",col="red") lines(x1[2:length(x1)],y1) lines(x5[2:length(x5)],y5) lines(x10[2:length(x10)],y10)如图所示
由于我们采用的是后向差分,所以三组差商的值整体右移。此外,随着hhh的增大,其误差也越来越明显。
对一个函数进行反复求导,即可得到高阶导数,可以用数学归纳法的方式记为
f(n)(x)={f(n−1)(x)}′f(1)(x)=f′(x)\begin{aligned} f^{(n)}(x)&=\{f^{(n-1)}(x)\}'\\ f^{(1)}(x)&=f'(x) \end{aligned} f(n)(x)f(1)(x)={f(n−1)(x)}′=f′(x)
差商亦然,可以记为
f(n)[x]={f(n−1)[x]}′f(1)[x]=f[x]\begin{aligned} f^{(n)}[x]&=\{f^{(n-1)}[x]\}'\\ f^{(1)}[x]&=f[x] \end{aligned} f(n)[x]f(1)[x]={f(n−1)[x]}′=f[x]
但与导数不同之处在于,差商可以更加方便地进行递推,例如
f(2)[x]=f[x+h]−f[x]h=f[x+2h]−f[x+h]h−f[x+h]−f[x]hh=f[x+2h]−2f[x+h]+f[x]h2\begin{aligned} f^{(2)}[x]&=\frac{f[x+h]-f[x]}{h}\\ &=\frac{\frac{f[x+2h]-f[x+h]}{h}-\frac{f[x+h]-f[x]}{h}}{h}\\ &=\frac{f[x+2h]-2f[x+h]+f[x]}{h^2} \end{aligned} f(2)[x]=hf[x+h]−f[x]=hhf[x+2h]−f[x+h]−hf[x+h]−f[x]=h2f[x+2h]−2f[x+h]+f[x]
总结
- 上一篇: Win10设置每天定时运行某程序
- 下一篇: 无心剑英译许巍《温暖》