[英]Add lines connecting points on R's contour plot
我需要在它上面画几个点function的轮廓plot,并连接这些点。 除了最后一个,我已经完成了所有这些事情:我不知道如何使用lines()
function 连接点。
这是生成点的代码(这是一个最小化过程,点包含在名为“tabela”的表中)
n=2; x=c(1,4) # número de tentativa, ponto inicial
f = function(x,y){((x)-3)^2+(3*x-2*y)^4} # função objetivo
fexpr=expression(((x+lambda*e1)-3)^2+(3*(x+lambda*e1)-2*(y+lambda*e2))^4) # transforma em expressão
deriv_1=function(x,y,e1,e2,lambda){eval(D(fexpr,'lambda'))} # derivada
deriv_2=function(x,y,e1,e2,lambda){eval(D(D(fexpr,'lambda'),'lambda'))}
tabela=data.frame() # inicia uma tabela a ser preenchida pelo for loop
i=1
for (k in 0:100){
e=diag(1,nrow = n)[,i]
lambda=0
for (j in 1:10){
lambda=lambda-deriv_1(x=x[1],y=x[2],e1=e[1],e2=e[2],lambda=lambda)/
deriv_2(x=x[1],y=x[2],e1=e[1],e2=e[2],lambda=lambda)
}
f_x=eval(fexpr,list(x=x[1],y=x[2],e1=0,e2=0,lambda=0))
linha_tabela=data.frame(k=k,x=x[1],y=x[2],f_x=f_x,lambda=lambda)
tabela=rbind(tabela,linha_tabela)
x=x+lambda*e
if (i<n){i=i+1}else{i=1}
}
然后轮廓由
funcao = function(x,y){((x)-3)^2+(3*x-2*y)^4} # função objetivo
x1 = seq(0,5,length=100)
x2 = seq(0,5,length=100)
all.x = expand.grid(x1,x2)
eval.fx = funcao(x=all.x$Var1, y=all.x$Var2)
fx = matrix(data = eval.fx, nrow=length(x1), ncol=length(x2), byrow=FALSE)
# persp(x=x1, y=x2, z=fx, col="red", xlim=c(-15,15), ylim=c(-15,15), scale=TRUE, shade=0.4)
par(pty="m")
contour(x=x1, y=x2, z=fx, col='navy', lwd=2,
main= expression(paste("Gráfico de Contorno para a função ", f(x,y))),
xlab = expression(x[1]),
ylab= expression(x[2]),
xlim=c(0,5),
ylim=c(0,5), levels = seq(1,100,length=10))
# gerando uma grade no plot
abline(h = seq(from = -10, to = 30, by = 5), lty = "dotted", col = "lightgray")
abline(v = seq(from = -10, to = 30, by = 5), lty = "dotted", col = "lightgray")
# marcando os eixos x e y
abline(h = 0, lwd = 2)
abline(v = 0, lwd = 2)
# exibe os pontos convergindo
points(tabela[1:7,2:3], col='red', pch=19)
这是它的样子。 我需要连接点的线。 谢谢你的帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.