修复错误的matlab代码
Fix matlab code with error
我了解到 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
所以,有什么困难。
很高兴您知道问题出在 dr = (r - v.*v./2).*dT;
之内。该命令本身有许多可能的问题,这些问题也与 dimensions
有关:
这里你正在对矩阵进行逐元素乘法(因为 .*
),这需要(在你的命令的情况下)r
具有相同的行数和列数为 v
(因为在元素方面,v.*v/2
的大小与 v
相同)。
此外,不需要用标量数进行逐元素除法,这意味着在Matlab中不需要./2
。
最后,由于又是逐元素乘法,矩阵(r - v.*v./2)
也必须与矩阵dT
.[=21具有相同的行数和列数=]
查看 here 了解有关 Matlab 矩阵运算的更多信息。
我了解到 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
所以,有什么困难。
很高兴您知道问题出在 dr = (r - v.*v./2).*dT;
之内。该命令本身有许多可能的问题,这些问题也与 dimensions
有关:
这里你正在对矩阵进行逐元素乘法(因为
.*
),这需要(在你的命令的情况下)r
具有相同的行数和列数为v
(因为在元素方面,v.*v/2
的大小与v
相同)。此外,不需要用标量数进行逐元素除法,这意味着在Matlab中不需要
./2
。最后,由于又是逐元素乘法,矩阵
(r - v.*v./2)
也必须与矩阵dT
.[=21具有相同的行数和列数=]
查看 here 了解有关 Matlab 矩阵运算的更多信息。