更改

跳到导航 跳到搜索
添加14,319字节 、 2022年12月11日 (日) 09:35
无编辑摘要
第19行: 第19行:  
其中,n为迭代的步数。该程序能够返回每个步骤的小区间集合。
 
其中,n为迭代的步数。该程序能够返回每个步骤的小区间集合。
   −
That saves me. Thanks for being so sebilnse!
+
===康托尔尘上的质量分布===
 +
 
 +
康托尔尘是一个经典的[[分形]](Fractal),它的[[分形维]]数为ln2/ln3。下面,我们来构造多重分形,即给每个小区间赋予质量。具体地,我们也可以按照如下的步骤递归地进行下列操作:
 +
首先,将[0,1]均分为三份,去掉中间的那个小区间,剩下两个小区间[0,1/3]和[2/3,1]。给左边的小区间分配质量1/3,右边的分配2/3。接下来再把[0,1/3]分为三份,去掉中间的小区间,剩下的两个小区间[0,1/9]和[2/9,1/3],左边分1/3的质量,右边分2/3的质量,而[0,1/3]的小区间仅仅有1/3的质量,这样[0,1/9]这个小区间就分配到了1/3*1/3=1/9的质量,而[2/9,1/3]则分配到了2/3*1/3=2/9的质量……。这样,每对小区间划分一次,就把该小区间上的质量的1/3分到左边,把2/3分到右边。如此循环往复地进行下去。
 +
 
 +
我们用矩形的高度来表示小区间分配的质量,则上述分配过程可以形象地表达为下图:
 +
 
 +
[[File:multicantorset.png]]
    
===多重分形谱===
 
===多重分形谱===
第49行: 第56行:  
在该图中,我们画出了不同t所对应的<math>-\log_{(3^{-t})}(N(m_i))</math>对<math>\log_{(3^{-t})}(m_i)</math>的曲线(取负号是因为该数值可以被解释为分形维,详见下一节的讨论。)。我们能看到,随着t逐的增大,曲线不仅仅没有出现高高的尖峰,而且逐渐趋近于一条光滑的闭合曲线。这是因为,随着t的增长,我们的对数之底也会快速地衰减,从而使得这条曲线会逐渐稳定。那么,当t趋于无穷大的时候,这条曲线就构成了康托尔集合上质量分布的多重分形谱。
 
在该图中,我们画出了不同t所对应的<math>-\log_{(3^{-t})}(N(m_i))</math>对<math>\log_{(3^{-t})}(m_i)</math>的曲线(取负号是因为该数值可以被解释为分形维,详见下一节的讨论。)。我们能看到,随着t逐的增大,曲线不仅仅没有出现高高的尖峰,而且逐渐趋近于一条光滑的闭合曲线。这是因为,随着t的增长,我们的对数之底也会快速地衰减,从而使得这条曲线会逐渐稳定。那么,当t趋于无穷大的时候,这条曲线就构成了康托尔集合上质量分布的多重分形谱。
   −
The children will lead the way! Children are amazing in that they don&#8217;t feel sorry for themselves and they always try their best. Anthony is an inpinratsoi. Keep showing us how to be amazing, Anthony!
+
===多重分形谱的定义===
 +
 
 +
实质上,上述作法不仅可以让质量在各个小区间上的分布图形更加好看,它还具有更深刻的含义。我们知道[[分形]]研究的是当我们的观察精度不断提高,被观察的几何形体是如何变化的。那么,当我们计算log(m<sub>i</sub>)随着log(3<sup>-t</sup>)而变化的时候,我们实质上是在计算质量如何随着观察分辨率的提高而衰减。更一般地,我们不妨把这个质量随观察精度而变化的速度定义为一个量:
 +
 
 +
<math>
 +
\alpha=\frac{\log(m_i)}{\log(b(t))}
 +
</math>
 +
 
 +
假设我们把一个集合划分成不同精度t的盒子,那么每个盒子的大小就是b(t)。在康托尔集合的例子中,这个盒子就是一维线段上的小区间,直线段的长度就是盒子尺寸b(t),也就是3<sup>-t</sup>。
 +
 
 +
这样,每个小盒子都能计算出一个α值,那么当我们给定了一个α以后,能够数出来一共有多少个小盒子与之对应。这个数等价于前面讨论的N,只不过,在这里我们计算的不是具有相同的质量m<sub>i</sub>的小盒子的个数,而是具有相同的α,即质量随精度变化速度相同的小盒子个数。当t给定的时候,这两种描述实际上是等价的。于是,我们定义多重分形谱为:
 +
 
 +
<math>
 +
