[SciPy-user] Bug(?) in optimize.leastsq when Jacobian matrix is provided (Complete) <Ignore my previous mail>

Abhiman Chatra abhiman at gmail.com
Thu Jun 23 10:33:14 EDT 2005


(Sorry my previous mail was incomplete)
Hi,

I am new to Python, SciPy and optimization. So excuse me if I have make 
mistakes.

My Problem : 
-------------------
I want to use optimize.leastsq function of scipy to find a least square fit. 
But my function in the parametric form is quite complicated. Hence I want to 
provide the Jacobian matrix to the leastsquare optimizer to improve its 
performance. But when I provide the function for calculating the Jacobian 
matrix, I get a windows error saying "python.exe has generated errors and 
will be closed by Windows. You will need to restart the program. An error 
log is being created <OK>"

Since this error cannot be caught I cannot trace the cause of this error. 
But my feeling is that this is some memory error. This error is not 
reproducible if I do not provide the function for calculating the Jacobian 
matrix.

My Configutration :
--------------------------
Machine : P4
OS : Windows 2000 Professional
Python : Python 2.3.3
Numeric : Numeric-23.5.win32-py2.3
Scipy : SciPy_complete-0.3.2.win32-py2.3-num23.5

( I have also tryed with the following configuration :
Python : Python 2.2.3
Numeric : Numeric-23.0.win32-py2.2
SciPy : SciPy_complete-0.3.2.win32-py2.2-num22.0
- Again my code fails)


Code :
---------------------------------------------------------------------------------------------------------------------------------
#This is not my actual code but a simplified version for simple linear 
regression fit
from scipy import *
import random
import pprint

inputs = [ 
[ 1.0 , 2.0 ],
[ 2.0 , 2.0 ],
[ 3.0 , 1.0 ],
[ 2.0 , 4.0 ]]

answers = [ 4.05 , 6.1 , 6.9 , 8.0 ]

def residual_values(betas, inp , ans) :
ret = [0.0] * len(inp)
for i in range(len(inp)) :
ret[i] = 1.0 * betas[len(inp[i])] - ans[i]
for j in range(len(inp[0])) :
ret[i] += betas[j] * inp[i][j]
print "In residual_values"
#print "Betas : "
#pprint.pprint(betas) 
#print "return value : "
#pprint.pprint(ret)
return ret

def jacobian(betas, inp , ans) :
print "In jacobian" 
J = [[0.0] * len(betas)] * len(inp)
for i in range(len(inp)) :
J[i][0] = inp[i][0]
J[i][1] = inp[i][1]
J[i][2] = 1.0
return J

try:
for i in range(100):
print("---------------- %d -----------------" % (i))
initial = [0.0] * 3
#random.shuffle(initial)
for i in range(3) :
initial[i] = 1.0
opt = optimize.leastsq(residual_values, initial, args = (inputs, answers), 
Dfun=jacobian, maxfev=10000)
#opt = optimize.leastsq(residual_values, initial, args = (inputs, answers), 
maxfev=10000)

pprint.pprint(opt)

except:
print "Error regression fitting model..."

pprint.pprint(locals())

raise
---------------------------------------------------------------------------------------------------------------------------------


Can someone please let me know what is causing the crash? My feeling is that 
this is a bug in SciPy. Any help is greatly appreciated.

Thanks,
Abhiman

-- 
Abhiman Chatra B,
Technical Analyst,
Trilogy India,
Mobile # : 9845358165
----------------------------------------------------
"If only your programs would be correct if you simply typed them three 
times"
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.scipy.org/pipermail/scipy-user/attachments/20050623/5198b123/attachment.html>


More information about the SciPy-User mailing list