finding a global minimum


Anthony LOMBARD
07-17-2003, 03:14 AM
I used the Direction Set (Powell's) method to obtain the global minimum of a multidimensional function. First I would like to know wether this method gives a global or a local minimum.

I used the "xpowell" program to test the algorithm of Powell and I realized that what ever the function I wanted to minimize, the algortihm of Powell makes only two iterations. Actually I found that during the second iteration, the termination criterion is always satisfied because we have fp=(*fret).

With the original Bessel function programmed in "xpowell" :
0.5-bessj0(SQR(x[1]-1.0)+SQR(x[2]-2.0)+SQR(x[3]-3.0)), the algorithm find the good minimum at (1;2;3) but when I translate the Bessel function to find a minimum, for example, at (3;4;5) :
0.5-bessj0(SQR(x[1]-3.0)+SQR(x[2]-4.0)+SQR(x[3]-5.0)), the program find a minimum at (2.092424;1.500000;2.500000) after the second iteration. Is it normal?

Saul Teukolsky
07-17-2003, 12:41 PM
Dear Anthony,

powell finds only a local minimum.

The example you tried of shifting the zero of the function to (3,4,5) is actually quite a difficult one, especially in single precision. But there is a local minimum near to where powell was finding it. You can change to double precision (and decreas FTOL). The powell will take more than 2 iterations and find the local zero more precisely.

Best wishes,
Saul Teukolsky

Miha
12-01-2005, 04:22 AM
I also tried to use the same direction set method and it doesn't work for me either. I tried various starting conditions and shifted the zeroes around. The method always takes one step only regardless of the FTOL value which I set to a very small value.

I am using NR in C++, Unix version 2.10.