f(\alpha)=-\frac{\log(N(\alpha))}{\log(b(t))}
 +
</math>
 +
 
 +
其中N(α)就表示质量变化速度位于区间[α,α+dα]之中的小区间个数。如果大家熟悉[[分形]],以及计算[[分形维]]中的盒计数法的话,就会发现,实际上这个f(α)就是分形集合:“所有那些具有相同α的小盒子的集合”的[[分形维]]。
 +
 
 +
====直观理解====
 +
 
 +
于是,我们的图景一下子就清楚了,实际上所谓的多重分形谱,就是描述一个崎岖地形的数学工具。其中,地形的高度就对应着质量的分布,质量越多的地方,高度越高。这种地形很怪异,因为它会随着观察尺度越来越精细而越来越坑洼不平。如果采用不同的盒子来划分水平面,从而把一个盒子中的山脉地形中的所有高度加总形成了粗粒化的新的高度,那么随着盒子越来越小,这种粗粒化的地形就会越来越颠簸。我们的描述手段就相当于:在一个观察精度下,用不同的水平面去截取这个地形,形成一些等高线,那么等高线所包围的区域就构成了一个[[分形]],于是我们可以计算出它的[[分形维]]度。这样,该[[分形维]]如何随着α,即等高线高度对数与观测尺度对数的比值,而变化就够成了多重分形谱。
 +
 
 +
那么,这个多重分形谱的不同形状也就有了一定的解释。首先,如果这个地形是一个扁平的地形,也就是所有地点的高度都相同,那么多重分形谱就退化为一个点,这个点的横坐标是1,纵坐标是这个地形的支撑集合(即地形在XOY平面上的投影)的[[分形维]]。当地形稍微崎岖一点的时候,这个多重分形谱曲线就会具有一定的宽度。宽度越宽表示地形高度的取值越多样化。而多重分形谱曲线上的高度则对应了不同等高线所围[[分形]]集的维度,维度越大则表示分形集合的复杂程度越高,也就表示地形褶皱会比较多。
 +
 
 +
==多重分形的数值计算==
 +
 
 +
在上面的讨论中,我们针对康托尔集上的质量分布为例,引入了多重分形的定义。根据这个定义,原则上讲,我们也可以计算出多重分形谱来。只要计算每个观测尺度下α的数值,以及对应的f(α)就足够了。但是,这种计算往往会带来很大的误差,这主要是因为在此计算中,我们实际上是用单个盒子的质量分布来推测不同质量分布随着尺度而变的斜率这一整体信息。
 +
 
 +
下面介绍的方法不是从局部出发,而是从整体出发,计算出在不同观测精度下的Renyi信息维χ。其中,我们引入了一个新的参数q。在不同的参数q下,我们能够得到Renyi维随着观测精度变化的速率χ(q)。计算χ(q)可以按照最小二乘法拟合出log(S(q))对log(b(t))的斜率。之后,根据这个速度χ(q)和多重分形谱f(α)构成了勒让德变换([[Legendre变换]])对这一性质,我们就能估算出多重分形谱f(α)了。
 +
 
 +
===Renyi信息维===
 +
 
 +
我们首先要为多重分形定义一个新的量,叫做Renyi信息维度。对于一个多重分形场来说,当给定一个观测精度t,我们就得到了每一个小盒子b(t)中的质量分布m<sub>i</sub>,其中要求<math>\sum_{i=1}^{n(t)}m_i=1</math>,那么,对于这些m<sub>i</sub>整体,我们可以计算如下的量:
 +
 
 +
<math>
 +
\chi_{t}(q)=\frac{\log(\sum_{i=1}^{n(t)}m_i^q)}{\log(b(t))}
 +
</math>
 +
 
 +
Renyi信息维就是这个量当t趋于无穷大时的极限,即定义为:
 +
 
 +
<math>
 +
\chi(q)=\lim_{t\rightarrow \infty}\chi_{t}(q)=\lim_{t\rightarrow \infty}\frac{\log(\sum_{i=1}^{n(t)}m_i^q)}{\log(b(t))}
 +
</math>
 +
 
 +
其中q是一个参数,可以取遍所有实数。n(t)是在t精度下所有小盒子的个数。这个Renyi信息维与分形维的定义十分相似,它计算的是广义的信息量<math>R(q)=\frac{1}{1-q}\sum_{i=1}^{n(t)}m_i^q</math>随着尺度增长的速度(参看[[Renyi信息熵]])。当q=0的时候,求和式的结果就等于n(t),于是这个维度χ(0)就退化成了多重分形的支撑集的[[分形维]]。当q=1的时候,这个量计算的是Shannon[[信息熵]]随尺度变化的速度。在实际的计算中,我们通过为待计算的集合划分不同精度的盒子,然后可以很容易地计算出<math>\sum_{i=1}^{n(t)}m_i^q</math>随log(b(t))的变化曲线,在对数坐标下,这条线变成了一条直线,于是我们可以计算出该直线的斜率,即为χ(q)。
 +
 
 +
