gpt4 book ai didi

r - 乘以概率分布函数

转载 作者:行者123 更新时间:2023-12-04 11:01:33 25 4
gpt4 key购买 nike

我很难构建一个有效的程序,该程序可以添加和乘以概率密度函数来预测完成两个流程步骤所需的时间分布。

让“a”代表完成过程“A”所需时间的概率分布函数。零天 = 10%,一天 = 40%,两天 = 50%。让“b”代表完成过程“B”需要多长时间的概率分布函数。零天 = 10%,一天 = 20%,以此类推。

进程“B”在进程“A”完成之前无法启动,因此“B”依赖于“A”。

a <- c(.1, .4, .5)
b <- c(.1,.2,.3,.3,.1)

如何计算完成“A”和“B”的时间的概率密度函数?

这是我所期望的或以下示例的输出:
totallength <- 0 # initialize
totallength[1:(length(a) + length(b))] <- 0 # initialize
totallength[1] <- a[1]*b[1]
totallength[2] <- a[1]*b[2] + a[2]*b[1]
totallength[3] <- a[1]*b[3] + a[2]*b[2] + a[3]*b[1]
totallength[4] <- a[1]*b[4] + a[2]*b[3] + a[3]*b[2]
totallength[5] <- a[1]*b[5] + a[2]*b[4] + a[3]*b[3]
totallength[6] <- a[2]*b[5] + a[3]*b[4]
totallength[7] <- a[3]*b[5]

print(totallength)
[1] [1] 0.01 0.06 0.16 0.25 0.28 0.19 0.05
sum(totallength)
[1] 1

我在 Visual Basic 中有一种方法,它使用了三个 for 循环(每个步骤一个,输出一个),但我希望我不必在 R 中循环。

由于这似乎是一个非常标准的流程问题,我的问题的第二部分是是否存在任何库来模拟操作流程,因此我不会从头开始创建它。

最佳答案

进行此类操作的有效方法是使用卷积:

convolve(a, rev(b), type="open")
# [1] 0.01 0.06 0.16 0.25 0.28 0.19 0.05

这是有效的,因为它比单独计算每个值更少输入,还因为它以有效的方式实现(使用快速傅立叶变换或 FFT)。

您可以使用您发布的公式确认这些值中的每一个都是正确的:
(expected <- c(a[1]*b[1], a[1]*b[2] + a[2]*b[1], a[1]*b[3] + a[2]*b[2] + a[3]*b[1], a[1]*b[4] + a[2]*b[3] + a[3]*b[2], a[1]*b[5] + a[2]*b[4] + a[3]*b[3], a[2]*b[5] + a[3]*b[4], a[3]*b[5]))
# [1] 0.01 0.06 0.16 0.25 0.28 0.19 0.05

关于r - 乘以概率分布函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30177940/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com