【发布时间】:2020-10-08 06:38:05
【问题描述】:
Emm,我知道类似的问题在stackoverflow中被问了很多次,但它们不起作用....而且我猜self是两次定义的。但是删除它也是错误的......它显示 psi() 接受 2 个位置参数,但给出了 3 个。
所以我请人帮忙....
# -*- coding: utf-8 -*-
import math
import numpy as np
import matplotlib as plt
class HT(object):
def __init__(self,vi=1.0,w=1.0,wave_number=101,dot_number=101,r=10.0):
self.vi=vi
self.w=w
self.wave_number=wave_number
self.dot_number=dot_number
self.r=r
self.H=np.zeros((wave_number,wave_number))
for i in range(wave_number):
for j in range(wave_number):
self.H[i,j]=self.H_mn(i,j)
def psi(self,x,si):
return math.sqrt(self.vi/math.pi)*math.exp(-self.vi*(x-si)**2)
def psi2(self,x,si):
return self.psi(x,self.vi,si)*(2.0*self.vi*(-1.0+2.0*self.vi*(x-si)**2))
def T_x(self,x,m,n):
h=2.0*self.r/(self.wave_number-1.0)
return -0.5*self.psi(x,-self.r+m*h)*self.psi2(x,-self.r+n*h)
def V_x(self,x,m,n):
h=2.0*self.r/(self.wave_number-1.0)
return self.psi(x,-self.r+m*h)*0.5*self.w**2.0*x**2*self.psi(x,-self.r+n*h)
def T_mn(self,m,n):
T_mn=0.0
hp=2.0*self.r/(self.dot_number)
for i in range(self.dot_number):
T_mn=T_mn+hp/3.0*(self.T_x(-self.r+2.0*i*hp,m,n)\
+4.0*self.T_x(-self.r+(2.0*i+1.0)*hp,m,n)\
+self.T_x(-self.r+(2.0*i+2.0)*hp,m,n))
return T_mn
def V_mn(self,m,n):
V_mn=0.0
hp=2.0*self.r/(self.dot_number)
for i in range(self.dot_number):
V_mn=V_mn+hp/3.0*(self.V_x(-self.r+2.0*i*hp,m,n)\
+4.0*self.V_x(-self.r+(2.0*i+1.0)*hp,m,n)\
+self.V_x(-self.r+(2.0*i+2.0)*hp,m,n))
return V_mn
def H_mn(self,m,n):
return self.V_mn(m,n)+self.T_mn(m,n)
myht=HT()
【问题讨论】:
-
如果你从它的类中调用函数,也就是self.your_func,你不必传递self参数,我的意思是你可以调用它self.psi(argument1,argument2),你试过了吗?
-
不,它显示“无效语法”@YossiLevi
-
在您的代码中一无所知,只是为了澄清这一点,我将函数
psi2编辑为此 -return self.psi(x,self.vi)*(2.0*self.vi*(-1.0+2.0*self.vi*(x-si)**2)),并且没有遇到任何错误。注意你之前传递了 3 个参数,而不是我传递的 2 个(只是删除了其中一个) -
我找到了,损坏的bug...@YossiLevi
标签: python python-3.x class