Как найти точки, где полиномиальное соответствие проходит через ноль
Я подгонял полиномиальную кривую 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
многократно.