如何运行" uniroot"多次找到两个函数的交点

时间:2014-10-21 03:40:29

标签: r function intersection solver

我正在尝试运行包“rootSolve”的函数“uniroot”来找到两个函数的交叉点。我的代码如下:

g1 <- function(x,y){x^2/y^2}
f1 <- function(x, y){ x^2-3*y+g1(x)}
f2 <- function(x, z){ 4*z-x^2 } 
f <- function(x, y, z){ 
x^2-3*y-(4*z-x^2) 
} 

z <- 5; 
y <- 3 

rr=uniroot(f=f, y=y, z=z, interval=c(0,10))$root 
rr

问题是当z和y是具有多个元素的向量时,例如:

z <- c(1, 2, 3) 
y <- c(3, 4, 5) 

rr=uniroot(f=f, y=y, z=z, interval=c(0,10))$root 

计算机会显示以下消息:

 f() values at end points not of opposite sign 
In addition: Warning messages: 
1: In if (is.na(f.lower)) stop("f.lower = f(lower) is NA") : 
  the condition has length > 1 and only the first element will be used 
2: In if (is.na(f.upper)) stop("f.upper = f(upper) is NA") : 
  the condition has length > 1 and only the first element will be used 

如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

尝试使用uniroot.all包中的rootSolve。它的方法可以给你不止一个答案。然后解决你的等式,以确保你获得良好的价值。