Настройка:
ins <- 40
t <- 30
avg <- 30
deriv(...,function.arg=TRUE)
возвращает функцию, которая дает значение функции в качестве основного результата и градиент в качестве атрибута.
FUN <- deriv(~ins/2^(x/10+1-1),"x",function.arg=TRUE)
curve(FUN(x),
0,2*t,xlim=c(-2*t,2*t),
ylim=c(ins,0),
xlab="time",ylab="food",type="l",
lty=1,col=4,lwd=3,axes=FALSE)
axis(1,pos=ins); axis(2,pos=0)
Нам нужночтобы решить уравнение ((40+x)*D(x)+40=f(x))
(где D(x)
- градиент, а f(x)
- значение функции):
Перевод этого уравнения в функцию, которая вернет 0, когда уравнение истинно:
rfun <- function(x) {
f <- FUN(x)
(40+x)*attr(f,"gradient")+40-f
}
u1 <- uniroot(rfun,c(-40,60))
Производная в точке пересечения:
d1 <- attr(FUN(u1$root),"gradient")
Нарисуйте отрезок:
segments(x0=-40,y0=40,x1=40,y1=40+(40+40)*d1,
col=4,lwd=3,lty=2)