在Matlab中使用errorbar函数绘制置信区间遇技术问题
嘿,我来帮你搞定用errorbar绘制蒙特卡洛置信区间的问题!先看你的代码,M的循环没写完,我先帮你补全逻辑,再一步步教你怎么实现置信区间的可视化。
第一步:补全并完善蒙特卡洛计算代码
首先我们要先算出每个样本量M对应的期权价格估计值,以及用来计算置信区间的标准误:
clear all; close all; % CH15 Program for Chapter 15 % Monte Carlo for a European call 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_list = [2^5,2^6,2^7,2^8,2^9,2^10,2^11,2^12,2^13,2^14]; % 补全完整的样本量列表 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 存储每个样本量对应的期权估计值和标准误 call_estimates = zeros(size(M_list)); call_std_err = zeros(size(M_list)); for idx = 1:length(M_list) M = M_list(idx); % 直接用对数正态分布计算最终股价(比分步欧拉法更高效) S_final = S * exp( (r - 0.5*sigma^2)*T + sigma*sqrt(T)*randn(M,1) ); % 计算期权收益 payoff = max(S_final - E, 0); % 折现后的期权价格估计 call_estimates(idx) = exp(-r*T) * mean(payoff); % 计算标准误(用于置信区间):折现后的收益标准差除以样本量的平方根 call_std_err(idx) = exp(-r*T) * std(payoff) / sqrt(M); end
第二步:用errorbar绘制95%置信区间
有了估计值和标准误,我们就可以用errorbar画出95%置信区间(对应1.96倍标准误),同时加入Black-Scholes解析解作为参考:
figure('Color','w'); % 绘制误差棒:x轴用log2(M)让样本量分布更均匀 errorbar(log2(M_list), call_estimates, 1.96*call_std_err, 'o-', ... 'LineWidth',1.2, 'MarkerSize',6); % 计算Black-Scholes解析解作为对比基准 d1 = (log(S/E) + (r + 0.5*sigma^2)*T)/(sigma*sqrt(T)); d2 = d1 - sigma*sqrt(T); bs_price = S*normcdf(d1) - E*exp(-r*T)*normcdf(d2); hold on; % 绘制解析解的水平参考线 plot(log2(M_list), ones(size(M_list))*bs_price, '--r', 'LineWidth',1.5); % 美化图表 xlabel('样本量M(以2为底的对数)'); ylabel('欧式看涨期权价格估计'); legend('蒙特卡洛估计(95%置信区间)','Black-Scholes解析解','Location','southeast'); title('蒙特卡洛估计随样本量的收敛趋势及置信区间'); grid on;
关键细节说明
- 置信区间逻辑:95%置信区间是估计值 ± 1.96×标准误,这里的标准误考虑了折现因子,因为我们的期权收益是在T时刻的,需要折现到当前时刻。
- 效率优化:直接用对数正态分布计算最终股价,比分步的欧拉法更高效且准确,适合欧式期权的蒙特卡洛计算。
- 可视化技巧:用
log2(M_list)作为x轴,因为你的样本量是2的幂次,对数轴能让数据分布更均匀,更直观看到随着样本量增大,置信区间逐渐收窄并趋近于解析解的过程。
内容的提问来源于stack exchange,提问作者Axion004
相关产品推荐
相关产品推荐

