Alpha稳定分布随机数生成与数值计算系统
项目简介
本项目是一个基于MATLAB平台开发的综合工具包,旨在解决Alpha稳定分布(Alpha-Stable Distribution)因缺乏显式概率密度函数而带来的数值计算难题。系统集成了高精度的随机数生成算法与数值积分方法,能够对包括高斯分布、柯西分布、莱维分布在内的各类稳定分布进行模拟、分析和可视化。
该工具不仅实现了基础的随机采样,还通过特征函数的傅里叶逆变换原理,精确计算了理论概率密度(PDF)和累积分布(CDF),直观验证了仿真数据的统计特性。
功能特性
- 多场景覆盖:内置四种典型测试案例,涵盖高斯特例(Alpha=2)、柯西特例(Alpha=1)、莱维特征(Alpha=0.5)以及一般有偏斜分布(Alpha=1.5)。
- 高效随机数生成:基于Chambers-Mallows-Stuck (CMS) 算法实现,支持不同参数下的稳定分布随机序列生成。
- 数值精确计算:
*
PDF计算:利用自适应数值积分(Quadrature)对特征函数进行傅里叶逆变换。
*
CDF计算:基于Gil-Pelaez逆转公式计算累积分布概率。
- 可视化分析:自动生成对比图表,展示随机样本的统计直方图与理论PDF曲线的拟合情况,以及经验CDF与理论CDF的一致性。
系统要求
- MATLAB R2016b 或更高版本(需包含基础数学库)。
- 工具箱:无需额外工具箱,使用MATLAB内置
integral, rng, histogram, ecdf 等基础函数。
使用方法
直接在MATLAB环境中运行主程序函数的入口。程序运行后将自动清理工作区,依次处理预定义的四个测试案例,并弹出一个包含8个子图的分析窗口。
代码实现与算法详解
系统核心逻辑封装在单一脚本文件中,包含主控流程与三个关键的数学底层函数。
1. 主控流程 (main)
主函数负责系统的初始化、参数配置、循环仿真与绘图结果展示。
- 参数配置:定义了四个核心测试案例,分别对应不同的稳定分布形态(由参数 alpha, beta, gamma, delta 控制)。
- 仿真循环:
*
随机采样:针对每个案例,设定固定随机种子(rng(42))以保证结果可复现,并调用随机数生成函数产生10,000个样本。
*
绘图范围确定:由于稳定分布通常具有重尾特性,代码计算样本的1%和99%分位数来动态确定x轴的绘图范围,避免极端值压缩图形显示。
*
理论值计算:在确定的x轴范围内,利用
arrayfun 逐点调用数值积分函数计算理论PDF和CDF值。
* 创建 2x4 的子图矩阵。
*
第一行(PDF分析):绘制标准化直方图(PDF模式),并叠加红色实线的理论概率密度曲线,展示仿真与理论的吻合度。
*
第二行(CDF分析):绘制黑色虚线的经验累积分布函数(ECDF),并叠加蓝色实线的理论CDF曲线。
2. 随机数生成算法 (stblrnd)
该函数实现了经典的 Chambers-Mallows-Stuck (CMS) 算法,这是生成Alpha稳定分布随机数的标准方法。
- 辅助变量生成:首先生成两个相互独立的辅助随机变量:
* V:服从区间 $(-pi/2, pi/2)$ 上的均匀分布。
* W:服从均值为1的指数分布。
*
当 Alpha ≠ 1 时:计算参数 zeta 和 xi,构建包含正弦、余弦及幂次运算的复杂非线性组合公式,并通过线性变换引入尺度参数 gamma 和位置参数 delta。
*
当 Alpha = 1 时(柯西类型特例):采用特殊的对数与正切组合公式进行计算,并包含针对 alpha=1 情形的特殊对数平移修正项
(2/pi)*beta*gamma*log(gamma)。
3. 概率密度数值积分 (stblpdf_num)
由于稳定分布通常没有解析的PDF表达式,该函数通过数值方法求解。
- 原理:利用特征函数 $phi(t)$ 的傅里叶逆变换公式:$f(x) = frac{1}{pi} int_0^infty text{Re}[e^{-itx}phi(t)] dt$。
- 实现:
* 构建被积函数
integrand,即特征函数与复指数项的乘积的实部。
* 调用 MATLAB 内置的高精度自适应积分函数
integral。
* 积分区间设定为 0 到正无穷,并设定了绝对误差容限(1e-6)和相对误差容限(1e-4)以确保精度。
4. 累积分布数值计算 (stblcdf_num)
该函数通过直接对特征函数相关项进行积分来求解CDF,避免了对PDF进行二次积分带来的误差累积。
- 原理:采用 Gil-Pelaez 逆转公式:$F(x) = frac{1}{2} - frac{1}{pi} int_0^infty text{Im}[frac{e^{-itx}phi(t)}{t}] dt$。
- 奇点处理:
* 公式中的被积函数在 $t=0$ 处存在分母为零的情况。代码中设置了一个极小的起始步长
epsilon = 1e-8,积分区间从 epsilon 到正无穷,从而避开了 $t=0$ 处的数值奇点。
- 边界修正:计算结果最后会经过边界检查,强制限制在 [0, 1] 区间内,防止因数值误差导致的越界。
>
注意:数值积分函数 (
stblpdf_num 和
stblcdf_num) 内部依赖且调用了
char_fun_vals 函数来获取Alpha稳定分布的特征函数值。该特征函数基于稳定分布的标准参数化定义(通常为 Type 1 或 0 参数化)。