【发布时间】:2021-08-27 03:22:37
【问题描述】:
我有一个数组,我们称它为 e:
e=[1,2,3]
我将它包含在一个函数中:
def f(x,y):
return (69+e[x]*g(x)*y)/(420+g(x)*y)
g(x) 是我之前定义的函数。现在,我想做一个等高线图,所以我定义:
x=[0,1,2]
y=np.linspace(69,420,69420)
X, Y = np.meshgrid(x, y)
fig, axs = plt.subplots()
axs.contour(X,Y,G(X,Y),levels=[420.69],colors='black')
这基本上是我想做的,我该如何调试呢?或者有没有更好的方法来编程我想做的事情?
编辑:哦,我打错了。我实际上在函数内部有e[int(x)],而不仅仅是e[x]
编辑:我的意思是通过使用我的代码的“简化”形式来简化我的问题,但似乎有些人对整个事情感兴趣。
我实际使用的不是f(x,y):
def Nseen(x,y):
return (0.147*8.815*10**(-6)+e[int(x/5-16)]*y*G(x)*2*y*GW(x))/(4.1/1000+y*G(x))*26340*20.3
其中G(x) 和GW(x) 本身是依赖于其他函数的其他函数,让我将整个代码粘贴在这里:
def a(x,m):
return (x**2-m**2)**2*(x**2+2*m**2)
def b(x,m):
return 6*(x**2-m**2)*m**2
def c(x,m):
return 3*(x**2-2*m**2)
def f1(x,m,g):
return -2*x**2*(x**2-2*m**2)+(a(x,m)+c(x,m)*g**2*m**2)/(g*m)*(np.arctan((x**2-m**2)/(g*m))-np.arctan((-m**2)/(g*m)))-1/2*(b(x,m)+2*g**2*m**2)*np.log((g**2*m**2+(x**2-m**2)**2)/(g**2*m**2+m**4))
def f(x,m,g):
return f1(x,m,g)*(m**4/(96*x**8))
def GW(x):
return GF**2*x**5/(np.pi**3)*(f(x,MW,GW))
def G(x):
return GF*MH*x**2/(4*np.sqrt(2)*np.pi)*(1-x**2/MH**2)**2
这些是我使用的所有数字:
GF=1.1663787*10**(-5)
S2TH=0.23122
MW=80.378
MZ=91.1876
MH=125.18
GW=2.085
GZ=2.4952
我正在使用:
e = [0.007400,0.002300,0.000600,0.01840,0.06040,0.09570,0.1412,0.1718,0.1718]
和
x = np.linspace(80,120,9)
y = np.linspace(10**(-8),10,1000)
【问题讨论】:
-
你在函数的某个地方传递了一个数组,而它应该是一个值。您需要共享整个代码并显示出现此错误的行!
-
这里的
e[x]是什么?...您不能将整个数组作为索引传递。请张贴g(x)是什么。 -
@MohamedAfify 你说得对!我的代码中实际上有 e[int(x)],我打错了。
-
@Priya "e" 是数组。 e[int(x)] 应该调用数组的第 x 个元素。 e[0]=1,e[1]=2,e[2]=3。 g(x) 是我之前定义的一个复杂函数。我认为它不应该那么相关。
-
@pollux33 edit您的问题以添加新的详细信息。
标签: python python-3.x