Как найти точки, где полиномиальное соответствие проходит через ноль

Я подгонял полиномиальную кривую 4-го порядка к своим данным следующим образом:

y<-c(-13,16,35,40,28,36,43,33,40,33,22,-5,-27,-31,-29,-25,-26,-31,-26,-24,-25,-29,-23,4)
x<-1:24

#4th order polynomial fit
fit<-lm(y~poly(x,4,raw=TRUE))

plot(x,y,ylim=c(min(y)-10,max(y)+10))
lines(x,predict(fit,data.frame(x=x)),col="red")
abline(h=0,lty=2)

Моей конечной целью было бы вычислить 3 точки этой кривой, где она встречается с нулевой линией.

Итак, во-первых, мне нужно расширить конец кривой, чтобы он прошел за нулевую линию в третий раз. Как только я это сделаю, я бы хотел вычислить 3 точки, где это уравнение проходит через нулевую линию.

1 ответ

Решение

Вы можете использовать predict функция, чтобы получить значения от вашей подогнанной модели. Например

pred <- function(x) predict(fit, newdata=data.frame(x=x))

Тогда, если вы хотите несколько корней, вы можете использовать функцию, такую ​​как uniroot.all от rootSolve пакет

rootSolve::uniroot.all(pred, c(0,30))
# 1.428859 11.990087 24.420745

который найдет корни между 0 и 30 от вашей модели. Вы также можете вызвать базовую функцию uniroot многократно.

Другие вопросы по тегам