【问题标题】:Finding x-value at intersection between a linear and nonlinear equation in R在 R 中的线性和非线性方程之间的交点处查找 x 值
【发布时间】:2014-09-07 20:08:14
【问题描述】:

我有两个函数:一个用于直线 (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")

任何帮助将不胜感激!

谢谢, 埃里克

【问题讨论】:

    标签: r intersection nonlinear-functions


    【解决方案1】:

    您没有以正确的方式使用nleqslv。它旨在求解具有与方程一样多的变量的非线性方程组。

    您有两个函数,并且您想确定在您的情况下由 x 的单个值组成的交集。

    你需要像这样定义一个新函数

    g <- function(x) hnc(x) - y(x)
    

    然后您可以使用uniroot 找到g(x) 的零,如下所示:

    uniroot(g,c(0,1))
    

    找到的根将是0.1417802,它与第一个答案中的图表相对应。

    最小化并不总是能找到交点;如果没有交点,你会得到误导性的结果。

    【讨论】:

      【解决方案2】:

      在此处使用optimize 来查找函数的最小值(如果单个变量似乎运行良好)

      xx <- optimize(function(x) abs(hnc(x)-y(x)), c(.10,.20))$minimum
      abline(v=xx, lty=2)
      

      【讨论】:

        猜你喜欢
        • 2017-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多