在R'上添加连接点的线;s等值线图
我需要画一个特定函数的等高线图,在上面画几个点,然后连接这些点。除了最后一个,我已经做了所有这些事情:我不知道如何使用在R'上添加连接点的线;s等值线图,r,plot,R,Plot,我需要画一个特定函数的等高线图,在上面画几个点,然后连接这些点。除了最后一个,我已经做了所有这些事情:我不知道如何使用lines()函数连接点 下面是生成点的代码(这是一个最小化过程,点包含在名为“tabela”的表中) 这是它的样子。我需要连接点的线!谢谢你的帮助 这是响应面方法吗?使用点创建绘图后,可以通过代码线(tabela[1:7,2:3],col=“black”)将点与线连接起来 我想我已经试过了。谢谢这就是优化。特别是在坐标轴方向上的循环极小化方法。我被要求实现该算法并直观地演示其收
lines()
函数连接点
下面是生成点的代码(这是一个最小化过程,点包含在名为“tabela”的表中)
这是它的样子。我需要连接点的线!谢谢你的帮助
这是响应面方法吗?使用点创建绘图后,可以通过代码
线(tabela[1:7,2:3],col=“black”)
将点与线连接起来
我想我已经试过了。谢谢这就是优化。特别是在坐标轴方向上的循环极小化方法。我被要求实现该算法并直观地演示其收敛性。
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)