Чтобы получить точку пересечения, мы можем использовать функцию optim в r, чтобы сделать так:
circle=function(x){
if(4<(x-3)^2) return(NA)# Ensure it is limited within the radius
sqrt(4-(x-3)^2)
}
fun=function(x)predict(fit,data.frame(x=x))
g=function(x)(circle(x)-fun(x))# We need to set this to zero. Ie solve this
sol1=optimise(function(x)abs(g(x)),c(1,5))$min
[1] 1.208466
Таким образом, две функции должны оценить одно и то же значение в x=1.208466
..
Чтобы сделать его еще более точным, вы можете использовать функцию optim
:
sol2= optim(1,function(x)abs(g(x)),g,method="Brent",upper=5,lower=1)$par
[1] 1.208473
Теперь вы можете оценить:
circle(sol1)
[1] 0.889047
fun(sol1)
1
0.8890654
circle(sol2)
[1] 0.889061
fun(sol2)
1
0.889061
Из вышесказанного вы можете сказать, что решение 2 очень близко ..
Построение этой точки на графике будет сложной задачей, поскольку функция draw.circle
рисует круги пропорционально zxes. Таким образом, каждый раз меняется в зависимости от того, насколько велика область графика.
Если бы вы написали свою собственную функцию круга:
circleplot=function(x,y,r){
theta=seq(0,2*pi,length.out = 150)
cbind(x+r*cos(theta),y+r*sin(theta))
}
Тогда вы можете сделать:
plot(x, y, type = "o",lwd = 2)
lines(est, col = "blue", lwd = 2)
lines(circleplot(3,0,2))
abline(v=sol2,col=2)
points(sol2,fun(sol2),col=2,pch=16)
