몇 가지 적분을 계산해야합니다. 나는 R이 이것을하기위한 올바른 소프트웨어가 아니라는 것을 알고있다. 그러나 R에서 모든 것을 다했듯이 적분은 단지 1 차원 적이기 때문에 문제가 없을 것이라고 생각했다.integrate()에 점프합니까?
어쨌든 통계 패키지의 integrate()
함수를 사용하면 적분의 상한이 증가 할 때 점프가 발생합니다. 여기 플롯이다 : 나는, 적분 대신 합을 구축하거나 cubature
패키지에서 기능 adaptIntegrate()
를 사용하는 경우에
은, 그러나, 결과는 다음과 같습니다
이 코드를 복제하려면 다음 코드를 작성하십시오. 아마 더 쉬운 예가 있다는 것을 압니다. 그러나 이것은 실제로 내가 직면하고있는 경우의 1 : 1입니다. integrate()
사용 :
v_p = 11269
d_p = seq(0, v_p, 100)
tau = 0.35
interest = 0.05
time_t = 1
mu = 0
sigma_p = 0.1099313
nu_p = 0.0101552
ts = c()
bc = c()
for (i in 1:length(d_p)){
ts = c(ts,integrate(function(x) tau*(x-v_p-interest*d_p[i])*dlnorm(x, log(v_p)+(mu - 0.5 * sigma_p^2) * time_t, sigma_p*sqrt(time_t)), v_p+interest*d_p[i], 10000000)$value)
bc = c(bc,integrate(function(y) nu_p * y * dlnorm(y, log(v_p)+(mu - 0.5 * sigma_p^2) * time_t, sigma_p*sqrt(time_t)), 0, d_p[i])$value)
}
shv = ts + bc
plot(d_p,shv, main = 290801)
abline(v = 9079, col="red")
정확히 동일한 코드를, 단지 adaptIntegrate()를 사용하여 :
는v_p = 11269
d_p = seq(0, v_p, 100)
tau = 0.35
interest = 0.05
time_t = 1
mu = 0
sigma_p = 0.1099313
nu_p = 0.0101552
ts = c()
bc = c()
for (i in 1:length(d_p)){
ts = c(ts,adaptIntegrate(function(x) tau*(x-v_p-interest*d_p[i])*dlnorm(x, log(v_p)+(mu - 0.5 * sigma_p^2) * time_t, sigma_p*sqrt(time_t)), v_p+interest*d_p[i], 10000000)$integral)
bc = c(bc,adaptIntegrate(function(y) nu_p * y * dlnorm(y, log(v_p)+(mu - 0.5 * sigma_p^2) * time_t, sigma_p*sqrt(time_t)), 0, d_p[i])$integral)
}
shv = ts + bc
plot(d_p,shv, main = 290801)
abline(v = 9079, col="red")
는 아무도 왜 이런 일 아이디어가 있습니까?
이가 복제되지 않습니다 tau, interest 등의 수식에 상수를 모두 정의하지 않았으므로 예제입니다. –
또한 t는 transpose 함수의 이름이기 때문에 변수 이름으로 t를 사용하는 것은 좋지 않습니다. 내가 제공하지 않은 매개 변수에 대한 값으로 구성된 코드를 시도했습니다. 나는 결과에서 점프를 얻지 못했다. – G5W
죄송합니다. 누락 된 변수를 추가했습니다. 나는 t를 time_t로 바꾸었고 여전히 점프를했습니다. – Gerrit