UPDATE: 2022-08-27 13:09:58
このノートではRを使った微分、偏微分の方法をまとめておく。
\(h\)が十分小さいとき、1変数の微分は定義によると下記のように表現できる。
\[ f^{\prime}(x)= \frac{f(x+h) - f(x)}{h} \]
Rで計算するには、先程の式をそのまま利用すれば良い。ここでは、\(f(x)=2x^3\)の\(x=3\)を計算してみる。
<- 0.001
h
<- function(x){
f return(2*x^3)
}
<- 3
x
<- function(x){
d <- (f(x + h) - f(x)) / h
res return(res)
}
d(x)
## [1] 54.018
この結果をRの組み込み関数を使って検証すると、近似的な解が得られていることがわかる。
<- D(expression(2*x^3), 'x')
d # print(eval(expression(d)))
eval(d)
## [1] 54
# library(numDeriv)
# d <- genD(func = f, x)
# d$f0
\(h\)が十分小さいとき、1変数の2階微分は定義によると下記のように表現できる。
\[ f^{(2)}(x)= \frac{f(x+2h) - 2f(x+h) + f(x)}{h^{2}} \]
Rで計算するには、1階微分同様にそのまま利用すれば良い。ここでは、\(f(x)=2x^3\)の\(x=3\)を計算してみる。
<- 0.001
h
<- function(x){
f return(2*x^3)
}
<- 3
x
<- function(x){
d2 <- (f(x + 2*h) - 2*f(x + h) + f(x)) / h^2
res return(res)
}
d2(x)
## [1] 36.012
さきほど同様に、この結果をRの組み込み関数を使って検証すると、近似的な解が得られていることがわかる。2階微分はD(D(f))
とすれば良いらしい。
<- D(D(expression(2*x^3), 'x'), 'x')
d2 # print(eval(expression(d)))
eval(d2)
## [1] 36
\(h\)が十分小さいとき、\(y\)、\(x\)という順に偏微分する場合、定義によると下記のように表現できる。
\[ \frac{ \partial f }{ \partial y \partial x } = \frac{f(x+h, y+h) - f(x, y+h)-f(x+h, y) + f(x, y)}{h^{2}} \]
Rで計算するには、これまでと同じようにそのまま利用すれば良い。ここでは、\(f(x,y)=x^2 * y^3\)の\(x=3, y=1\)を計算してみる。
<- 0.01
h
<- function(x, y){
f return(x^2 * y^3)
}
<- 3
x <- 1
y
<- function(x, y){
pd <- (f(x + h, y + h) - f(x, y + h) - f(x + h, y) + f(x, y)) / h^2
res return(res)
}
pd(x, y)
## [1] 18.2109
さきほど同様に、この結果をRの組み込み関数を使って検証すると、近似的な解が得られている。偏微分はD(D(f, y),x)
とすれば良いらしい。
<- D(D(expression(x^2 * y^3), 'y'), 'x')
pd # print(eval(expression(d)))
eval(pd)
## [1] 18
先程の2変数関数を可視化しておく。見えにくいが、\(x=3, y=1\)の位置でポイントを打ち込んでいる。
library(plot3D)
<- x <- seq(-10, 10, length=60)
y <- function(x, y) x^2 * y^3
f <- outer(x, y, f)
z
persp3D(
x = x,
y = y,
z = z,
color.palette = heat.colors,
phi = 45,
theta = 200,
main = "3D perspective")
points3D(x = 3, y = 1, z = f(3, 1),
col = "red", size = 10,
add = T)