【问题标题】:IndexError: index 666 is out of bounds for axis 1 with size 501IndexError:索引 666 超出轴 1 的范围,大小为 501
【发布时间】:2018-04-10 00:50:56
【问题描述】:
import math
import numpy as np

def ExplicitMethod(S0, K, r, q, T, Sigma, M, N, Option):

    M = int(M)
    N = int(N)
    dt = T / N
    K = float(K)
    Smax = 2 * K
    dS = Smax / N

    FGrid = np.zeros(shape=(N+1, M+1))

    if Option == 'Call':
        FGrid[-1, :] = np.maximum(np.arange(0, M+1) * dS - K, 0)  
    elif Option == 'Put':
        FGrid[-1, :] = np.maximum(K - np.arange(0, M+1) * dS, 0)

    A = np.zeros(shape=(M+1, M+1))
    A[0,0] = 1
    A[-1,-1] = 1
    for j in range(1, M-1):
        A[j, (j-1,j, j+1)] = \
        [0.5 * dt * (Sigma ** 2 * j ** 2 - (r - q) * j  ), \
         1 - dt * (Sigma ** 2 * j ** 2 + r), \
         0.5 * dt * (Sigma **2 * j ** 2 + (r - q) * j)]


    for i in range(N):
        Fhat = FGrid [i, ]
        FGrid[i, :] = np.dot(A , Fhat)
        Fhat[0] = 0
        Fhat[-1] = Smax - K * math.exp(-r * (N - i) * dt)

    k = math.floor(S0 / dS)

    V = FGrid[0, k] + (FGrid[0, k] - FGrid[0, k]) / dS * [(S0 - k * dS)]

    print (V)

ExplicitMethod (50, 30, 0.1, 0.05, 2, 0.3, 400, 800, Option = 'Call')

我得到了这个错误:

IndexError Traceback(最近调用 最后)在() 37打印(五) 38 ---> 39 ExplicitMethod (50, 30, 0.1, 0.05, 2, 0.3, 400, 800, Option = 'Call')

in ExplicitMethod(S0, K, r, q, T, 西格玛,M,N,选项) 33 k = math.floor(S0 / dS) 34 ---> 35 V = FGrid[0, k] + (FGrid[0, k] - FGrid[0, k]) / dS * [(S0 - k * dS)] 36 37打印(V)

IndexError:索引 666 超出轴 1 的范围,大小为 401

仅供参考,我正在编写期权定价显式方法:

请帮忙,谢谢!

【问题讨论】:

    标签: python algorithm numpy


    【解决方案1】:

    您已将 FGrid 初始化为 (801,401)。告诉我们,出于某种原因,k=666

    k = math.floor(S0 / dS)
    V = FGrid[0, k] + (FGrid[0, k] - FGrid[0, k]) / dS * [(S0 - k * dS)]
    

    您需要改进k 的设置方式。也许数学是错误的。至少你需要确保它不会超过 400。

    In [200]: S0=50; K=30; N=800
    In [201]: dS = 2*K/N
    In [202]: dS
    Out[202]: 0.075
    In [203]: S0/dS
    Out[203]: 666.6666666666667
    

    这是你的666

    【讨论】:

      猜你喜欢
      • 2015-08-06
      • 2021-05-16
      • 1970-01-01
      • 1970-01-01
      • 2018-05-09
      • 2020-01-16
      • 2020-11-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多