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

专注于matlab/simulink,电子电路,编程