多重分形 MATLAB

简介: 多重分形 MATLAB

用于多重分形分析的MATLAB程序,基于MF-DFA(多重分形去趋势波动分析)方法实现。该程序适用于股市、材料学、医学和岩石物理等领域的一维时间序列分析。

function [hq, tauq, alpha, f_alpha] = MF_DFA(data, q_min, q_max, q_step, scale_min, scale_max, order)
    % 输入参数:
    %   data      : 输入数据 (一维时间序列)
    %   q_min     : q的最小值 (建议: -5)
    %   q_max     : 最大值 (建议: 5)
    %   q_step    : q的步长 (建议: 0.25)
    %   scale_min : 最小尺度 (建议: 10)
    %   scale_max : 最大尺度 (建议: length(data)/4)
    %   order     : 多项式阶数 (1:线性, 2:二次, 3:三次)
    %
    % 输出参数:
    %   hq      : 广义Hurst指数
    %   tauq    : 质量指数 τ(q)
    %   alpha   : 奇异性指数
    %   f_alpha : 多重分形谱 f(α)

    % 参数校验
    if nargin < 7, order = 1; end
    if scale_max > length(data)/4
        warning('scale_max reduced to N/4');
        scale_max = floor(length(data)/4);
    end

    % 生成q向量和尺度向量
    q = q_min:q_step:q_max;
    scales = unique(round(logspace(log10(scale_min), log10(scale_max), 30));

    % 步骤1: 积分序列
    N = length(data);
    Y = cumsum(data - mean(data));

    % 预分配波动函数矩阵
    Fq = zeros(length(scales), length(q));

    % 步骤2-4: 多尺度处理
    for sidx = 1:length(scales)
        s = scales(sidx);
        Ns = floor(N/s);
        segments = 2*Ns;
        F2_segments = zeros(segments, 1);

        % 分割数据段
        for v = 1:segments
            if v <= Ns
                segment = Y((v-1)*s + 1 : v*s);
            else
                segment = Y(N - (v-Ns)*s + 1 : N - (v-Ns-1)*s);
            end

            % 多项式拟合去趋势
            x = (1:s)';
            p = polyfit(x, segment, order);
            fit = polyval(p, x);
            detrended = segment - fit;

            % 计算方差
            F2_segments(v) = mean(detrended.^2);
        end

        % 步骤5: 计算q阶波动函数
        for qidx = 1:length(q)
            q_val = q(qidx);
            if q_val == 0
                Fq(sidx, qidx) = exp(0.5 * mean(log(F2_segments(F2_segments>0))));
            else
                Fq(sidx, qidx) = (mean(F2_segments.^(q_val/2))).^(1/q_val);
            end
        end
    end

    % 步骤6: 计算广义Hurst指数
    hq = zeros(size(q));
    for qidx = 1:length(q)
        log_scales = log10(scales(:));
        log_Fq = log10(Fq(:, qidx));
        p = polyfit(log_scales, log_Fq, 1);
        hq(qidx) = p(1);
    end

    % 步骤7: 计算质量指数
    tauq = q .* hq - 1;

    % 步骤8: 计算多重分形谱
    dtauq = gradient(tauq, q_step);
    alpha = dtauq;
    f_alpha = q .* alpha - tauq;

    % 可视化结果
    figure('Color', 'white', 'Position', [100, 100, 1200, 500])

    subplot(1,3,1)
    plot(q, hq, 'bo-', 'LineWidth', 1.5)
    xlabel('q', 'FontSize', 12)
    ylabel('h(q)', 'FontSize', 12)
    title('广义Hurst指数', 'FontSize', 14)
    grid on

    subplot(1,3,2)
    plot(q, tauq, 'ro-', 'LineWidth', 1.5)
    xlabel('q', 'FontSize', 12)
    ylabel('\tau(q)', 'FontSize', 12)
    title('质量指数', 'FontSize', 14)
    grid on

    subplot(1,3,3)
    plot(alpha, f_alpha, 'ko-', 'LineWidth', 1.5)
    xlabel('\alpha', 'FontSize', 12)
    ylabel('f(\alpha)', 'FontSize', 12)
    title('多重分形谱', 'FontSize', 14)
    grid on

    % 输出多重分形强度
    Delta_alpha = max(alpha) - min(alpha);
    fprintf('多重分形强度 Δα = %.4f\n', Delta_alpha);
end

使用

% 示例1: 布朗运动 (单分形)
data = cumsum(randn(1,5000));
[hq, tauq, alpha, f_alpha] = MF_DFA(data, -5, 5, 0.25, 10, 1000, 2);

% 示例2: 股票收益率 (上证指数)
load('stock_data.mat'); % 加载数据
returns = diff(log(prices)); % 计算对数收益率
[hq, tauq, alpha, f_alpha] = MF_DFA(returns, -5, 5, 0.25, 10, length(returns)/4, 2);

参数说明

  1. 输入参数

    • data:输入时间序列 (股市价格、医学信号、材料特性数据等)
    • q_min, q_max, q_step:q值范围和步长 (建议范围[-5,5])
    • scale_min, scale_max:尺度范围 (建议10到N/4)
    • order:去趋势多项式阶数 (1-3)
  2. 输出参数

    • hq:广义Hurst指数,描述不同q值的标度行为
    • tauq:质量指数,表征多重分形特征
    • alpha:奇异性指数
    • f_alpha:多重分形谱,量化不同奇异性水平的分布
  3. 关键输出

    • 多重分形强度 Δα = max(α) - min(α)
      • Δα≈0:单分形
      • Δα>0:多重分形 (值越大表示多重分形特性越强)

参考代码 多重分形 MATLAB程序 www.youwenfan.com/contentalc/98556.html,可用于股市分析,材料学、医学、岩石物理等领域。

应用领域说明

  1. 股市分析

    • 分析价格波动的复杂性和风险结构
    • 识别市场状态转变 (单分形→多重分形)
    • 示例:计算股票收益率的Δα,值越大市场越复杂
  2. 材料学

    • 表征材料表面的粗糙度
    • 分析断裂表面的复杂特性
    • 示例:金属疲劳断口的多重分形谱分析
  3. 医学

    • EEG/ECG信号复杂性分析
    • 病理状态检测 (如癫痫、心律失常)
    • 示例:健康ECG的Δα < 病态ECG
  4. 岩石物理

    • 孔隙结构表征
    • 渗流特性分析
    • 示例:砂岩比页岩具有更大的Δα

注意事项

  1. 数据长度应 > 1000点,保证统计可靠性
  2. scale_max 不超过数据长度的1/4
  3. 多重分形强度解释:
    • Δα < 0.05:近似单分形
    • Δα > 0.5:强多重分形
    • 股市危机时期Δα通常增大

此程序提供了多重分形分析的核心实现,用户可通过调整参数适应不同领域数据特性。对于二维图像分析(如材料表面、医学影像),需扩展为二维MF-DFA方法。

相关文章
|
NoSQL Redis C语言
只需要笔记本和一条网线就可以让服务器拥有外网的办法
只需要笔记本和一条网线就可以让服务器拥有外网的办法
只需要笔记本和一条网线就可以让服务器拥有外网的办法
|
并行计算 算法 计算机视觉
【MATLAB 】 CEEMD 信号分解+模糊熵(近似熵)算法
【MATLAB 】 CEEMD 信号分解+模糊熵(近似熵)算法
505 0
|
存储 网络协议 Linux
第七问:你了解大端和小端字节序吗?
大端和小端是计算机中数据存储的两种字节序方式。大端(Big Endian)将高位字节存储在低地址,小端(Little Endian)将低位字节存储在低地址。大端主要用于网络通信和某些文件格式,确保数据传输的一致性;小端广泛应用于本地计算和硬件优化,提高处理速度。现代大多数 PC 和嵌入式设备使用小端字节序,如 x86 和 ARM 架构。
|
开发工具 git
SourceTree配置BeyondCompare代码冲突解决工具
SourceTree配置BeyondCompare代码冲突解决工具
1568 0
|
4月前
|
传感器 数据采集 人工智能
《用AI重构工业设备故障预警系统:从“被动维修”到“主动预判”的协作实践》
本文记录了为重型机床企业用AI重构故障预警系统的实践。项目初期面临原系统“事后报警”致单月损失超百万、12类传感器数据繁杂但故障样本稀缺、维修经验难转技术指标的困境,传统开发需2个月且准确率难超70%。团队构建Cursor、通义灵码、豆包、DeepSeek协作矩阵,按场景分工:Cursor优化前后端,通义灵码转经验为特征与模型逻辑,豆包拆解需求与生成手册,DeepSeek优化架构与模型性能。系统25天上线,预警准确率92%、提前35分钟,单月停机减60%,挽回损失超60万,还沉淀SOP,印证了AI协同破解工业设备预警困局、实现从被动维修到主动预判的价值。
319 5
|
6月前
|
安全
电脑32位系统能改64位系统吗
本文详解32位系统能否升级为64位。答案是:可以,但需满足CPU支持64位架构、内存至少4GB等条件。升级唯一方法是重装系统,需备份数据、制作启动U盘、设置BIOS并安装驱动。升级前务必确认硬件兼容性,避免系统运行不稳定。
|
应用服务中间件 nginx
安装nginx-rtmp-module模块与配置
安装nginx-rtmp-module模块与配置
|
9月前
|
存储 自然语言处理 NoSQL
6.4K star!轻松搞定专业领域大模型推理,这个知识增强框架绝了!
🔥「垂直领域大模型落地难?逻辑推理总出错?这个来自OpenSPG的开源框架,让专业领域知识服务变得像搭积木一样简单!」
514 3
|
5月前
|
存储 机器学习/深度学习 缓存
阿里云企业级九代云服务器:c9i、g9i、r9i实例的收费标准、性能与选型攻略
计算型c9i、通用型g9i和内存型r9i实例是阿里云专为需要高性能云服务器的用户推出的第九代新品云服务器实例规格,适用于机器学习推理应用,数据分析等场景。本文为大家介绍阿里云服务器的新品实例——计算型c9i、通用型g9i、内存型r9i实例各自的性能参数与适用场景,再到最新的活动价格与其他实例的对比选型指南,以供参考。
|
算法 安全 数据安全/隐私保护
Crypto++库支持多种加密算法
【10月更文挑战第29天】Crypto++库支持多种加密算法
591 4