Free Python optimization framework

Monday, September 1, 2008

changes for ralg, oofun, handling NaNs

I have committed some changes related to
  • ralg: change for matrix B rejuvenation criterium, now by default it performs check "cond(b) less than 1e5" each 250th iter or provided a stop criterion has triggered on. However, for large nVars evaluation of numpy.linalg.cond(b) takes a time (for nVars = 1000 I got ~5 seconds at my AMD 3800+ X2). So it would be good to get estimation of cond(b) instead of exact value (like MATLAB's condest for sparse matrices; however, b is dense).
  • oofun: recursive 1st derivatives, appropriate example will be committed soon
  • handling NaNs: if right-derivative (f(x+dx)-f(x))/dx is NaN then left-derivative (f(x)-f(x-dx))/dx will be used; it's valid for both oofun and classic style, however, it doesn't resolve all possible issues. Also, I intend to add double-side derivative possibility in future: (f(x+dx)-f(x-dx))/(2*dx) via an oofun field, for example c2 = oofun(..., useDoubleSideDerivative = True,...)
  • some other (minor) ralg changes

1 comment:

Anonymous said...

NumPy probably calculates the inverse to get the condition number. The more effective, less exact way is afaik to randomly change the matrix and to solve the systems to see how different the results are, and thus estimating the condition number.