title: Scipy.optimize.root does not converge in Python while Matlab fsolve works, why?
body: <p>I am trying to find the root y of a function called f using Python.  </p>
  
  <p>Here is my code:</p>
  
  <pre><code>def f(y):
      w,p1,p2,p3,p4,p5,p6 = y[:7] 
      t1 = w - 0.99006633*(p1**0.5) - (-1.010067)*((1-p1))
      t2 = w - 22.7235687*(p2**0.5) - (-1.010067)*((1-p2))
      t3 = w - 9.71323491*(p3**0.5) - (-1.010067)*((1-p3))
      t4 = w - 2.43852877*(p4**0.5) - (-1.010067)*((1-p4))
      t5 = w - 3.93640207*(p5**0.5) - (-1.010067)*((1-p5))
      t6 = w - 9.22688144*(p6**0.5) - (-1.010067)*((1-p6))
      t7 = p1 + p2 + p3 + p4 + p5 + p6 - 1
      return [t1,t2,t3,t4,t5,t6,t7]
  
  
  x0 = np.array([-0.01,0.4,0.1,0.2,0.1,0.1,0.1])
  sol = scipy.optimize.root(f, x0)
  print sol 
  </code></pre>
  
  <p>Python does not find the root. However there is one, I found it with the function fsolve in Matlab.</p>
  
  <p>It is:</p>
  
  <p>[ 0.3901, 0.6166, 0.0038, 0.0202, 0.2295, 0.1076, 0.0223]</p>
  
  <p>I really want to use Python. Can anyone explain why scipy.optimize.root in Python does not converge while fsolve in Matlab does?</p>
  
  <p>For info, scipy.optimize.solve does not converge either.</p>