我正在对Monte Carlo积分器进行编码,并且在def mc(self, n=1000)
内的积分器的随机采样段内,只会选择一个随机值,并且每次迭代该值都保持不变。
通过我的编码,我希望它可以从构造函数中调用self.f,并将其分配给函数f,出于测试目的,我在下面将其定义为:
def function(x, y):
f = x**2 + 4*y + 4
return f
集成器的定义如下:
import random
random.seed(12345)
class Integrator():
def __init__(self, f, x_min, x_max, y_min, y_max):
self.f = f
self.x_min = x_min
self.x_max = x_max
self.y_min = y_min
self.y_max = y_max
def mc(self, n=1000):
integral = 0
for i in range(n):
x = random.uniform(self.x_min, self.x_max)
y = random.uniform(self.x_min, self.y_max)
self.f = f
print(self.f)
integral += self.f
integral = (integral/n)*(self.x_max - self.x_min)*(self.y_max - self.y_min)
print("The value of integral is: ", integral)
self.f
的输出为
0.10916233827396749
0.10916233827396749
0.10916233827396749
0.10916233827396749
0.10916233827396749
对于每次迭代self.f
的所有打印语句,依此类推。在测试代码时,我使用了以下值/参数:
x_min = -1
x_max = 1
y_min = -1
y_max = 1
x = random.uniform(x_min, x_max)
y = random.uniform(x_min, y_max)
f = function(x, y)
g = Integrator(f, x_min, x_max, y_min, y_max)
g.mc()
很抱歉,我想详细解释所有内容,并提供所有我认为与回答这个问题有关的代码(或让您重复我想做的事情)。
长话短说,为什么self.f = f
不会为每次迭代生成新的f
值,并且我如何更改代码使其如此呢?
另外,这是一项作业,我不能说self.f = function(x, y)
,因为我的老师将使用变量f传递函数。