<p>如果我运行你的函数:</p>
<pre><code>In [83]: ep1, uc1 = fsolve(equation1, [1, 500],args=(7.62, [8,10,12]))
...
ValueError: setting an array element with a sequence.
</code></pre>
<p>但是看看调用堆栈。很长,但这条线很显眼</p>
^{pr2}$
<p>它正在对你的函数进行测试调用。在</p>
<p>例如:</p>
<pre><code>In [121]: x0=np.array([1,500])
In [122]: numinputs=2
In [123]: args = (1,8) # scalar G
In [124]: np.atleast_1d(equation1(*((x0[:numinputs],) + args)))
Out[124]: array([-102.01, 8. ])
In [125]: args = (1,[8,10]) # list G
In [126]: np.atleast_1d(equation1(*((x0[:numinputs],) + args)))
....
ValueError: setting an array element with a sequence.
</code></pre>
<p>具体看一下你的函数产生了什么:</p>
<pre><code>In [127]: equation1(*((x0[:numinputs],) + args))
Out[127]: (-102.01000000000001, array([ 8., 10.]))
</code></pre>
<p>它无法将此元组转换为有效的1d数组,因此会出现错误消息。在</p>
<p>请注意,函数的参数是:</p>
<pre><code>In [128]: ((x0[:numinputs],) + args)
Out[128]: (array([ 1, 500]), 1, [8, 10])
</code></pre>
<p><code>fsolve</code>将整个<code>args</code>元组传递给函数。它不遍历数组或列表。在</p>
<p>因此,您想要<code>fsolve</code>对于不同的<code>G</code>值,您必须自己进行迭代。<code>fsolve</code>(以及其他大多数<code>scipy</code>函数)不会为您完成此操作。在</p>