我对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的功能是什么。
如果你能对此有所了解,我将非常感激。我确信必须有一些我忽视的小事
答案 0 :(得分:2)
您的问题的根源在于您的最后一行。您有以下内容:
v = exp(-r * T) * s(0.5 * sigma^2 ....
我认为您在*
和左括号之间省略了s
,因为现在,该括号后的所有内容都被视为下标s
。这是您获得的错误的根本原因,因为后面的内容可能不整数或逻辑。
该行中还有另外一点可能会导致一些错误。作为该陈述的一部分,您有以下内容。
alpha.exp*((r-q).*T) ...
除非alpha
是struct
(我确定这不是因为您之前没有使用过这种方式),否则您可能需要除.
之外的其他内容{ {1}}和alpha
。也许是另一个exp
?