![](/img/trans.png)
[英]get x-value given y-value: general root finding for linear / non-linear interpolation function
[英]Finding x-value at intersection between a linear and nonlinear equation in R
我有两个函数:一个用于行(y),另一个用于曲线(hnc)。 我想确定两个函数相交的一个x值
sigma = 0.075
mu = 0
r=0.226
theta=0.908
H=0.16
hnc <- function(x) (1/(sigma*sqrt(2*pi)))*(exp(-(x^2)/(2*(sigma^2))))
y <- function(x) 2*pi*x+(pi*r^2/((360/theta)/H))
curve(hnc,0,r,n=100,col="blue")
plot(y,0,r,add=T,col="red")
我尝试过使用nleqslv软件包,但是这会产生两个不同意的x值(也许是因为我使用的不正确)
int <- function(x){
z <- numeric(2)
z[1] <- (1/(sigma*sqrt(2*pi)))*(exp(-(x[1]^2)/(2*(sigma^2))))
z[2] <- 2*pi*x[2]+(pi*r^2/((360/theta)/H))
z}
nleqslv(c(0.14,0.14),int,method="Broyden")
任何帮助将非常感激!
谢谢,埃里克
如果单个变量似乎运行良好,则使用optimize
here来查找函数的最小值
xx <- optimize(function(x) abs(hnc(x)-y(x)), c(.10,.20))$minimum
abline(v=xx, lty=2)
您没有以正确的方式使用nleqslv
。 它用于求解具有与方程一样多的变量的非线性方程组。
您有两个函数,并且您希望确定在您的情况下由x
的单个值组成的交集。
你需要定义一个这样的新函数
g <- function(x) hnc(x) - y(x)
然后你可以使用uniroot
找到g(x)
的零,如下所示:
uniroot(g,c(0,1))
找到的根将是0.1417802
,这与第一个答案中的图表相对应。
最小化并不总是能找到交叉点; 如果没有交叉点,你会得到误导性的结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.