Monte Carlo 在 Matlab 中模拟近似 delta
Monte Carlo simulation for approximating delta in Matlab
我需要编写 Monte Carlo 算法来逼近 Matlab 的增量并计算置信区间:
但出于某种原因,我的代码不起作用,有什么想法吗?
randn('state', 100)
%Problem and method parameters
S=10; E=9; sigma=0.1; r=0.06; T=1;
Dt=1e-3; N=T/Dt; M=2^17;h=10^(-4);
delta = zeros(M,1);
for i = 1:M
Sfinal = S*exp((r-0.5*sigma^2)*T+sigma*sqrt(T).*randn(M,1));
S_h = (S+h)*exp((r-0.5*sigma^2)*T+sigma*sqrt(T).*randn(M,1));
delta(i) = exp(-r*T).*(max(Sfinal-E,0)-max(S_h-E,0))/h;
end
aM=mean(delta);
bM=std(delta);
conf=[aM-1.96*bM/sqrt(M),aM+1.96*bM/sqrt(M)]
错误信息是
"Unable to perform assignment because the left and right sides have a different number of elements."
感谢任何帮助!
您不需要显式编写 for
循环,因为您已经对其进行了向量化。换句话说,Sfinal
和 S_h
是长度为 M
的向量,它们的第 i
个条目对应于 S_i
和 S^h_i
图片。由于 delta
表达式右侧的计算结果为长度为 M
的向量,其中包含 delta 的所有值,因此您应该将该向量直接分配给 delta
,而不是 [=21] =].
还有一件事:图像中的伪代码似乎暗示应该使用相同的随机数来计算 S_i
和 S^h_i
。在您的代码中情况并非如此,因为您分别调用 randn
来计算 Sfinal
和 S_h
。我认为您应该生成一次随机样本,保存它们,然后将其用于两次计算。
代码如下:
randn('state', 100)
%Problem and method parameters
S=10; E=9; sigma=0.1; r=0.06; T=1;
Dt=1e-3; N=T/Dt; M=2^17;h=10^(-4);
xi = randn(M,1);
Sfinal = S*exp((r-0.5*sigma^2)*T+sigma*sqrt(T).*xi);
S_h = (S+h)*exp((r-0.5*sigma^2)*T+sigma*sqrt(T).*xi);
delta = exp(-r*T).*(max(Sfinal-E,0)-max(S_h-E,0))/h;
aM=mean(delta);
bM=std(delta);
conf=[aM-1.96*bM/sqrt(M),aM+1.96*bM/sqrt(M)]
我需要编写 Monte Carlo 算法来逼近 Matlab 的增量并计算置信区间:
但出于某种原因,我的代码不起作用,有什么想法吗?
randn('state', 100)
%Problem and method parameters
S=10; E=9; sigma=0.1; r=0.06; T=1;
Dt=1e-3; N=T/Dt; M=2^17;h=10^(-4);
delta = zeros(M,1);
for i = 1:M
Sfinal = S*exp((r-0.5*sigma^2)*T+sigma*sqrt(T).*randn(M,1));
S_h = (S+h)*exp((r-0.5*sigma^2)*T+sigma*sqrt(T).*randn(M,1));
delta(i) = exp(-r*T).*(max(Sfinal-E,0)-max(S_h-E,0))/h;
end
aM=mean(delta);
bM=std(delta);
conf=[aM-1.96*bM/sqrt(M),aM+1.96*bM/sqrt(M)]
错误信息是
"Unable to perform assignment because the left and right sides have a different number of elements."
感谢任何帮助!
您不需要显式编写 for
循环,因为您已经对其进行了向量化。换句话说,Sfinal
和 S_h
是长度为 M
的向量,它们的第 i
个条目对应于 S_i
和 S^h_i
图片。由于 delta
表达式右侧的计算结果为长度为 M
的向量,其中包含 delta 的所有值,因此您应该将该向量直接分配给 delta
,而不是 [=21] =].
还有一件事:图像中的伪代码似乎暗示应该使用相同的随机数来计算 S_i
和 S^h_i
。在您的代码中情况并非如此,因为您分别调用 randn
来计算 Sfinal
和 S_h
。我认为您应该生成一次随机样本,保存它们,然后将其用于两次计算。
代码如下:
randn('state', 100)
%Problem and method parameters
S=10; E=9; sigma=0.1; r=0.06; T=1;
Dt=1e-3; N=T/Dt; M=2^17;h=10^(-4);
xi = randn(M,1);
Sfinal = S*exp((r-0.5*sigma^2)*T+sigma*sqrt(T).*xi);
S_h = (S+h)*exp((r-0.5*sigma^2)*T+sigma*sqrt(T).*xi);
delta = exp(-r*T).*(max(Sfinal-E,0)-max(S_h-E,0))/h;
aM=mean(delta);
bM=std(delta);
conf=[aM-1.96*bM/sqrt(M),aM+1.96*bM/sqrt(M)]