日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

R语言数值导数

發布時間:2023/12/18 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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=sin?xy=\sin xy=sinx進行抽樣的結果,可以理解為是一個不連續的函數;紅線則是在每一個分立的點上,sin?x\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?)=Δx0lim?Δxf(x0?+Δx)?f(x0?)?

Δx→?0\Delta x\not\to 0Δx0時,即可理解為數值導數。

假設現在對某個函數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??xn?f(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的差分的商,所以也叫差商。

仍以sin?x\sin xsinx為例,假設在[?5,5][-5,5][?5,5]區間內分別以0.1,0.5,1為間隔,算其差商,然后和其導數cos?x\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]??

總結

以上是生活随笔為你收集整理的R语言数值导数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。