修复matlab代码有错误

时间:2015-04-29 08:07:50

标签: matlab dimensions

我知道行dr =(r-v * v / 2)* dT中的尺寸存在错误。但我对Matlab知之甚少。请帮忙解决它。代码小而简单。也许有人会抽空看看

 function [optionPrice] = upAndOutCallOption(S,r,v,x,b,T,dT)
    t = 0;
    dr=[];
    pert=[];
    while (t < T) & (S < b)
        t = t + dT;
        dr = (r - v.*v./2).*dT;
        pert = v.*sqrt( dT ).*randn();
        S = S.*exp(dr + pert);
    end
    if S<b
        % Within barrier, so price as for a European option.
        optionPrice = exp(-r.*T).* max(0, S - x);
    else
        % Hit the barrier, so the option is withdrawn.
        optionPrice = 0;
    end
    end

从这种类型的另一个函数调用: for k=1:amountOfOptions [optionPrices(k)] = upAndOutCallOption(stockPrice(k)*o,riskFreeRate(k)*o,... volatility(k)*o, strike(k)*o, barrier(k)*o, timeToExpiry(k)*o, sampleRate(k)*o); result(k) = mean(optionPrices(k)); end

因此,任何困难。

1 个答案:

答案 0 :(得分:0)

你知道问题在dr = (r - v.*v./2).*dT;内是很好的。命令本身有许多可能的问题,这些问题也与dimensions

有关
  1. 在这里,您正在使用矩阵进行逐元素乘法(因为.*),这需要(在您的命令的情况下)r具有相同的行数AND列为v(因为元素方面,v.*v/2v具有相同的大小)。

  2. 此外,没有必要使用标量数进行元素划分,这意味着在Matlab中不需要./2

  3. 最后,由于它再次是元素乘法,因此矩阵(r - v.*v./2)必须与矩阵dT具有相同数量的行和列。

  4. 检查here以获取有关Matlab矩阵运算的更多信息。