- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
此函数根据管道的直径、流量和长度计算管道中的压力损失。
hazwil2 <- function(diam, flow, leng){
psi2=((1/(2.31*100))*1050*((flow/140)^1.852)*leng*diam^-4.87)
return(psi2)
}
我正在寻找能够将压力损失保持在 2 psi 以内的最小直径。直径范围在 2 到 12 英寸之间。使用 uniroot() 和两个任意值的流量和长度:
intercept = 2L
uniroot(
function(x) hazwil2(x, 100, 400) - intercept ,
interval = c(2, 12)
)$root
现在我尝试在这个流量和长度值数据集上循环 uniroot
data <- read.csv(
text =
"leng,flow
100, 100
200, 100
300, 100
100, 150
200, 150
300, 150
100, 200
200, 200
300, 200",
stringsAsFactors = FALSE
)
最佳答案
考虑对 f 和 l 参数泛化您的 unitroot 调用,并将其传递到 mapply
(m多次应用)以按元素向下迭代等长向量(即数据帧的列、流 和长度):
find_root <- function(f, l) {
intercept <- 2L
uniroot(
function(x) hazwil2(x, f, l) - intercept ,
interval = c(2, 12)
)$root
}
data$root <- mapply(find_root, data$flow, data$leng)
data
# leng flow root
# 1 100 100 2.681145
# 2 200 100 3.091243
# 3 300 100 3.359606
# 4 100 150 3.128141
# 5 200 150 3.606602
# 6 300 150 3.919727
# 7 100 200 3.489780
# 8 200 200 4.023564
# 9 300 200 4.372916
对于可能产生根本问题的较大集合,考虑在 tryCatch
中包装函数调用以返回 NA
:
data <- expand.grid(leng = seq(100, 1000, by=100), flow = seq(10, 200, by=10))
data$root <- mapply(function(l,f) tryCatch(find_root(l,f), error=function(e) NA),
data$flow, data$leng)
输出
head(data, 20)
# leng flow root
# 1 100 10 NA
# 2 200 10 NA
# 3 300 10 NA
# 4 400 10 NA
# 5 500 10 NA
# 6 600 10 NA
# 7 700 10 NA
# 8 800 10 NA
# 9 900 10 NA
# 10 1000 10 NA
# 11 100 20 NA
# 12 200 20 NA
# 13 300 20 NA
# 14 400 20 NA
# 15 500 20 2.023187
# 16 600 20 2.100367
# 17 700 20 2.167915
# 18 800 20 2.228178
# 19 900 20 2.282705
# 20 1000 20 2.332653
关于r - 使用 sapply() 在两个参数上循环 uniroot(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50978973/
我对 uniroot 命令有疑问。我无法以合乎逻辑的方式提出我的问题,因为我不知道为什么在下面示例的第二种情况下每次结果都不同。在第一种情况下,我的 f 函数的结果总是相同的: library(mvt
我查看了有关uniroot和optimize的描述,它们的描述有些不同,但是本书引用的书是相同的,我想知道是否有理由选择一个? 最佳答案 这两个功能的用途完全不同: optimize用于查找函数的最小
此函数根据管道的直径、流量和长度计算管道中的压力损失。 hazwil2 <- function(diam, flow, leng){ psi2=((1/(2.31*100))*1050*((flo
我想在 R 中使用 uniroot 找到 log(x) = x2 − 2 的根 f <- function(x) (log(x)+2-x^2) uniroot(f, lower=0, upper=1
在从 R 中调用的 C 程序中,我需要使用 R 的“uniroot”函数。一种方法是使用“call_R”函数从 C 中再次调用 R。我想知道是否有更好的方法? “Rmath.h”中是否有函数可以执行此
我想知道在R中由“ uniroot”输出的值列表中由“ optimize”输出的“ objective”是什么意思? 一个例子: uniroot(function(x) cos(x) - x, low
功能是: f1 = function(x) { -1.3 * (x-0.1)^2+0.5 * (x-0.1)^5 } 我试图找到区间 [-1, 1] 中的最大值。 优化函数返回正确的值: opti
可重现的示例: v tvm::xirr(v, d1, f.lower = -0.2, f.upper=0.5) [1] 10 > tvm::xirr(v, d1, f.lower = -0.2, f
可重现的示例: v tvm::xirr(v, d1, f.lower = -0.2, f.upper=0.5) [1] 10 > tvm::xirr(v, d1, f.lower = -0.2, f
我是一名优秀的程序员,十分优秀!