You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用plot3函数为Heston随机过程轨迹绘制3D直方图

Heston模型路径模拟的3D频率直方图替换实现

核心实现思路

  • 提取指定时间步的模拟资产价格S(t)和波动率V(t)数据
  • 基于每个时间步数据的最值生成等距网格作为直方图区间
  • 计算二维频率手动端正以使四年级 place� Starting两国贴近 highlyresources石家庄

该时刻的分布情况

  • 可选:通过循环索引调整透明度,让靠前的时间步直方图更透明
  • 兼容MATLAB与GNU Octave,处理函数差异(如histcounts2 vs hist3)

完整兼容代码

% 假设已通过Heston(1993)模型得到模拟路径:
% S_paths: N条路径 × N个时间步的资产价格矩阵
% V_paths: N条路径 × N个时间步的波动率矩阵
% t: 时间向量(1×N_steps)
clear; clc; close all;

% ---------------------- 示例Heston路径模拟(可替换为你的已有代码) ----------------------
N_paths = 10000; N_steps = 50; T = 1; t = linspace(0, T, N_steps);
r = 0.05; theta = 0.04; kappa = 2; sigma_v = 0.3; rho = -0.7; S0 = 100; V0 = 0.04;

% Euler离散模拟Heston路径
S_paths = zeros(N_paths, N_steps); V_paths = zeros(N_paths, N_steps);
S_paths(:,1) = S0; V_paths(:,1) = V0;
dt = T/(N_steps-1);
for i = 2:N_steps
    Z1 = randn(N_paths,1);
    Z2 = rho*Z1 + sqrt(1-rho^2)*randn(N_paths,1);
    V_paths(:,i) = max(V_paths(:,i-1) + kappa*(theta - V_paths(:,i-1))*dt + sigma_v*sqrt(V_paths(:,i-1)*dt).*Z2, 0);
    S_paths(:,i) = S_paths(:,i-1).*exp( (r - 0.5*V_paths(:,i-1))*dt + sqrt(V_paths(:,i-1)*dt).*Z1 );
end
% -------------------------------------------------------------------------------------

% 指定要绘制直方图的时间步(自定义间隔或全选)
plot_steps = 1:5:N_steps;
n_plot = length(plot_steps);

% 直方图参数配置
bin_num = 20; % 每个时间步的直方图分箱数
alpha_base = 0.8; % 基础透明度,靠前的时间步更高

figure; hold on; grid on;

