Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用R计算切线交点_R_Plot_Intersection_Spline - Fatal编程技术网

用R计算切线交点

用R计算切线交点,r,plot,intersection,spline,R,Plot,Intersection,Spline,我正试图在点x=30处向我的绘图添加一条切线,我想计算y=0.08处切线的x交点 我已经找到了一个非常有用的示例,我尝试使用它,但由于某种原因,它不适用于y=0.08。 我不理解deriv在predict()函数中的含义,也不理解pred0和pred1之间的实际区别。有人能解释一下吗 x <- seq(0,40) y <- dnorm(seq(0,40), mean=25, sd=5) plot(x, y) spl <- smooth.spline(y ~ x) lines(s

我正试图在点
x=30
处向我的绘图添加一条切线,我想计算
y=0.08处切线的x交点

我已经找到了一个非常有用的示例,我尝试使用它,但由于某种原因,它不适用于
y=0.08
。 我不理解deriv在
predict()
函数中的含义,也不理解pred0和pred1之间的实际区别。有人能解释一下吗

x <- seq(0,40)
y <- dnorm(seq(0,40), mean=25, sd=5)
plot(x, y)
spl <- smooth.spline(y ~ x)
lines(spl, col="green")

newx <- 30
pred0 <- predict(spl, x=newx, deriv=0)
pred1 <- predict(spl, x=newx, deriv=1)

yint <- pred0$y - (pred1$y*newx)
xint <- -yint/pred1$y
xint



plot(x, y)
abline(h=0, col="red")
lines(spl, col="red") 
points(pred0,col="red", pch=19) 
lines(x, yint + pred1$y*x) 
points(xint, 0, col="red", pch=19) 

x计算切线和交点似乎没有问题,但需要一些帮助来查找给定
y
值的
x
值。此方法适用于任何平滑曲线,但马克·格雷戈斯警告。可能没有对应的x值,或者可能有多个

x <- seq(0, 40, by=0.01)
y <- dnorm(x, mean=25, sd=5)
spl <- smooth.spline(y ~ x)
plot(spl, type="l")

yval <- 0.08
ad <- abs(yval - spl$y)

if (min(ad) > max(diff(spl$y))*10) {
    warning("The supplied y value is out of bounds")
}

xval <- x[which(diff(sign(diff(ad))) > 1) + 1]
points(xval, rep(yval, length(xval)))

x,其中
deriv=0
没有导数---在该点获得样条曲线的值。使用
deriv=1
,您可以获得该点的一阶导数(斜率)值。通常,
predict()
方法允许您输入
x
并获得
y
的值。当你说你想在
y=0.8
时得到一条切线时,如果你想使用
predict
,你的第一步应该是找到与
y=0.8
对应的
x
值。(可能有多个x值,也可能没有x值,这取决于
y
)。@Gregor感谢您指出导数的实际含义。我仍然不知道如何实际解决这个问题。我如何找到对应于y=0.08的x值,因此我尝试使用predict来找到它。Sry,我有点困惑。谢谢你的回答。但出于某种原因,我似乎仍在做错事。我计算的x值输出是数值(0)。您是否注意到
x中的
x
[哪个(diff(sign(diff(ad)))>1)+1]
与第一行中的
x
相同?代码实际上会找到一个索引,然后在那里返回
x
的值。除此之外,逐行检查结果,哪里出了问题?啊,对不起。成功了。这只是一个愚蠢的错误:)非常感谢!你们都帮了我很多:)