多重分形 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方法。

相关文章
|
开发工具 git
SourceTree配置BeyondCompare代码冲突解决工具
SourceTree配置BeyondCompare代码冲突解决工具
1406 0
|
应用服务中间件 nginx
安装nginx-rtmp-module模块与配置
安装nginx-rtmp-module模块与配置
kde
|
Docker 容器 文件存储
飞牛fnOS Docker镜像加速配置全攻略
本文介绍了如何在飞牛fnOS中配置Docker镜像加速服务,通过设置轩辕镜像仓库加速器,提升镜像拉取速度与稳定性。内容涵盖配置前准备、加速源设置、首选加速源调整及使用指南,帮助用户高效完成镜像操作。
kde
1464 56
|
4月前
|
机器学习/深度学习 人工智能 自然语言处理
AI生成内容为什么有"AI味"?各大模型如何破局
本文深入探讨了AI生成内容中普遍存在的“AI味”现象,从技术角度剖析其成因及解决方法。“AI味”主要表现为语言模式同质化、情感表达平淡、创新性不足和上下文理解局限。这些特征源于训练数据偏差、损失函数设计及安全性约束等技术因素。各大厂商如OpenAI、Anthropic、Google以及国内的百度、阿里云等,正通过多样性训练、Constitutional AI、多模态融合等方法应对这一挑战。未来,对抗性训练、个性化定制、情感建模等技术创新将进一步减少“AI味”。尽管“AI味”反映了当前技术局限,但随着进步,AI生成内容将更自然,同时引发关于人类创作与AI生成界限的哲学思考。
409 0
|
6月前
|
人工智能 新能源 BI
关于举办"2025年第五届全国大学生技术创新创业大赛"的通知
大赛已连续举办四届,举办以来大赛始终以“创新驱动,赋能就业”为目标,促进学生的创新创造能力,普及创新创业知识,拓宽就业创业渠道,挖掘创新人才,培育多元化的未来产业推进力量。自开赛以来,赛事受到百余所学校关注,十几所高校已立项,参赛人次达上万人,征集优秀商业计划书上千余份。本届新赛事将继续全面贯彻党的二十大精神,完整、准确、全面贯彻新发展理念,加快构建新发展格局,以传统产业的高端化升级和前沿技术的产业化落地为主线,以创新为动力,第五届赛事将开展优秀项目落地北京计划。
2139 4
|
机器学习/深度学习 人工智能 自然语言处理
【开源项目】自然语言处理领域的明星项目推荐:Hugging Face Transformers
在当今人工智能与大数据飞速发展的时代,自然语言处理(NLP)已成为推动科技进步的重要力量。而在NLP领域,Hugging Face Transformers无疑是一个备受瞩目的开源项目。本文将从项目介绍、代码解释以及技术特点等角度,为您深入剖析这一热门项目。
291 10
|
机器学习/深度学习 存储 数据可视化
以pytorch的forward hook为例探究hook机制
【10月更文挑战第10天】PyTorch 的 Hook 机制允许用户在不修改模型代码的情况下介入前向和反向传播过程,适用于模型可视化、特征提取及梯度分析等任务。通过注册 `forward hook`,可以在模型前向传播过程中插入自定义操作,如记录中间层输出。使用时需注意输入输出格式及计算资源占用。
331 1
|
人工智能 小程序 Java
【技巧】Excel加锁忘密码?一文教你破解之道!
本文介绍了两种有效解决Excel文件被加锁且遗忘密码的方法:一是通过VBA代码操作解锁;二是利用压缩文件方式解除密码保护。无论你是编程高手还是技术新手,都能找到适合自己的解决方案,轻松恢复对文件的完全控制权。此外,还提供了丰富的相关阅读资源,助你进一步提升技能。
1377 3
【技巧】Excel加锁忘密码?一文教你破解之道!
|
Ubuntu Shell C++
在Ubuntu18.04上安装ros2的环境,ros2的常用命令:播放包、录制包等
在Ubuntu18.04上安装ros2的环境,ros2的常用命令:播放包、录制包等
875 1
|
SQL Java 关系型数据库
flink cdc 内存问题之不会回收如何解决
Flink CDC(Change Data Capture)是一个基于Apache Flink的实时数据变更捕获库,用于实现数据库的实时同步和变更流的处理;在本汇总中,我们组织了关于Flink CDC产品在实践中用户经常提出的问题及其解答,目的是辅助用户更好地理解和应用这一技术,优化实时数据处理流程。