in last equation i need to solve for q. Here is the problem from miranda feckler , I need to develop equivalent python code如果我的函数基于许多变量,我只需要解决一个变量的非线性根发现问题,那么我将如何编写 -
当我写下所有三个变量时,我得到以下错误
TypeError: 'numpy.ndarray' object is not callable
当我只写一个变量时 -
我收到错误 -
TypeError: resid() missing 2 required positional arguments: 'p' and 'phi'
任何人都可以告诉我我的错误和更好的代码。
答案 0 :(得分:0)
broyden1(resid(co, p_node, q), co)
因为术语resid(co, p_node, q)
在传入函数之前被评估(返回一个数组)而中断。
broyden1(resid, co)
因为当broyden1评估它时会调用resid(co),这显然没有明确定义。您希望能够将初始猜测作为单个对象(例如元组)传递给broyden1,因此一个简单的解决方案是重新定义残差以获取元组而不是三个单独的参数,如下所示:
def resid(arg):
c,p,phi = arg
return p + (phi * c) * ((-1 / eta) * (p ** (eta + 1))) \
- alpha * (np.sqrt(np.abs(phi * c))) - (phi * c) ** 2
c1 = scipy.optimize.broyden1(resid, (co, p_node, q))