如何解决为R中的所需输出值提供一个可能的输入
假设下面的函数d
对于两个输入值的不同组合可以输出相同的答案。
例如,要输出0.8164966
,可以输入d(2,12)
或类似的d(1,3)
以及两个输入值的更多组合。
问题,如果我提供了所需的输出d
,是否有一种方法只能得到一对可能的输入值?
例如,如果我希望拥有一个d = 0.8164966
,R能否给我1 and 3
作为一对可能导致d = 0.8164966
的输入值?
注意::我要问的是,{{ 1}}(输出)。
d
解决方法
这归结为将小数转换为有理数。一种方法是使用for neighbor in (*range(max(0,i-b[i]),i-a[i]+1),*range(i+a[i],min(l,i+b[i]+1))):
。这意味着我们可以这样编写您的逆函数:
MASS::fractions
因此您可以这样做:
inv_d <- function(d) {
ratio <- MASS::fractions(d^2/2)
result <- as.numeric(strsplit(attr(ratio,"fracs"),"/")[[1]])
result[1] <- result[1]^2
setNames(result,c("mean_dif","Vmax"))
}
,
如果您希望此方法适用于常规d
,则需要给求解器一个提示。例如,是否保证第一个参数等于1的解决方案?如果第一个参数为1,则第二个参数的可能值范围是什么?
使用您提供的d
,答案是“是的,可以保证”,而明确的解决方案是Vmax = 2/d^2
,即
inv_d <- function(d) {
c(mean_dif = 1,Vmax = 2/d^2)
}
你会得到
inv_d(pi)
# mean_dif Vmax
# 1.0000000 0.2026424
现在,如果您不知道Vmax
的解决方案,则可以尝试使用uniroot
:
inv_d <- function(dval) {
Vmax <- uniroot(function(Vmax) d(1,Vmax) - dval,c(0,10/dval^2))$root
c(mean_dif = 1,Vmax = Vmax)
}
inv_d(pi)
# mean_dif Vmax
# 1.0000000 0.2026534
在这种情况下,解决方案的准确性较低。
如果您无法获得间隔或保证,那么通常没有解决方案,但是您可能可以尝试一系列不同的猜测,有时会感到幸运。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。