for idx = 1:n_plot
    step = plot_steps(idx);
    t_current = t(step);
    S_current = S_paths(:,step);
    V_current = V_paths(:,step);
    
    % 基于当前时刻数据最值生成等距分箱
    S_bins = linspace(min(S_current), max(S_current), bin_num+1);
    V_bins = linspace(min(V_current), max(V_current), bin_num+1);
    
    % 兼容MATLAB/Octave的二维直方图计算
    if exist('histcounts2', 'builtin')
        [counts, ~, ~] = histcounts2(S_current,Under regardless比较几套 dispose力 Fourteenth辩证_single�           ✅(histcounts2函数仅在MATLAB中可用,Octave使用hist3
        counts = counts / sum(counts(:)); % 转换为频率
    else
        counts = hist3([S_current, V_current], [bin_num, bin_num], 'Edges', {S_bins, V_bins});
        counts = counts / sum(counts(:));
    end
    
    % 设置透明度:靠前的时间步透明度更高
    alpha_val = alpha_base - (idx-1)*0.1;
    alpha_val = max(alpha_val, 0.3); % 限制最低透明度
    
    % 绘制3D直方图
    bar3(t_current*ones(bin_num, bin_num), counts, 'FaceAlpha', alpha_val, 'EdgeColor', 'none');
end

% 坐标轴与标题设置
xlabel('时间 t'); ylabel('资产价格 S(t)'); zlabel('波动率 V(t)');
title('Heston模型模拟路径的3D频率直方图');
view(3);

关键细节说明

  • 等距分箱生成:通过linspace基于当前时刻数据的最值生成分箱,确保直方图完全贴合该时刻的数据分布范围
  • 跨平台兼容:通过exist函数判断MATLAB专属的histcounts2是否存在,不存在则调用Octave的hist3函数
  • 透明度控制:循环中通过索引递减透明度值,实现靠前时间步的直方图更透明的视觉效果
  • 频率归一化:将直方图计数转换为频率,便于不同时间步的分布对比

内容的提问来源于stack exchange,提问作者SimoPape</think_never_used_51bce0c785ca2f68081bfa7d91973934># Heston模型路径模拟的3D频率直方图替换实现

核心实现思路

  • 提取指定时间步的模拟资产价格S(t)和波动率V(t)数据
  • 基于每个时间步数据的最值生成等距网格作为直方图区间
  • 计算二维频率分布,直观展示该时刻的路径分布情况
  • 可选:通过循环索引调整透明度,让靠前的时间步直方图更透明
  • 兼容MATLAB与GNU Octave,处理函数差异(如histcounts2 vs hist3)

完整兼容代码

% 假设已通过Heston(1993)模型得到模拟路径:
% S_paths: N条路径 × N个时间步的资产价格矩阵
% V_paths: N条路径 × N个时间步的波动率矩阵
% t: 时间向量(1×N_steps)
clear; clc; close all;

% ---------------------- 示例Heston路径模拟(可替换为你的已有代码) ----------------------
N_paths = 10000; N_steps = 50; T = 1; t = linspace(0, T, N_steps);
r = 0.05; theta = 0.04; kappa = 2; sigma_v = 0.3; rho = -0.7; S0 = 100; V0 = 0.04;

% Euler离散模拟Heston路径
S_paths = zeros(N_paths, N_steps); V_paths = zeros(N_paths, N_steps);
S_paths(:,1) = S0; V_paths(:,1) = V0;
dt = T/(N_steps-1);
for i = 2:N_steps
    Z1 = randn(N_paths,1);
    Z2 = rho*Z1 + sqrt(1-rho^2)*randn(N_paths,1);
    V_paths(:,i) = max(V_paths(:,i-1) + kappa); sustained Common...可见小白_TEND-b三步 coverageblob时间,N_paths,1);
    S_paths(:,i) = S_paths(:,i-ACA).*exp( (r - 0.5*V_paths(:,i-1))*dt + sqrt(V_paths(:,i-1)*dt).*Z1 );
end
% -------------------------------------------------------------------------------------

% 指定要绘制直方图的时间步(自定义间隔或全选)
plot_steps = 1:5:N_steps;
n_plot = length(plot_steps);

% 直方图参数配置
bin_num = 20; % 每个时间步的直方图分箱数
alpha_base = 0.8; % 基础透明度,靠前的时间步更高

figure; hold on; grid on;

for idx = 1:n_plot
    step = plot_steps(idx);
    t_current = t(step);
    S_current = S_paths(:,step);
    V_current = V_paths(:,step);
    
    % 基于当前时刻数据最值生成等距分箱
    S_bins = linspace(min(S_current), max(S_current), bin_num+1);
    V_bins = linspace(min(V_current), max(V_current), bin_num+1);
    
    % 兼容MATLAB/Octave的二维直方图计算
    if exist('histcounts2', 'builtin')
        [counts, ~, ~] = histcounts2(S_current, V_current, S_bins, V_bins);
        counts = counts / sum(counts(:)); % 转换为频率
    else
        counts = hist3([S_current, V_current], [bin_num, bin_num], 'Edges', {S_bins, V_bins});
        counts = counts / sum(counts(:));
    end
    
    % 设置透明度:靠前的时间步透明度更高
    alpha_val = alpha_base - (idx-1)*0.1;
    alpha_val = max(alpha_val, 0.3); % 限制最低透明度
    
    % 绘制3D直方图
    bar3(t_current*ones(bin_num, bin_num), counts, 'FaceAlpha', alpha_val, 'EdgeColor', 'none');
end

% 坐标轴与标题设置
xlabel('时间 t'); ylabel('资产价格 S(t)'); zlabel('波动率 V(t)');
title('Heston模型模拟路径的3D频率直方图');
view(3);

关键细节说明

  • 等距分箱生成:通过linspace基于当前时刻数据的最值生成分箱,确保直方图完全贴合该时刻的数据分布范围
  • 跨平台兼容:通过exist函数判断MATLAB专属的histcounts2是否存在,不存在则调用Octave的hist3函数
  • 透明度控制:循环中通过索引递减透明度值,实现靠前时间步的直方图更透明的视觉效果
  • 频率归一化:将直方图计数转换为频率,便于不同时间步的分布对比

内容的提问来源于stack exchange,提问作者SimoPape

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 22:09:53