24小时热门版块排行榜    

CyRhmU.jpeg
查看: 182  |  回复: 0
当前主题已经存档。
【有奖交流】积极回复本帖子,参与交流,就有机会分得作者 cheng2169 的 10 个金币

cheng2169

木虫 (正式写手)

[交流] 【求助】求助: 帮忙看看这是什么高级程序,把它改成MATLAB 应该怎么写?

Sim<- function(alpha=1,beta=0.5,gamma=2,epsilon=200)
{
  Funk<-function(x1,x2) 100*(x2-x1^2)^2+(1-x1)^2
  P1=c(2,1)# 初期点
  P2=c(9,2)
  P3=c(1,5)
  Dim1 <- 3 #点的数
  Q<-P<- matrix(c(P1,P2,P3),ncol=3,nrow=2)
  y<-0
  for(i in 1:dim1)
    y<-funk(P[1,i],(P[2,j]))
  y<-sort(y)
  for(i in 1:dim1)
    for(j in 1:dim1)
      if(y==funk(P[1,j],P[2,j]))
        Q[,i] <-P[,j]
  for(i in 1:dim1){
      if(y==funk(Q[1,dim1],Q[2,dim1])){
        xh=c(Q[1,dim1],Q[2,dim1])
      } else if(y==funk(Q[1,1],Q[2,1])){
        x1=c(Q[1,1],Q[2,1])
      }else if(y !=funk(Q[1,dim1],Q[2,dim1])&& y !=funk(Q[1,1],Q[2.1])){
        xs=c(Q[1,i],Q[2,i])
      }
  }
  x0<-0
  p<-q<-seq(-5,5,length=100)
  r<-outer(p,q,funk)
  contour(p,q,r,labels=””)
  par(new=T)
  #stop condition
  z<-y
  for(i in 1:dim1) z=(y-(1/dim1)*sum(y))^2


for(v in 1:100){
   segments(xh[1],xh[2],xl[1],xl[2])
   segments(xs[1],xs[2],xl[1],xl[2])
   segments(xs[1],xs[2],xh[1],xh[2])
   if((1/dim1*sum(z))^(1/2) < epsilon)  break #停止条件
x0<-(xs+xl)/2
#Reflcetion
xr=(1+alpha)*x0-alpha*xh
if(funk(xr[1],xr[2]) <=funk(xs[1],xs[2])){
    if(funk(xr[1],xr[2])       xe <-gamma*xr+(1-gamma) * x0   #expansion
      if(funk(xe[1],xe[2])         xh <-xe
      } else if(funk(xe[1],xe[2])         xh <-xr
      }
    } else if(funk(xr[1],xr[2]) >=funk(xl[1],xl[2])){
      xh <-xr
    }
  } else if(funk(xr[1],xr[2]) >funk(xs[1],xs[2])){
    if(funk(xr[1],xr[2])       xh <-xr
    }
    xc=beta * xr + (1-beta)* x0       #contraction
    if(funk(xc[1],xc[2]) < funk(xh[1],xh[2])){
      xh<-xc
    }else if(funk(xc[1],xc[2]) >=funk(xh[1],xh[2])){
      xh <- 1/2(xh+xl)
      xs <- 1/2(xs+xl)
    }
}
}
return(xh)
}
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 cheng2169 的主题更新
普通表情 高级回复(可上传附件)
信息提示
请填处理意见