Python 如何解决broyden1 np.ndarray调用问题?

Python 如何解决broyden1 np.ndarray调用问题?,python,numpy,Python,Numpy,第一次贴在这里,目前正在为uni做一个项目,我有点被卡住了 这部分任务是使用蒙特卡罗方法来估计积分的值(在本例中,我们积分的函数是f(r)。以下是我当前的代码: import numpy as np # import numpy from scipy.optimize #import broyden1 def U(r, ep, sig): return 4*ep*((sig/r)**(12)-(sig/r)**(6)) # return U(r) # Function to cal

第一次贴在这里,目前正在为uni做一个项目,我有点被卡住了

这部分任务是使用蒙特卡罗方法来估计积分的值(在本例中,我们积分的函数是f(r)。以下是我当前的代码:

import numpy as np # import numpy
from scipy.optimize #import broyden1

def U(r, ep, sig):
    return 4*ep*((sig/r)**(12)-(sig/r)**(6)) # return U(r) 

# Function to calculate f(r)
def f(r, ep, sig):
    Ur = 4*ep*((sig/r)**(12)-(sig/r)**(6)) # puts U(r) into this function
    return (1-np.exp(-Ur/(k*T)))*(r**2) # return f(r)

data = np.array([[2.56,3.75,3.4,4.07],[1.41,1.32,1.66,3.04]]) #He, N2, Ar, Xe
k =  1.38*10**-23 # Boltzmann constant
T = 300 # temperature value T
R = np.linspace(1*10**-10, 10, 1000) # r defined with 1000 values between 2.5 and 10
U = U(R, data[1,0], data[0,0])# calculate U((r)
F = f(R, data[1,0], data[0,0]) # calculate f(r)

cutoff = broyden1(F,6)
我收到一条错误消息“TypeError:“numpy.ndarray”对象不可调用。我知道这是一条非常常见的错误消息,但我无法从其他帖子中找出我的问题所在


任何帮助都将不胜感激,谢谢!

我想你是在混合焦耳和电动汽车

力函数中的这部分正在爆炸

np.exp(-Ur/(k*T))

您的脚本没有到达最后一个函数调用(即,
cutoff=broyden1(F,6)

我认为,因为你的波尔兹曼常数应该用eVK-1而不是JK-1来表示。所以
k=8.617333262145*10**-5

编辑

您的问题可能与此有关。我对您的代码进行了一些修改,现在正在运行。但是,找到解决方案需要时间

from functools import partial
import numpy as np # import numpy
from scipy.optimize import broyden1

def U(r, ep, sig):
    return 4*ep*((sig/r)**(12)-(sig/r)**(6)) # return U(r) 

# Function to calculate f(r)
def F(r):
    ep = 1.41
    sig = 2.56
    Ur = 4*ep*((sig/r)**(12)-(sig/r)**(6)) # puts U(r) into this function
    return (1-np.exp(-Ur/(k*T)))*(r**2) # return f(r)

data = np.array([[2.56,3.75,3.4,4.07],[1.41,1.32,1.66,3.04]]) #He, N2, Ar, Xe
#k =  1.38*10**-23 # Boltzmann constant
k = 8.617333262145*10**-5
T = 300 # temperature value T
R = np.linspace(1*10**-10, 10, 1000) # r defined with 1000 values between 2.5 and 10
U = U(R, data[1,0], data[0,0])# calculate U((r)
#F = f(R, data[1,0], data[0,0])# calculate f(r)
cutoff = broyden1(F,R,f_tol=1e-2)

我想你把焦耳和电动汽车混在一起了

力函数中的这部分正在爆炸

np.exp(-Ur/(k*T))

您的脚本没有到达最后一个函数调用(即,
cutoff=broyden1(F,6)

我认为,因为你的波尔兹曼常数应该用eVK-1而不是JK-1来表示。所以
k=8.617333262145*10**-5

编辑

您的问题可能与此有关。我对您的代码进行了一些修改,现在正在运行。但是,找到解决方案需要时间

from functools import partial
import numpy as np # import numpy
from scipy.optimize import broyden1

def U(r, ep, sig):
    return 4*ep*((sig/r)**(12)-(sig/r)**(6)) # return U(r) 

# Function to calculate f(r)
def F(r):
    ep = 1.41
    sig = 2.56
    Ur = 4*ep*((sig/r)**(12)-(sig/r)**(6)) # puts U(r) into this function
    return (1-np.exp(-Ur/(k*T)))*(r**2) # return f(r)

data = np.array([[2.56,3.75,3.4,4.07],[1.41,1.32,1.66,3.04]]) #He, N2, Ar, Xe
#k =  1.38*10**-23 # Boltzmann constant
k = 8.617333262145*10**-5
T = 300 # temperature value T
R = np.linspace(1*10**-10, 10, 1000) # r defined with 1000 values between 2.5 and 10
U = U(R, data[1,0], data[0,0])# calculate U((r)
#F = f(R, data[1,0], data[0,0])# calculate f(r)
cutoff = broyden1(F,R,f_tol=1e-2)

我试着把它放进去,但仍然收到相同的错误消息。我在另一个代码中有f(r)函数,它似乎运行正常。谢谢你的回复!谢谢你的帮助:)我试着把它放进去,但仍然收到相同的错误消息。我在另一个代码中有f(r)函数,它在那里运行正常。谢谢回复!谢谢你的帮助:)这能回答你的问题吗?基于此,我删除了
U=U(R,data[1,0],data[0,0])
F=F(R,data[1,0],data[0,0])
并尝试调用原始函数(
cutoff=broyden1(F,6)
),现在得到的是“TypeError:F()缺少两个必需的位置参数:'ep'和'sig'。我不确定这是否是因为我从你的链接中得到了错误的建议。这是否回答了你的问题?基于此,我删除了
U=U(R,data[1,0],data[0,0])
F=F(R,data[1,0],data[0,0])
并尝试调用原始函数(
cutoff=broyden1(F,6)
),现在得到的是“TypeError:F()缺少两个必需的位置参数:'ep'和'sig'。我不确定这是否是因为我从你的链接中得到的建议有误