【问题标题】:subscript indices must be either positive integers less than 2^31 or logicals下标索引必须是小于 2^31 的正整数或逻辑
【发布时间】:2016-06-27 19:15:36
【问题描述】:

我对 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 有什么问题。

如果您能对此有所了解,我将不胜感激。我确信一定有一些我忽略的小事

【问题讨论】:

  • 与错误关联的行是哪一行?
  • 最后一行中的alpha.exp* 是您帖子中的错字还是实际代码?
  • 另外,问题出在这部分的最后一行:s(0.5*sigma^2.。您正在使用s 之后括号右侧的所有内容来索引s。也许你的意思是s*(0.5 *sigma^2

标签: matlab indexing


【解决方案1】:

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

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

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

该行中的另一点也可能会导致一些错误。作为该声明的一部分,您有以下内容。

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

除非alphastruct(我敢肯定这不是因为您以前没有这样使用过),否则您可能会想要除alphaexp 之间的. 之外的其他东西.也许另一个*

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-16
    • 2014-09-11
    • 2012-04-14
    • 2016-06-12
    • 2012-11-27
    • 2013-12-04
    相关资源
    最近更新 更多