【问题标题】:Fix matlab code with error修复matlab代码错误
【发布时间】:2015-04-29 08:07:49
【问题描述】:

我了解 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

因此,任何困难。

【问题讨论】:

  • 欢迎来到 SO。我们不会为您调试代码。请提供能够重现您的错误的最小个可能的示例。
  • 在 Matlab 中很容易输出表达式的结果,只需在末尾删除 ;,因此在错误行之前的单独行中添加 rvdT '已经提到可以帮助你。
  • @pawel.boczarski 更好地学习how to debug a Matlab script
  • 您在调用函数之前是否定义了变量“o”?
  • 实际的错误信息会比“尺寸错误”更有帮助。

标签: matlab dimensions


【解决方案1】:

很高兴您知道问题出在dr = (r - v.*v./2).*dT; 内。命令本身有很多可能的问题,也和dimensions有关:

    1234563 @(由于元素方面的原因,v.*v/2v 具有相同的大小)。
  1. 此外,没有必要用标量进行逐元素除法,这意味着在Matlab中不需要./2

  2. 最后,由于又是逐元素乘法,矩阵 (r - v.*v./2) 的行数和列数也必须与矩阵 dT 相同。

查看here 了解有关 Matlab 矩阵运算的更多信息。

【讨论】:

    猜你喜欢
    • 2011-03-16
    • 2018-05-05
    • 1970-01-01
    • 2019-12-14
    • 1970-01-01
    • 2013-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多