我们说χ(q)反映的是多重分形场的整体信息,因为它对整个场的质量分布进行求和。 q的作用相当于一种权重,如果q>0,则那些质量大的小盒子就会对χ的贡献越大,从而χ就反映出来那些质量密集区域随着尺度变化信息量的增长速度。反过来若q<0,则m<sub>i</sub>越小的区域会对整体的χ贡献越大,于是χ反映的就是质量小区域的信息量增长速度。
 +
 
 +
===Legendre变换===
 +
 
 +
有趣的是,χ(q)和f(α)存在着天然的联系。让我们来做一定的推演。首先,在给定精度t下,根据χ<sub>t</sub>(q)的定义:
 +
 
 +
<math>
 +
\chi_{t}(q)=\frac{\log(\sum_{i=1}^{n(t)}m_i^q)}{\log(b(t))}
 +
</math>
 +
 
 +
其中n(t)表示t精度下小盒子的个数。在这些盒子中,有很多盒子具有相同的质量,即对于每个m<sub>i</sub>都有N(m<sub>i</sub>)个小盒子,这就意味着上式中的和式可以写为:
 +
 
 +
<math>
 +
\sum_{i=1}^{n(t)}m_i^q=\sum_{m_i}{N(m_i)m_i^q}
 +
</math>
 +
 
 +
也就是说,我们可以把对不同小盒子i的求和转换成对不同的盒子质量m<sub>i</sub>的求和。而根据前面给出的α的定义,我们知道:
 +
 
 +
<math>m_i=(b(t))^{\alpha(t)}</math>
 +
 
 +
同样的道理,根据f(α)的定义:
 +
 
 +
<math>N(m_i)=(b(t))^{-f(\alpha(t))}</math>
 +
 
 +
于是,代到和式中:
 +
 
 +
<math>
 +
\sum_{i=1}^{n(t)}m_i^q=\sum_{\alpha(t)}{(b(t))^{-f(\alpha(t))+q \alpha(t)}}
 +
</math>
 +
 
 +
也就是说把求和下标又变成了α。当t趋于无穷大的时候,这个和式b(t)会远远小于1。于是求和号中的最小的那一项会起到最主要的贡献,以至于我们可以用下面的近似式:
 +
 
 +
<math>
 +
\sum_{i=1}^{n(t)}m_i^q=\sum_{\alpha(t)}{(b(t))^{-f(\alpha(t))+q \alpha(t)}}\approx b(t)^{\min_{\alpha}(q \alpha - f(\alpha)}
 +
</math>
 +
 
 +
这样,我们把求和号去掉了,相应地变成了使得等式<math>q \alpha -f(\alpha)</math>最小的那个α所对应项的值。把这些结果代入到Renyi维数的定义中就有:
 +
 
 +
<math>
 +
\chi(q)=\min_{\alpha}(q \alpha-f(\alpha))
 +
</math>
 +
 
 +
这样,函数χ(q)和f(α)就构成了一个勒让德(Legendre)变换对。按照[[Legendre变换]]的性质,我们也可以根据函数χ(q)而反过来求出f(α)。
 +
 
 +
<math>
 +
f(\alpha)=\min_{q}(q \alpha-\chi(q))
 +
</math>
 +
 
 +
于是,我们便可以通过全局的Renyi维度计算出多重分形谱f(α)。
 +
 
 +
在具体的计算中,我们当然可以针对一个α值,跑遍所有不同的q值,从而得到使得αq-χ(q)最小的一个q,从而计算出一个f(α),但是这样计算起来过于繁琐。事实上,只要注意到,由于要让αq-χ(q)最小,我们是可以得到一个α关于最优的q的响应函数的α(q)。再把最优解代回去,又会得到f(α(q)),也就是说无论α还是f,实际上都是q的函数。这样,我们再让q跑遍所有的可能值,就会得到一组α(q)和f(q)的点对,把这一组点对画在α-f平面上就得到了我们要的多重分形谱。
 +
 
 +
而根据χ(q)的定义,我们实际上能够具体地写出α(q)和f(q)。我们知道最优的q要让αq-χ(q)最小。对q求导,得到α=χ'(q)。而根据定义,我们知道:
 +
 
 +
<math>
 +
\chi'(q)=\lim_{t\rightarrow \infty}\frac{(\log(\sum_{i}(m_i^q)))'}{\log(b(t))}=\lim_{t\rightarrow \infty}\frac{\sum_i{\frac{m_i^q}{\sum_im_i^q}\log(m_i)}}{\log(b(t))}
 +
