Hi Mike,

You function is discontinuous at -0.8, so you can
expect everything :-}! But this is not the only
problem. The algorithm for optimize never gets there.
In general there exists no universal method to find
the global maximum of a function (unless it satisfies
certain conditions). You can always get stuck with a
local maximum.
One possibility may be to divide the interval [-1,1]
into many small intervals, compute the function in
every interval and decide where approximately your
maximum is. Then you can use optimize for a smaller
interval. In your case, searching in [-1,0] gives
correct result. But this also may fail for a function
which is not continuous.

Regards,

Moshe.

--- Mike Lawrence <[EMAIL PROTECTED]> wrote:

> Hi all,
> 
> Consider the following function:
> 
> ####
> my.func = function(x){
>       y=ifelse(x>-.5,0,ifelse(x< -.8,abs(x)/2,abs(x)))
>       print(c(x,y)) #print what was tested and what the
> result is
>       return(y)
> }
> curve(my.func,from=-1,1)
> ####
> 
> When I attempt to find the maximum of this function,
> which should be  
> -.8, I find that optimize gets stuck in the plateau
> area and doesn't  
> bother testing the more interesting bits of the
> function:
> 
> ####
> optimize(my.func,interval=c(-1,1),maximum=TRUE)
> ####
> 
> I really don't understand why the search moves to
> the positive/ 
> constant area of the function and neglects the more
> negative area of  
> the function. On step #4, after finding that there
> is no difference  
> between tests at -.23, .23 & .52, shouldn't the
> algorithm try -.52?  
> In fact, it seems to me that it would make sense to
> try -.52 on step  
> 3, so that we've tested one negative, one positive
> (found no  
> difference), now one negative again. Thoughts?
> 
> Of course I could define my interval more reasonably
> for this  
> particular function, but this is in fact simply one
> of a class of  
> functions I'm exploring, none of which have known
> formal descriptions  
> as above (I'm exploring a large number of 'black
> boxes'). I do know  
> that the maximum must occur between -1 and 1 for all
> however. Please  
> advise on how I might use optimize more usefully.
> 
> Mike
> 
> --
> Mike Lawrence
> Graduate Student, Department of Psychology,
> Dalhousie University
> 
> Website: http://memetic.ca
> 
> Public calendar:
> http://icalx.com/public/informavore/Public
> 
> "The road to wisdom? Well, it's plain and simple to
> express:
> Err and err and err again, but less and less and
> less."
>       - Piet Hein
> 
> ______________________________________________
> R-help@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained,
> reproducible code.
>

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to