カントール集合のマルチフラクタル(multi-fractal)解析
l_1 = 1/4 , l_2 = 1/2 のカントール集合についてのマルチフラクタル(multi-fractal)解析を行う。
(※マルチフラクタル(multi-fractal)解析についてはこちらをご覧ください)
マルチフラクタル(multi-fractal)解析
厳密解
■ハウスドルフ(Hausdorff)次元:D_H = f(<\alpha>_c|_{q=0}) = log(1+\sqrt(5))/log2 = 0.69424・・・
■局所次元 <\alpha>_c|_{q=0} = 2/(5-\sqrt(5)) = 0.723606・・・
※1.集合全体のハウスドルフ次元は、局所次元 \alpha = <\alpha>_c|_{q=0})となる部分集合の容量次元と一致する。
※2.ハウスドルフ次元(D_H)と一般化容量次元(\tilde D_0)は一致する。
■一般化情報次元 \tilde D_0 = <\alpha>_c|_{q=1} = f(<\alpha>_c|_{q=1}) = 2/3 = 0.66666・・・
※局所次元 \alpha = <\alpha>_c|_{q=1})と、
局所次元 \alpha = <\alpha>_c|_{q=1})となる部分集合の容量次元(f(<\alpha>_c|_{q=1}))が一致し、かつ、一般化情報次元と一致する。
■局所次元の最小値:\alpha_{min} = <\alpha>_c|_{q->\infty} = 1/2=0.5
■局所次元の最大値:\alpha_{max} = <\alpha>_c|_{q->-\infty} = 1
VisualC++ ソース
(世代)n=10 のカントール集合における、マルチフラクタル解析のソース。
/*
カントール集合のmaruti-fractal解析
*/
#include <math.h>
#include <stdlib.h>
#include <time.h>
#include <fstream>
#include <iostream>
#include <string>
#include <cstdio>
#include <iomanip>
#include <stdio.h>
using namespace std;
double PI = 3.1415926535897932384;
double e = 2.7182818284590452354;
//関数のプロトタイプ宣言
int factorial( int n );
ofstream ofs1( "result1.data" );
int main(){
int N , n=10, a=2, r;
double R[1024] = {0.0};
double l_1 = 1.0/4.0 , l_2 = 1.0/2.0;
double Z,F,Q;
double alpha_c, beta_c, epsilon_c,f_alpha,q;
N = int(pow(double(a),n));
r=0;
for(int j=0; j<=n; j++){
int g = factorial(n)/(factorial(n-j)*factorial(j));
for(int k=1; k<=g ;k++){
R[r] = pow(l_1,j) * pow(l_2,n-j);
r++;
}
}
for(int i=0; i<2000;i++){
Z=0;
beta_c = double(i)/50.0-20.0;
for(int j=1;j<=N;j++){
Z+= pow(R[j-1],beta_c);
}
F= log(Z)/double(n);
double sum=0.0;
for(int j=1;j<=N;j++){
sum+= log(R[j-1])*pow(R[j-1],beta_c);
}
epsilon_c = -1.0/double(n)*sum/Z;
alpha_c = log(double(a))/epsilon_c;
Q = F + epsilon_c* beta_c;
f_alpha = Q/epsilon_c;
cout << i << endl;
ofs1.precision(30);
ofs1 << alpha_c << " " << f_alpha << endl;
}
}
int factorial( int n ){
if ( n > 1 ){
return n * factorial ( n-1 );
}else if ( n == 1 || n == 0){
return 1;
}
}
次回の予定
マルチフラクタル解析の詳細をまとめる。