</math>
 +
 
 +
这样,就得到了α(q)的表达式:
 +
 
 +
 
 +
<math>
 +
\alpha(q)=\lim_{t\rightarrow \infty}\frac{1}{\log(b(t))}\sum_i{\mu_i \log(m_i)}
 +
</math>
 +
 
 +
其中,<math>\mu_i=m_i^q/\sum_i{m_i^q}</math>。这样,可以求出f(q)的表达式:
 +
 
 +
 
 +
<math>
 +
f(q)=\lim_{t\rightarrow \infty}\frac{1}{\log(b(t))}\sum_i{\mu_i \log(\mu_i)}
 +
</math>
 +
 
 +
于是,就可以画出f(q)和α(q)的关系图了。
 +
 
 +
===多重分形谱的计算===
 +
 
 +
数学推导工作已经全部完成了。下面,我们就可以进行实实在在的计算了。我们不妨把多重分形谱的计算看作一个函数multifractal,它的输入是一个n*n矩阵M,代表一个二维的场,矩阵的每个元素代表对应场点的质量。当然至于更高维度的场也可以做类似的推广。那么multifractal计算需要如下几个步骤:
 +
 
 +
  (1).初始化,计算出n*n的空间总共能分成多少个方格盒子。一般地,我们设最小的盒子边长为2,最大的盒子边长为2<sup>int(log<sub>2</sub>n)</sup>;
 +
  (2). 对所有不同边长的盒子循环。
 +
      (2.1). 对每个盒子,计算盒子内的总质量m<sub>ij</sub>。
 +
      (2.2). 将质量归一化,p<sub>ij</sub>=m<sub>ij</sub>/Σm<sub>ij</sub>。
 +
  (3). 对不同的q进行循环(通常我们事先给q一个预设的取值范围)
 +
      (3.1).再次对所有边长的盒子(分辨率)循环
 +
        (3.1.1) 计算在该分辨率下的A=Σμ<sub>i</sub>log m<sub>i</sub>和B=μ<sub>i</sub> log μ<sub>i</sub>
 +
      (3.2)根据不同分辨率下的A,B,对盒子大小b(t)在双对数坐标下做回归,计算出来α(q)和χ(q)
 +
  (4). 输出α(q)和χ(q)的坐标组合,并画图。
 +
 
 +
 
 +
下面,我们给出上述步骤在Matlab中的源代码实现,以供大家参考。
   −
Hi Arrubr,Hhmminguitd and Chameleon are complementary here, we just went with Chameleon in the demo. From what I&#8217;ve noticed, Chameleon is a little faster on the adaptive component generation, while Hummingbird has more options for dealing with primitives. White Feet Modeler is used with Hummingbird (it uses the same code from Excel), but not Chameleon.-Erick
+
function MyMultiFractalSpectrum(data,dimension)
 +
%原始数据可以是1维或者2维
 +
