전산통계학 10주차 강의 - Derivative, integral, uniroot

코딩 공부/R-전산 통계학 2020. 1. 14. 22:43
반응형

Integral (적분)

library(pracma)


g <- function(x) {x}
integrate(g, lower=0, upper=1)$value

f <- function(x) {exp(x)}
integrate(f, lower=0, upper=1)$value


# 2번 적분
fun <- function(x, y) cos(x) * cos(y)
integral2(fun, 0, 1, 0, 1, reltol = 1e-10)



# 3번 적분
sm <- function(x,y,z) {x^2 * y^3 * z^4}
integral3(sm, 2,3,1,2,0,1)

f0 <- function(x, y, z) y*sin(x) + z*cos(x)
integral3(f0, 0, pi, 0,1, -1,1) # - 2.0 => 0.0



# 특이한 적분영역 (직사각형의 형태가 아닌것)

sm1 <- function (x,y) {x*y^2}
xmin <- 0 ; xmax <- 1
ymin <- function(x) x ; ymax <- 1
integral2(sm1, xmin, xmax, ymin, ymax)$Q  ; "dy dx"

sm0 <- function (x,y) {x*y^2}
xmin <- 0 ; xmax <- function(y) y
ymin <- 0 ; ymax <- 1
integral2(sm0, ymin, ymax, xmin, xmax)$Q   ; "dx dy"

sm2 <- function (x,y) {1}
xmin <- 0 ; xmax <- 1
ymin <- function(x) x ; ymax <- 1
integral2(sm2, xmin, xmax, ymin, ymax)

sm3 <- function (x,y) {x^2*y^3}
xmin <- 0 ; xmax <- 1
ymin <- function(x) x^2 ; ymax <- function(x) x
integral2(sm3, xmin, xmax, ymin, ymax)$Q

f <- function(x, y) sqrt(1 -x^2 - y^2)
xmin <- 0; xmax <- 1
ymin <- 0; ymax <- function(x) sqrt(1 - x^2)
integral2(f, xmin, xmax, ymin, ymax)

f3 <- function(x, y, z) sqrt(x^2 + y^2)
a <- -2; b <- 2
ymin <- function(x) -sqrt(4-x^2)
ymax <- function(x)  sqrt(4-x^2)
zmin <- function(x, y)  sqrt(x^2 + y^2)
zmax <- 2
integral3(f3, a, b, ymin, ymax, zmin, zmax)

 


integral(dnorm,-1.96, 1.96)
integral(df,1,2.3,  df1=12, df2=19)
integral(dt, -1.96, 1.96, df=Inf)                ; "t(Inf) 의 적분"

f <- function(x,alpha,beta) {(x^(alpha-1)*exp(x/-beta))/(gamma(alpha)*beta^(alpha))}
integrate(f,.5, 6, alpha=3.5, beta=3)

<첨언>

R에서의 dgamma = exp(-x) 히고 분모가 gamma(alpha) 까지만 정의 되어있다?

dgamma(3.5, rate = 3)
integrate(dgamma, .5, 6, shape=3.5 , scale=3)


Derivative (미분)

dx.expr <- deriv(~x^2, "x", hessian=TRUE) ; "hessian = 2차 미분 여부"
deriv(expression(x^2), "x", hessian=TRUE) ; "tilda = ~ 대신에 expre. 써도 동일하다"

x <- 1:5
dx.num <- eval(dx.expr)              ; "값 호출"
dx.num

attr(dx.num, "gradient")  ; "attribute 미분한 것 불러와라, gradient = 1차 미분"
attr(dx.num, "hessian")    ; "hessian = 2차 미분"
 



# 문자가 2개가 된다면?
dx.dy.expr <- deriv(expression(x^2*y^4), c("x", "y"), hessian=TRUE)
dx.dy.expr
".grad = 1차미분"
".hessian [, a,b] = a 다음 b로 미분 , 따라서 총 두번"

 

<첨언>

deriv3(expression(x^2*y^4), c("x","x", "y"),hessian = T) 은 무엇을 의미할까?


Uniroot

f <- function(x) {-x^4-.5*x^3+9*x^2-x-5}
curve(f(x), -3, 3, lwd=2, main=expression(f(x)==-x^4-.5*x^3+9*x^2-x-5))
abline(h=0, lty=2, lwd=1)
abline(v=-1, lty=2, lwd=1)

points(c(2.563, .866, -.697), c(0,0,0), pch=19, cex=1.5, col="blue")

uniroot(f, c(0, 2)) ; "0~2 사이의 근 찾기"
uniroot(f, c(-3, 3)) ; "범위에서 가장 작은 근을 찾아줌"
uniroot(f, c(1, 2)) ; "root not exist"


# f를 1차미분 = 0 포인트 찾기

sm <- deriv(~-x^4-.5*x^3+9*x^2-x-5,"x")
g <-  function(x) attr(eval(sm), "gradient")
g
curve(g(x), -3, 3, lwd=2)
abline(h=0, lty=2, lwd=1)


<문제>

f를 2차미분하여서 =0 인 지점을 찾고 line을 추가해서 자세히 plot에 나타낼 수 있을까요?




TAG