Hi, Sorry about that, I was using an old version.
On 2014/03/30 03:44 PM, Allin Cottrell wrote: > On Sun, 30 Mar 2014, GOO Creations wrote: > >> I think this might be a bug. When using the ARMA model, I sometimes get a >> message "numerical gradient: switching to Richardson". However, once I get >> this message, nothing else happens, but the CPU stays at 100%. After closer >> inspection, I've noticed that the richardson_gradient function in >> lib/src/gretl_bfgs.c never returns (so some kind of infinite loop in there). > You're right, it was a bug. But it was fixed in CVS, in revision 104 of > gretl_bfgs.c in December of last year. > >> So I did some debugging and believe this is the problems: >> >> The last part of the function has 2 nested loops as follows: >> >> / for (m=0; m<r-1; m++) {// >> // for (k=0; k<r-m; k++) {// >> // df[k] = (df[k+1] * p4m - df[k]) / (p4m - 1.0);// >> // }// >> // p4m *= 4.0;// >> // }// >> / >> >> >> At the beginning of the function, r is initialized to RSTEPS which is 4, and >> the array df has RSTEPS elements. When looking at the code above, we can see >> that once the outer loop starts, m is 0. The inner loop will therefore run >> from k=0 to k<r-m. r is 4, m = 0, therefore r-m=4-0=4. The inner loop will >> therefore run with k equal to 0, 1, 2 and 3. Now inside the inner loop, we >> access df[k+1]. If k=3, we will access df[3+1] which is df[4]. Since df has a >> size of 4, we are accessing an invalid index (max of 3 allowed). This >> probably causes some important memory to be overriden, and the inner loop >> becomes infinite. For some reason (I think some memory problems), the inner >> loop will just keep running. The value of k will increase (0, 1, 2, 3, 4, 5, >> ... to infinity) and the value of r-m will stay at 4, but for some reason the >> loop doesn't exit (so the check k<r-m will not stop the loop, even if k >> exceeds 3). >> >> If you remove the statement: >> >> /df[k] = (df[k+1] * p4m - df[k]) / (p4m - 1.0);/ >> >> / >> /from the inner loop, everything works perfectly. I therefore think the >> access df[k+1] causes the problem. >> >> Is this a bug or am I missing something? >> >> Regards >> Chris >>