我想根据R中uniroot的结果更新函数中的一个特定值。
例如,如果我试图解决x,其中s = 60000和t = 19.95我有:
第一个月
对于下一次迭代,我想更新s的值,使s = 59789,以及t的值,使t = 19.90。重复地,这应该一直更新到t = 0,对于t向下0.05步。因此,399次迭代,因为19.95/0.05 = 399。
(mu只是一个预定义的函数,例如μ(40,19.95)= 0.003204。
下面是一些示例代码:
s <- 60000
t <- 19.95
f <- function(x) (s - x - 0.05*(0.04*x + 1810.726 - mu(40, t)*(s - x)))
uniroot(f, lower=0.1, upper=100000000)$root
有谁能给我一些如何实施的建议吗?mu()
的计算公式如下:
mu <- function(x, t) {
A <- .00022
B <- 2.7*10^(-6)
c <- 1.124
mutemp <- A + B*c^(x + t)
out <- ifelse(t <= 2, 0.9^(2 - t)*mutemp, mutemp)
out
}
预期结果应如下所示:
t x
0 0.0000
1 1853.8638 11 26882.9244
2 3817.7860 12 30070.8515
3 5894.9409 13 33384.7327
4 8088.4838 14 36823.9198
5 10400.9021 15 40387.3491
6 12834.5166 16 44073.5260
7 15391.4745 17 47880.5110
8 18073.7445 18 51805.9074
9 20883.1160 19 55846.8507
10 23821.2011 20 60000.0000
59789
的值对应于V_{19.95} = 59789
,并且V_{20} = 60000
是给定的起始值。
2条答案
按热度按时间qhhrdooz1#
这个for循环可能会有帮助。
1.运行所有代码
2.运行下面的for循环进行迭代
2.1预定义结果的长度。在您的情况下为400(t/0.05 = 400)。
2.2从1到400运行for循环。将每个uniroot结果保存到步骤2.1,然后相应地重新分配s和t。
3.检查结果
希望这是有帮助的。
x759pob22#
您可以在已定义的
t
seq
序列上使用vapply
。请注意,
<<-
在全局环境中更改了s
,并在最后获得最后一个值。