一些背景:我正在使用 Black-Scholes 模型。我有一个明确的(Black-Scholes)公式,这是我的问题的确切解决方案。我已经编写了实现有限差分方案的代码(显式前向欧拉,即:向前推进的时间迭代方案)来逼近偏微分方程(PDE)的解。我已经离散化了这个问题。
我想比较这两者并验证精确解与我的近似解之间的误差确实很小。(NxM)对于空间中的每个时间步长和节点,我已将精确解和近似值的值存储在两个数组中。
这是我想做的一些伪代码:
E = 0
for i = 1,...,N:
E_new = | BS(x_i) - u_i |
if E_new >= E
E = E_new
else:
E = E
end
这是我为计算错误而编写的代码:
# Compute the Error
E = np.zeros((N+1, M+1)) # so that E has NxM entries--one for each time-step and node in space
for m in range(1, M+1):
for j in range(0, N+1):
E_new = np.absolute(BS[j,m] - u[j,m])
if (np.any(E_new >= E)):
E = E_new
else:
E = E
print 'Error = ', E
在这里,我正在服用N = 100, M = 10,000。如有必要,我可以将我的代码段发布到我计算数组BS和u. 两者都定义为相同大小的数组,当我绘制它们时,我收到的输出与解决方案的外观一致。所以我相信我走在正确的轨道上,并且我的其余代码正在按预期工作。
但是,当我运行此特定段以尝试计算错误时,我得到错误大约为 29。我知道这是错误的,错误应该很小。
我试图解决这个问题:
我认为问题可能出在包含if (np.any(E_new >= E)):. 我想检查数组的任何条目E_new是否大于或等于E. 如果我只是用 运行它if (E_new >= E):,我会得到这个 ValueError:“具有多个元素的数组的真值是不明确的。使用 a.any() 或 a.all()。”
我也试过运行这个:if (np.any([E_new, E])):,但又没有运气。我收到此错误消息“ValueError: setting an array element with a sequence”。我也尝试过在我的每次尝试中使用np.all代替,np.any这似乎也不能解决问题。
非常感谢任何和所有帮助。先感谢您!我真的被困在这里,我不知道如何前进。我不一定需要直接的答案,但是对导致问题的原因和朝着正确方向的推动有所了解会非常有帮助。再次感谢!!