Я кодирую Интегратор Монте-Карло, и во время сегмента случайной выборки Интегратора в пределах 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.