有没有办法在pracma中强制fminsearch将其搜索约束到指定的参数子空间?如果没有,是否有替代fminsearch可以做到这一点?
我的实际案例有很多与此问题无关的复杂性,所以这里只是一个简单的案例。由于参数值不受约束,因此fminsearch会在底部的第二个示例中尝试无效值,这会导致错误。如果有办法告诉fminsearch第一个参数必须是非负的,但是怎么做呢?
可以避免这些错误。library( pracma )
fit_param = function(D) {
return( fminsearch( error_fn, c(5,1), D=D ) )
}
error_fn = function( params, D ) {
pred_y = replicate( nrow(D), predict(params,D) )
SSE = sum((D$y-pred_y)^2)
return( SSE )
}
predict = function( params, D ) {
if ( params[1]<0 ) {
writeLines( paste( "invalid parameter value for parameter 1:", params[1] ) )
}
pred = sqrt(params[1]) * D$x + params[2]
return( pred )
}
true_model = function( D, params ) {
return( predict( params, D ) )
}
D = data.frame( x=replicate(100,rand()) )
D$y = true_model( D, c( 5, 1 ) )
fit_param( D ) # works
D$y = true_model( D, c( .5, 1 ) )
fit_param( D ) # doesn't work - comes too close to zero and tries out negative values, resulting in errors