%如果是2维,矩形区域,取最大的边为尺度,划分出一个正方形,作为场
 +
    if dimension==2
 +
        sizes=size(data);
 +
        maxsz=max(sizes);
 +
        %maxsz=min(sizes);
 +
        field=zeros(maxsz,maxsz);
 +
        field(1:sizes(1),1:sizes(2))=data;
 +
    else
 +
        field=data;
 +
        maxsz=length(data);
 +
    end
 +
   
 +
    maxboxsz=floor(log(maxsz)/log(2));
 +
    massinmlevels={};
 +
    probmlevels={};
 +
    layer=4;
 +
   
 +
    %将场进行不同分辨率的划分,成为boxsz*boxsz的小区域,最后probmlevels是在不同分辨率下存储的各个小区域的总概率
 +
    for layer=1:maxboxsz
 +
        boxsz=2.^layer;
 +
        coordinates=0:boxsz:maxsz-boxsz;
 +
        if dimension==2
 +
            [xx,yy]=meshgrid(coordinates);
 +
            clusters=arrayfun(@(x,y){y+1:min(y+boxsz,maxsz),x+1:min(x+boxsz,maxsz)},yy,xx,'uniformoutput',false);
 +
            clusters=clusters(:);
 +
            bool=cell2mat(cellfun(@(x)(length(x{1})>0&length(x{2}>0)),clusters,'uniformoutput',false));
 +
            clusters=clusters(bool);
 +
            totalfields=cellfun(@(x)sum(sum(field(x{1},x{2}))),clusters,'uniformoutput',false);
 +
            totalfields=cell2mat(totalfields);
 +
        else
 +
            clusters=arrayfun(@(x)x+1:min(x+boxsz,maxsz),coordinates,'uniformoutput',false);
 +
            bool=cell2mat(cellfun(@(x)(length(x)>0),clusters,'uniformoutput',false));
 +
            totalfields=cellfun(@(x)sum(field(x)),clusters,'uniformoutput',false);
 +
            totalfields=cell2mat(totalfields);
 +
        end
 +
        massinmlevels={massinmlevels{:},totalfields};
 +
        probmlevels={probmlevels{:},totalfields./sum(totalfields)};
 +
    end
 +
   
 +
    %计算多重分形谱,alpha(q)和f(q),qran为q的范围,qres为q的分辨率
 +
    qran=10;qres=0.1;
 +
    qq=-qran:qres:qran;
 +
    fqss=[];
 +
    alphaqss=[];
 +
    q=-10+0.1;
 +
    for q=qq
 +
        fqs=[];
 +
        alphaqs=[];
 +
        for layer=1:maxboxsz
 +
            bools=probmlevels{layer}>0;
 +
            qmass=(probmlevels{layer}(bools)).^q;
 +
            normalized=qmass./sum(qmass(~isinf(qmass)));
 +
            fq=sum(normalized.*log(normalized));
 +
            alphaq=sum(normalized.*log(probmlevels{layer}(bools)));
 +
            fqs=[fqs,fq];
 +
            alphaqs=[alphaqs,alphaq];
 +
        end
 +
        line1=polyfit(log(2.^(1:maxboxsz)),alphaqs,1);
 +
        line2=polyfit(log(2.^(1:maxboxsz)),fqs,1);
 +
        alphaqss=[alphaqss,line1(1)];
 +
        fqss=[fqss,line2(1)];
 +
    end
 +
    %绘制多重分形谱的图
 +
    figure;plot(qq,alphaqss,'r:o',qq,fqss,'g:o');
 +
    h = legend('alpha(q)','f(q)',1);
 +
    xlabel('q','FontSize',14);
 +
    figure;plot(alphaqss,fqss,'r:o');
 +
    xlabel('alpha(q)','FontSize',14);
 +
    ylabel('f(q)','FontSize',14);
 +
end
    
==多重分型谱应用举例==
 
==多重分型谱应用举例==
第64行: 第277行:  
===数字图像===
 
===数字图像===
   −
接下来,我们介绍A method for detecting objects using Legendre transform文章<ref>{{cite journal|last1=CARON,|first1=Yves|last2=MAKRIS,|first2=Pascal|last3=VINCENT,|first3=Nicole| title=A method for detecting objects using Legendre transform| confernce=RFAI team publication, Maghrebian Conference on Computer Science  MCSEAI, Annaba (Algeria)|time=2002|page=219-225}}</ref>
+
接下来,我们介绍A method for detecting objects using Legendre transform文章<ref>{{cite conference|last1=CARON,|first1=Yves|last2=MAKRIS,|first2=Pascal|last3=VINCENT,|first3=Nicole| title=A method for detecting objects using Legendre transform| conference=RFAI team publication, Maghrebian Conference on Computer Science  MCSEAI, Annaba (Algeria)|time=2002|page=219-225}}</ref>
 
中的结果。
 
中的结果。
   第92行: 第305行:  
右图的两个图形是作者定义的两种指标以反映子图形区块(X,Y坐标)多重分形谱的宽度。我们看到,人工物体所在的子图对应的宽度会更大。
 
右图的两个图形是作者定义的两种指标以反映子图形区块(X,Y坐标)多重分形谱的宽度。我们看到,人工物体所在的子图对应的宽度会更大。
   −
Bill, good link and important topic. Have you noticed a change in demand and the kinds of video being produced over the last couple years? I know yo&8u#217;ve been in the video biz for many years.Also, let me join the others in saying I&#8217;m glad to see you back to blogging.
+
==参考文献==
[[Category:旧词条迁移]]
+
关于多重分形的教科书可以参考<ref>{{cite book |last1=Harte|first1=David |year=2001 |title=Multifractals: Theory and Applications |publisher=Chapman and Hall/CRC |ISBN=1584881542}}</ref>。多重分形在金融市场上的应用可以参考<ref>{{cite book |last1=Kobeissi|first1=Yasmine Hayek|year=2012| title=Multifractal Financial Markets: An Alternative Approach to Asset and Risk Management|publisher=Springer|ISBN=1461444896}}</ref>
 +
<references/>
66

个编辑

导航菜单