繁体   English   中英

在 R 的轮廓 plot 上添加连接点的线

[英]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)

这是它的样子。 我需要连接点的线。 谢谢你的帮助。

在此处输入图像描述

这是响应面方法吗? 在用点创建 plot 后,您可以通过代码lines(tabela[1:7, 2:3], col="black")将点与线连接起来。

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM