######################## ## Tangente e Derivada # ######################## ## Função para produzir gráficos das tangentes de uma função ## e da sua derivada. A expressão de entrada "fx" deve ser uma ## um objeto produzido por "expression()" e ser derivável. ############################ ## Autor: ## Alexandre Adalardo de Oliveira ## 03 May 2012 ########################### deriva_tang=function(fx, x.lim=c(-1,1), nder=10) { if(is.expression(fx)==FALSE ) { stop("Argumento fx precisa ser uma expressão a ser derivada na variável x\n . Use a função expression() para criá-la") } dfx=D(fx, "x") x.seq=list(x=seq(from=x.lim[1], to=x.lim[2], len=1000)) x.pos=seq(1,1000,len=nder) #is.list(x.list) y.fx=eval(fx, envir=x.seq) y.dfx=eval(dfx,envir=x.seq) b.tang=y.fx-(y.dfx*x.seq$x) ################## ## gráfico base # ################# cores=rainbow(nder) par(cex.lab=1.2, cex.axis=1.2, mfrow=c(1,2), mar=c(5,4,2,1)) plot(x.seq$x,y.fx, type="l", ylab=paste(fx) , xlab="x", lwd=2) points(x.seq$x[x.pos[1]],y.fx[x.pos[1]], col=cores[1], pch=16, cex=1.2) abline(b.tang[x.pos[1]], y.dfx[x.pos[1]],col=cores[1], lty=2) plot(x.seq$x, y.dfx, type="n", ylab=paste("Taxa Instantânea (", paste(as.expression(dfx),sep=""), ")", sep=""), xlab="x") points(x.seq$x[x.pos[1]],y.dfx[x.pos[1]] , pch=16, col=cores[1], cex=1.2) ####################### ### Criando ciclos ####################### for(i in 2:nder) { par(mfg=c(1,1)) plot(x.seq$x,y.fx, type="n", xaxt="n", yaxt="n",ylab="", xlab="") points(x.seq$x[x.pos[i]],y.fx[x.pos[i]], col=cores[i], pch=16, cex=1.2) abline(b.tang[x.pos[i]], y.dfx[x.pos[i]], col=cores[i], lty=2) par(mfg=c(1,2)) plot(x.seq$x, y.dfx, type="n", xaxt="n", yaxt="n",ylab="", xlab="") points(x.seq$x[x.pos[i]],y.dfx[x.pos[i]] , pch=16, col=cores[i], cex=1.2) } lines(x.seq$x, y.dfx, type="l", lty=2, xaxt="n", yaxt="n",ylab="", xlab="") } ################## FIM ######################