2011-07-12 24 views
0

Rプログラミングの質問 - こんにちは、私たちは研究プログラムに参加している2人の夏の研究生です。試行錯誤の末、最適化コードで「最適化で無効な関数値」のエラーの原因を突き止めることができませんでした。あなたがどんな洞察力を提供することができれば、それは評価されるでしょう。ここでR:最適化に関する質問 - 最適化で無効な関数値

H_fun <- function(c) 
{ 
val = -current_c_weight*c - X_counts%*%log( 
exp(rep(c,length(current_Theta))*current_Theta) - 
current_elongation_rates) 
print('#########iteration display#############') 
print('c') 
print(c) 
print('val') 
print(val) 
print('current_c_weight') 
print(current_c_weight) 
print('current_Theta') 
print(current_Theta) 
print('current_elongation_rates') 
print(current_elongation_rates) 
} 

#...snip... 

# minimize -H(c) without the non-negativity constraint 
#tmp = optim(c(0,1),H_fun,NULL, method = "BFGS", hessian = TRUE); 
tmp = optimize(H_fun,interval = c(0,1)); 

は、コードへのリンクです:

http://www.text-upload.com/read.php?id=102950&c=8605046

+0

エディタのおかげで! –

+0

あなたの例は再現性がありません。 'current_c_weight'、' X_counts'、 'current_Theta'、' current_elongation_rates'の値を投稿してください。 – Andrie

+0

@Andrie、完全なソースコードは、text-upload.comリンクにあります。 –

答えて

3

あなたはH_funは、1次元値を返していますか? R optimize() source codefcn1()

ルック:

static double fcn1(double x, struct callinfo *info) 
{ 
    SEXP s; 
    REAL(CADR(info->R_fcall))[0] = x; 
    s = eval(info->R_fcall, info->R_env); 
    switch(TYPEOF(s)) { 
    case INTSXP: 
     if (length(s) != 1) goto badvalue; 
     if (INTEGER(s)[0] == NA_INTEGER) { 
      warning(_("NA replaced by maximum positive value")); 
     return DBL_MAX; 
     } 
     else return INTEGER(s)[0]; 
     break; 
    case REALSXP: 
     if (length(s) != 1) goto badvalue; 
     if (!R_FINITE(REAL(s)[0])) { 
      warning(_("NA/Inf replaced by maximum positive value")); 
      return DBL_MAX; 
     } 
     else return REAL(s)[0]; 
     break; 
    default: 
     goto badvalue; 
    } 
badvalue: 
    error(_("invalid function value in 'optimize'")); 
    return 0;/* for -Wall */ 
} 

goto badvalue長さはまた、1でない場合、()を最適化package summary状態が一次元制約のない機能で動作が発生します。