如果我有一个功能
fun=function(x,y) {x^2+y^2}
其中x和y是向量。我想找到" x"这样,x ^ 2 + y ^ 2 = z,数字在R.我怎么这样?我尝试使用solve
命令,但我不确定如何指定...保持向量y相同的值,解决/最小化函数x ^ 2 + y ^ 2到z到0的距离/误差。
答案 0 :(得分:1)
以下可能会有所帮助:
z = sample(1:100, 100, replace=T)
y = sample(1:100, 100, replace=T)
x = mapply(function(z,y) sqrt(z-y^2), z,y)
dd =data.frame(z=z,y=y,x=x)
dd[!is.na(dd$x),]
z y x
51 27 2 4.795832
54 78 5 7.280110
66 74 5 7.000000
70 33 1 5.656854
83 81 9 0.000000
100 29 1 5.291503
答案 1 :(得分:0)
这是一个涉及uniroot
的解决方案:
fun <- function(x,y) x^2 + y^2
solfun <- function(z,y) {
if (y^2 > z) return(NaN)
return(uniroot(function(x) z - fun(x,y), c(0,1e10))$root)
}
z <- sample(1:100,5,repl=TRUE)
y <- sample(1:100,5,repl=TRUE)
unlist(Map(solfun,z,y))
与任何根查找算法一样,它只能获得近似答案:
> solfun(20,3)
[1] 3.31661
> solfun(10,3)
[1] 0.9999985
虽然上述功能适用于z
和y
个值的各个对,但使用Map
我们可以将该函数应用于向量。
set.seed(4)
z <- sample(1:100,5,repl=TRUE)
y <- sample(1:100,5,repl=TRUE)
> unlist(Map(solfun,z,y))
[1] NaN NaN NaN NaN 4.242638
请注意,绝大多数z,y对都有复杂的根。