2017-03-20 16 views
0

임은 quadprog 패키지를 사용하여, R에서 다음과 같은 문제를 해결하기 위해 노력 :R 오류 QP : 양의 한정 매트릭스가 아닙니까?

min: vec %*% p + t(p) %*% mat %*% p 
st: p >= 0 

mat <- matrix(c(1162296,0,0,0,0,1,0,0,951.7089,0,1,0,-951.7089,0,0,1),4) 
vec <- c(6341934541.1,175800.1,-356401.7,14398073047.1) 

내가

libary(quadprog) 
solve.QP(2*mat,-vec, diag(4), integer(4)) 

사용했지만 나는 다음과 같은 오류가 계속 :

Error in solve.QP(2*mat, -vec, diag(4), integer(4)) : 
    matrix D in quadratic function is not positive definite! 
클리 어리 그러나 617,451,515,

, 내가 뭘 잘못

> eigen(mat)$values > 0 
[1] TRUE TRUE TRUE TRUE 

? 어떻게이 오류가 계속 나타 납니까?

답변

0

매트릭스 mat은 대칭이 아닙니다. quadprog 패키지는 정의에 따라 최상위 용어로 대칭 행렬을 필요로하는 이차 프로그램을 해결하도록 설계되었습니다. 예를 들어 here을 참조하십시오.

작성된대로이 문제를 해결하려면 일반 제약 최적화 알고리즘을 사용해야합니다. 예를 들어 constrOptim을 다음과 같이 시도 할 수 있습니다.

# system matrices 
mat <- matrix(c(1162296,0,0,0,0,1,0,0,951.7089,0,1,0,-951.7089,0,0,1),4) 
vec <- c(6341934541.1,175800.1,-356401.7,14398073047.1) 

# an initial value 
p0 <- c(1,1,1,1) 

# the objective function 
objective <- function(p) { 
    vec %*% p + t(p) %*% mat %*% p 
} 

# solve -- warning! without additional work you won't know if this is a global minimum solution. 
solution <- constrOptim(p0, objective, NULL, diag(4), c(0,0,0,0))