R

时间:2017-04-18 06:51:51

标签: r optimization geometry nonlinear-optimization

我想在R(这是一个圆圈)中找到两个球体的交点,并在该圆圈上找到坐标的最大值和最小值。 领域是:

  

S1:x ^ 2 + y ^ 2 + z ^ 2 = 16

     

S2:(x + 1)^ 2 +(y + 1)^ 2 +(z + 1)^ 2 = 27

library(rgl)
s1 =spheres3d(x = 0, y = 0, z = 0, radius = 4)
s2 =spheres3d(x = -1, y = -1, z = -1, radius = sqrt(27))

我认为圆圈所在的平面将是:( R有什么方法可以从S1& S2中找到它?)。

P1:x + y + z = 4

所以现在我有一个最大化问题(P1受S1和S2影响):所以我做了这个代码:

eval_f <- function( x ) {
  return( list( "objective" = (x[1]+x[2]+x[3])-4,
                "gradient" = c(1,1,1) ))}
# constraint functions
eval_g_eq <- function( x ) {
  constr <- cbind(c( (x[1]+1)^2 + (x[2]+1)^2 + (x[3]+1)^2  - 27) , c(x[1]^2+x[2]^2+x[3]^2-16))
  grad <- cbind ( c( 2.0*(x[1]+1),
             2.0*(x[2]+1),
             2.0*(x[3]+1)
             ),c(2*x[1],2*x[2],2*x[3]) )
  return( list( "constraints"=constr, "jacobian"=grad ) )
}


# initial values
x0 <- c( 0, 0, 0 )

local_opts <- list( "algorithm" = "NLOPT_LD_MMA",
                    "xtol_rel" = 1.0e-7 )
opts <- list( "algorithm" = "NLOPT_LD_AUGLAG",
              "xtol_rel" = 1.0e-7,
              "maxeval" = 1000,
              "local_opts" = local_opts )
res <- nloptr( x0=x0, 
               eval_f=eval_f,eval_g_eq=eval_g_eq,
               opts=opts)
print( res )

链接到手册 - nloptr功能。

但我认为有一个错误!

0 个答案:

没有答案
相关问题