类属性

时间:2019-11-30 20:32:24

标签: python-3.x integration montecarlo

我正在对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传递函数。

0 个答案:

没有答案