下标索引必须是小于2 ^ 31的正整数或逻辑

时间:2016-03-12 14:33:20

标签: matlab indexing

我对Matlab / Octave编程很陌生,但有一个我似乎无法解决的问题。

我写了以下内容,这实际上是使用Black Scholes公式(仅为了给你一些背景)对期权价格进行的非常直接的计算。但是,我不断收到以下错误信息:

"下标索引必须是小于2 ^ 31的正整数或逻辑"

有人会认为这很好地解释了它,我知道之前有过这方面的问题。然而,导致麻烦的是,我根本没有在我的代码中使用任何类型的下标索引。

这是我的代码:

function v=BS_LBO_strike_call(s,T,sigma,r,q,l,alpha)
    d1=(log(alpha*l./s) + (r-q-0.5*sigma^2)*T)/(sigma*sqrt(T));

    d2=(log(alpha*l./s) - (r-q+0.5*sigma^2)*T)/(sigma*sqrt(T));

    d3=(log(alpha*l./s) + (r-q+0.5*sigma^2)*T)/(sigma*sqrt(T));

    d4=(log(alpha*l./s) + (r-q-0.5*sigma^2)*T)/(sigma*sqrt(T));

    v = exp(-r*T)*s(0.5*sigma^2./(r-q)*(l./s).^(2*(r-q)./sigma^2).*normcdf(d1) - 0.5*sigma^2./(r-q)*alpha.^(-2*(r-q)./sigma^2).*exp((r-q).*T).*normcdf(d2) + alpha.exp*((r-q).*T).*normcdf(d3) - (l./s).*normcdf(d4));

所以,我似乎无法弄清楚Octave的功能是什么。

如果你能对此有所了解,我将非常感激。我确信必须有一些我忽视的小事

1 个答案:

答案 0 :(得分:2)

您的问题的根源在于您的最后一行。您有以下内容:

v = exp(-r * T) * s(0.5 * sigma^2 ....

认为您在*和左括号之间省略了s,因为现在,该括号后的所有内容都被视为下标s。这是您获得的错误的根本原因,因为后面的内容可能整数或逻辑。

该行中还有另外一点可能会导致一些错误。作为该陈述的一部分,您有以下内容。

alpha.exp*((r-q).*T) ...

除非alphastruct(我确定这不是因为您之前没有使用过这种方式),否则您可能需要除.之外的其他内容{ {1}}和alpha。也许是另一个exp