求解R中函数内的参数

时间:2014-08-22 01:32:55

标签: r

如果我有一个功能

 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的距离/误差。

2 个答案:

答案 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

虽然上述功能适用于zy个值的各个对,但使用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对都有复杂的根。