В случае, показанном ниже, у меня есть функция под названием func1()
, которая находится в func3()
, где func3()
определяет значение ОДУ с использованием метода Эйлера.
def func1(x, y):
return y * np.log(y) / x
def func3(x, y, step_size, func):
dydx = func(x, y)
new_x = x + step_size
new_y = y _ step_size * dydx
return new_x, new_y
step_size - 0.1
lower = 2.0
upper = 3.0
e = 2.7182828284
x_val = [2.0]
y_val = [e]
for i in range(10):
x, y = func3(x_val[i], y_val[i], step_size, func1)
x_val.append(x)
y_val.append(y)
код передает func1 в func3 в качестве декоратора и записывает вывод в список, поскольку он повторяется в диапазоне от 0 до 10. Однако код внутри func3()
жестко закодирован для точного ввода func1()
, то есть x
и y
.Я хотел бы написать func3()
, чтобы он был достаточно универсальным, чтобы вы могли передать ему любую функцию, если ее первые два входа - x
и y
, но это должно быть как можно больше входных данных.Итак, предположим, что весь код, показанный выше, был идентичен, но вместо передачи func1()
я передал func2()
в func3()
со структурой ниже.
def func2(x, y, z):
return z * y * np.log(y) / (x*z)
Как я мог написать func3()
чтобы быть достаточно универсальным, чтобы он мог принять любую из двух функций и понять, что их больше аргументов для передачи func1()
, что также должно быть передано в func3()
?