簡體   English   中英

修正錯誤的Matlab代碼

[英]Fix matlab code with error

我知道在dr =(rv * 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 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

因此,任何困難。

很好,您知道問題在dr = (r - v.*v./2).*dT; 該命令本身存在許多可能與dimensions有關的問題:

  1. 在這里,您正在使用矩陣進行元素逐個乘法(由於.* ),這要求(對於您的命令而言) rv具有相同的行和列數(因為逐個元素v.*v/2具有與v相同的大小。

  2. 而且,沒有必要用標量對元素進行除法,這意味着在Matlab中不需要./2

  3. 最后,由於再次是元素級乘法,矩陣(r - v.*v./2)還必須具有與矩陣dT相同的行數和列數。

在此處查看有關Matlab矩陣運算的更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM