【发布时间】:2020-07-24 11:22:13
【问题描述】:
谁能帮我修复这段代码以运行蒙特卡罗模拟:
def utility_function(r_list, f_list,
y_list = np.array([1,0.5,0.25]),
xi_list = np.array([0.02,0.04])):
U = y_list[0] + f_list[1] * (xi_list[0] - r_list[1])*(y_list[0] -y_list[1]) + f_list[2]*(y_list[0]*(xi_list[0] - r_list[2]) +y_list[1]*xi_list[2]+ y_list[3]*(r_list[2] - xi_list[0]- xi_list[1]))
return U
【问题讨论】:
-
请将完整的错误消息/回溯以文本形式编辑到您的问题中。
-
除非你知道会发生什么,否则使用可变的默认参数值通常是一个非常糟糕的主意,因为意外的副作用。该值仅计算一次,如果在函数体中对其进行了修改,那么对于所有后续调用,该值也会更改。
-
一种非常简单的调试技术是打印用于计算 U 的每个值 - 导致错误的值将变得明显。你试过这个吗?
-
只是为了扩展@barny 的评论,你要做的是有一些不可变的默认值,它本身不是一个有效的输入(通常是
None),并且靠近开始函数的代码,测试参数是否有这个值,如果有,使用你想要使用的可变对象的表达式分配给它(然后将创建一个新的可变对象)。 -
这是一个简单的越界情况,因为它是...
assert在进行计算之前数组的大小(如果边界不符合要求,则返回 -1)