(分形)布朗运动的Matlab生成代码 - 核能革新 ChinaNet
热图推荐
    查看: 7618|回复: 1
    打印 上一主题 下一主题

    (分形)布朗运动的Matlab生成代码

    [复制链接]

    22

    主题

    57

    帖子

    152

    积分

    注册会员

    Rank: 2

    积分
    152
    跳转到指定楼层
    楼主
    发表于 2015-4-8 10:30:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本人是研究分形理论的,看到论坛上有人求助如何生成布朗运动,特贡献出一段代码。

    生成(分形)布朗运动的近似方法主要有随机中点位移法(RMD),快速付立叶换(FFT),后者精度很高且性能好。我所写代码是paxson论文中的S语言代码翻译过来的,希望对大家有所帮助。


    ***********************刚才传txt文件说附件内容非法,只好贴在下面***************************



    function similar_sequence = generator_FFT(n,H)
    %--------------------------------------------------------------------------
    % GENERATOR_FFT Use fast fourier transform to generate normalized FGN
    %     and FBM. Then use Norrs method to generate normalized
    %     similar_sequence. Finally, the average of similar_sequence was set to
    %     1 through normaliztion.
    %  
    %     Note:
    %     1. The input argument n is the number of point of sequence. It must
    %     be even. H is the objective similarity you want.
    %     2. The output argument similar_sequence is a similar_sequence with
    %     average equal to 1. The FGN and FBM are normalized FGN and FBM
    %     respectively.
    %     3. This routine is a matlab version of paxson's R routine. For more
    %     details, see "Fast, approximate synthesis of fractional Gaussian
    %     noise for generating self-similar network traffic"
    %--------------------------------------------------------------------------

    %--------------------------------------------------------------------------
    %
    %    generator_FFT
    %    Edit by Chu Chen, 07/07/2007
    %    Should you have any suggestion for improving the code, please contact:
    %    chuch@scut.edu.cn.
    %--------------------------------------------------------------------------


    回复

    使用道具 举报

    22

    主题

    57

    帖子

    152

    积分

    注册会员

    Rank: 2

    积分
    152
    沙发
     楼主| 发表于 2015-4-8 10:31:29 | 只看该作者
    if mod(n,2) ~= 0
        error('The input argument "n" must be even');
    else
        % Returns a Fourier-generated sample path of a "self similar" process  
        % Consisting of n points(n should be even) and Hurst paramenter H  
        n = n/2;
        lambda = [1:n]*pi/n;

        % Approxiamte ideal power spectrum.
        f = FGNspectrum(lambda,H);

        % Adjust for estimating power spectrum via periodogram
        f = f.*exprnd(1,1,n);

        % Construct corresponding complex numbers with randm phase
        alpha = 2*pi.*unifrnd(0,1,1,n);
        a = sqrt(f).*cos(alpha);
        b = sqrt(f).*sin(alpha);
        z = complex(a,b);

        % Last element should have zero phase
        z(n) = abs(z(n));

        % Expand z to correspond to a Fourier transform of a real-valued signal.
        zprime = [0,z,conj(fliplr(z(1:n-1)))];

        % Inverse FFT gives sample path.
        FGN = real(ifft(zprime));
         
        % Standardize FGN and create FBM.
        FGN = (FGN-mean(FGN))/std(FGN);
        FBM = cumsum(FGN);

        % Use Norrs method to generate normalized similar_sequence
        similar_sequence = FGN;
         
        % M = 30;
        % a = 5;
        % similar_sequence = M + sqrt(a*M)*similar_sequence;
        % similar_sequence = max(0,similar_sequence);
        % similar_sequence = similar_sequence*2*n/sum(similar_sequence);
    end;


    %----------------------------subfunction1----------------------------------
    function f = FGNspectrum(lambda,H)
    % Returns an approximation of the power spectrum of FGN at the given
    % frequencies lambda and the given Hurst parameter H.
    f = 2*sin(pi*H)*gamma(2*H+1).*(1-cos(lambda)).*(lambda.^(-2*H-1) + FGNest(lambda,H));


    %----------------------------subfunction2----------------------------------
    function est = FGNest(lambda,H)
    % Returns the estimate for B(lambda,H).
    d = -2*H-1;
    dprime = -2*H;
    a1 = 2*1*pi+lambda;
    b1 = 2*1*pi-lambda;
    a2 = 2*2*pi+lambda;
    b2 = 2*2*pi-lambda;
    a3 = 2*3*pi+lambda;
    b3 = 2*3*pi-lambda;
    a4 = 2*4*pi+lambda;
    b4 = 2*4*pi-lambda;
    est = a1.^d + b1.^d + a2.^d + b2.^d + a3.^d + b3.^d + (a3.^dprime+b3.^dprime+a4.^dprime+b4.^dprime)/(8*pi*H)
    本帖转自52mc论坛
    回复 支持 反对

    使用道具 举报

      关注我们
    • 微信公众号:
    • NuclearNet
    • 扫描二维码加关注

    Powered by Discuz! X3.2 © 2001-2013 Comsenz Inc.

    联系我们|网站声明|中国核网-核能领域第一垂直门户网站

    快速回复 返回顶部 返回列表