[SciPy-dev] BUG gradient in leastsq (http://projects.scipy.org/scipy/scipy/ticket/416)
dmitrey
openopt@ukr....
Mon Jul 30 10:05:32 CDT 2007
Bruce Southey wrote:
> Hi,
> My 0.5 cents on this, as I don't use it, is that I do think the issue
> lies elsewhere than here.
>
> In my 'old' scipy0.5.2 code, MATRIXC2F is ONLY used if
> multipack_jac_transpose ==1
>
> by the three functions:
> Lib/optimize/__minpack.h, h jac_multipack_lm_function and
> jac_multipack_calling_function
> Lib/integrate/__odepack.h the ode_jacobian_function
>
> Also, it may be that the expectation is not correct ie that case 2)
> with gradient info, col_deriv=0 is switched with 3) with gradient
> info, col_deriv=1 since, my limited take on the C code, is that
> col_deriv changes multipack_jac_transpose.
>
> Bruce
>
the func MATRIXC2F is defined twice:
in Lib/optimize/minpack.h for Lib/optimize/__minpack.h
and
in Lib/integrate/multipack.h for Lib/integrate/__odepack.h
I didn't know anything about latter, but my changes didn't affect the
Lib/integrate package. On the other hand, now scipy has 2 separate
definition of MATRIXC2F, one with params (jac, data, m,n) and other with
(jac,dataq, n, m). I don't know anything is there are any mistakes in
integrate package, but having defined two funcs MATRIXC2F with different
args isn't very good idea.
Afaik there are no bugs for now, I checked all 3 cases mentioned:
1) w/o gradient info
2) with gradient info, col_deriv=0
3) with gradient info, col_deriv=1 (in the case I modified the user's
gradient func so that it returns transposed gradient)
Or do you have an example of incorrect leastsq work?
If yes, please send the one.
Regards, D.
>
>
> On 7/30/07, Andy Jennings <scipy2mdjhs78c@jenningsstory.com> wrote:
>
>> On 7/26/07, Alan G Isaac <aisaac@american.edu> wrote:
>>
>>> On Thu, 26 Jul 2007, dmitrey apparently wrote:
>>>
>>>> 1. What's the difference between these 2 funcs from __minpack.h:
>>>> int jac_multipack_calling_function(int *n, double *x, double *fvec,
>>>> double *fjac, int *ldfjac, int *iflag)
>>>> int jac_multipack_lm_function(int *m, int *n, double *x, double *fvec,
>>>> double *fjac, int *ldfjac, int *iflag)
>>>>
>>>> They have same description.
>>>>
>>>> /* This is the function called from the Fortran code it should
>>>> -- use call_python_function to get a multiarrayobject result
>>>> -- check for errors and return -1 if any
>>>> -- otherwise place result of calculation in *fvec or *fjac.
>>>>
>>>> If iflag = 1 this should compute the function.
>>>> If iflag = 2 this should compute the jacobian (derivative matrix)
>>>> */
>>>>
>>>> 2. So patch assigned to the ticket proposes to rewrite the line 152
>>>> MATRIXC2F(fjac, result_array->data, *n, *ldfjac)
>>>> as
>>>> MATRIXC2F(fjac, result_array->data, *ldfjac, *n)
>>>>
>>>> however, line 92 is the same. so maybe it needs same patch.
>>>>
>>>> 3. The MATRIXC2F is defined in minpack.h w/o any description:
>>>>
>>> > #define MATRIXC2F(jac,data,n,m) {double *p1=(double *)(jac), *p2,
>>>
>>>> *p3=(double *)(data);\
>>>> int i,j;\
>>>> for (j=0;j<(m);p3++,j++) \
>>>> for (p2=p3,i=0;i<(n);p2+=(m),i++,p1++) \
>>>> *p1 = *p2; }
>>>>
>>>> I have no idea what does it do.
>>>> So I replaced (jac,data,n,m) by (jac,data,m,n), and user's example works
>>>> correctly for all cases 1-3:
>>>> 1) w/o gradient info
>>>> 2) with gradient info, col_deriv=0
>>>> 3) with gradient info, col_deriv=1 (in the case I modified the user's
>>>> gradient func so that it returns transposed gradient)
>>>>
>>>> scipy.test(1) also didn't yield any bugs related to leastsq.
>>>>
>>>
>>> Andy, and others, can you comment on this?
>>> Also, I would hope for Travis to comment
>>> before committing these changes, since he
>>> contributed the code.
>>>
>>> Here is the situation:
>>> http://projects.scipy.org/scipy/scipy/ticket/416
>>> Andy identified a bug and a possible fix.
>>> (But see details above.)
>>> Neither Dmitrey nor I are familiar with this code.
>>> Dmitrey is willing to apply the patch if there is support
>>> for his doing so, but it will be done "mechancially".
>>> In any case, he will add a unit test exposing the problem.
>>>
>>> Cheers,
>>> Alan Isaac
>>>
>>>
>>>
>>>
>>>
>>>
>> Thanks for looking at this bug. The fix looks fine to me.
>>
>> I don't really have an opinion on the jac_multipack_calling_function
>> question. I think it's likely that it has the same issue, but on the
>> chance that it doesn't, you hate to risk breaking something that's
>> working correctly.
>> _______________________________________________
>> Scipy-dev mailing list
>> Scipy-dev@scipy.org
>> http://projects.scipy.org/mailman/listinfo/scipy-dev
>>
>>
> _______________________________________________
> Scipy-dev mailing list
> Scipy-dev@scipy.org
> http://projects.scipy.org/mailman/listinfo/scipy-dev
>
>
>
>
More information about the Scipy-dev
mailing list