我有一个由用户随机定义的三维函数Z=f(x,y)
def f(x,y):
return ((7*x*y)/(np.exp(x**2+y**2)))
我将此函数转换为极坐标,替换为:
x_c = r*np.cos(theta)+x1; y_c = r*np.sin(theta)+y1;
在哪里
theta = np.linspace(0, 2*np.pi, 30);
r,x1和y1是常数
现在我需要用NR方法找到极坐标形式的函数Z(θ)的根:
from scipy.optimize import newton
Z_func = f(x_c,y_c);
root = newton(Z_func,theta.any());
错误消息显示:
q0 = func(*((p0,) + args)) TypeError: 'numpy.ndarray' object is not callable
牛顿法只接受一个可调用的函数如何使函数f(x,y)可调用?你知道吗
我不想替换如下所示,并在牛顿法中调用它
7*(r*np.cos(theta)+x1)*(r*np.sin(theta)+y1))/(np.exp((r*np.cos(theta)+x1)**2+(r*np.sin(theta)+y1)**2)
因为我不知道将要给出的函数f(x,y)。你知道吗
任何想法都将不胜感激
你的问题是对的。
scipy.optimize.newton()
只接受可调用函数。因此,您可以简单地定义z_func()
:一个函数,它接受您的优化变量(在本例中是theta)并返回需要零的函数的输出。我选择了分离函数并保留您的结构,但是使用了lambda
操作符(参见下面的代码)。你知道吗备注:我不知道为什么要使用
theta.any()
作为起始值,因为它返回一个True,并转换为1,这使我对θ数组的定义产生疑问,因为您所需要的只是一个起始值(尽管如此,这很重要,因为它将更改代码将收敛到的根,甚至可能导致RuntimeError
如果它不能收敛)。你知道吗相关问题 更多 >
编程相关推荐