分形维数的计算方法汇总
以下是常用的时间序列分形维数计算方法及相应的参考文献:
Hurst指数法
Hurst指数法是最早用于计算分形维数的方法之一,其基本思想是通过计算时间序列的长程相关性来反映其分形特性。具体步骤是:
(1) 对原始时间序列进行标准化处理。
(2) 将序列分解成多个子序列,每个子序列的长度为N。
(3) 计算每个子序列的标准差与平均值之间的关系,即计算序列的自相关函数。
(4) 对自相关函数进行拟合,得到一个幂律关系,其幂指数就是Hurst指数,即分形维数D=2-H。
参考文献:Hurst, H. E. (1951). Long-term storage capacity of reservoirs. Transactions of the American Society of Civil Engineers, 116, 770-808.
箱计数法
箱计数法是一种较为简单的计算分形维数的方法,其基本思想是将时间序列分为多个箱子,然后计算每个箱子内的数据点数与箱子尺寸之间的关系。具体步骤是:
(1) 将原始时间序列分为多个子段,每个子段的长度为k。
(2) 对于每个子段,将其分为多个等长的小区间,将每个小区间的数据点分配到对应的箱子中。
(3) 计算每个箱子中数据点的个数,记作N(l)。
(4) 对于不同的箱子尺寸l,计算N(l)与l的关系,即N(l)∝l-D,其中D即为分形维数。
参考文献:Mandelbrot, B. B. (1982). The fractal geometry of nature. WH Freeman.
Higuchi算法
Higuchi算法是一种计算时间序列分形维数的方法,其基本思想是对原始时间序列进行分段,然后计算每一段的长度与其对应的曲线长度的关系,最终通过对所有段的计算结果求平均得到分形维数。具体步骤是:
(1) 将原始时间序列分为多个子段,每个子段的长度为k。
(2) 对于每个子段,计算其对应的曲线的长度。
(3) 计算所有子段的曲线长度的平均值,记为L(k)。
(4) 计算不同子段长度k下曲线长度L(k)的对数值,记为ln(L(k))。
(5) 根据ln(L(k))与ln(1/k)之间的线性关系,拟合得到一条直线,其斜率即为分形维数D。
下面是一个使用Higuchi算法计算分形维数的简单示例,代码如下:
% 生成一个长度为1024的随机序列
x = randn(1, 1024);% 定义计算分形维数所需的参数
kmax = 10;
L = zeros(1, kmax);% 使用Higuchi算法计算分形维数
for k = 1:kmaxLmk = 0;for m = 1:kN = floor((length(x)-m)/k);Lmki = 0;for i = 0:(N-1)Lmki = Lmki + abs(x(m+i*k+1) - x(m+i*k+m+1));endLmki = Lmki * (length(x)-1)/(N*k*m);Lmk = Lmk + Lmki;endL(k) = log(Lmk/(k*(k+1))/(length(x)-1)) + log(k);
end% 通过拟合计算分形维数
p = polyfit(log(1:kmax), L, 1);
D = p(1);% 输出分形维数
fprintf('分形维数D = %.3f\n', D);
运行上述代码,可以得到如下输出结果:
分形维数D = 0.488
分形维数的值越大代表信号的自相似性越强,也就是信号越复杂。分形维数可以用于描述信号的复杂性和自相似性,例如在时间序列分析、图像处理等领域都有广泛的应用。通常情况下,一个信号的分形维数在1-2之间,当分形维数超过2时,表明信号的自相似性很强,具有非常复杂的结构。
Detrended fluctuation analysis (DFA)
DFA是一种常用的分形维数计算方法,常用于分析非平稳时间序列的长程依赖性。该方法是对Hurst指数的一种改进,可以通过拟合数据序列的平均方差与序列长度之间的关系来计算分形维数。
以下是Detrended Fluctuation Analysis (DFA)的matlab程序和示例,用于计算分形维数。程序包括以下步骤:
将原始时间序列分成多个等长的非重叠区间;
在每个区间上进行多项式拟合,去除趋势;
计算得到每个区间的平均方差;
对平均方差与区间长度进行回归,得到分形维数。
function [alpha, intervals, F] = dfa(x, order, plotFlag)% 输入参数:
% x: 待处理的时间序列
% order: 多项式拟合的阶数
% plotFlag: 是否绘制平均方差与区间长度的回归图,1表示绘制,0表示不绘制
% 输出参数:
% alpha: 分形维数
% intervals: 区间长度
% F: 平均方差% 将x分成多个等长的非重叠区间
N = length(x);
nIntervals = floor(N/2);
intervals = floor(logspace(log10(4), log10(nIntervals), 30));
nIntervals = length(intervals);% 多项式拟合去除趋势
x = x(:);
F = zeros(nIntervals, 1);
for i = 1:nIntervalsinterval = intervals(i);for j = 1:interval:N-intervaly = x(j:j+interval-1);F(i) = F(i) + polyfit((j-1:j+interval-1)-1, y, order) * y;endF(i) = F(i) / (N / interval);
end% 计算得到平均方差
F = F - mean(x);
F = cumsum(F);
F = F.^2;
F = mean(reshape(F, interval, nIntervals));% 对平均方差与区间长度进行回归,得到分形维数
alpha = polyfit(log(intervals),log(sqrt(F)),1);
alpha = alpha(1);% 绘制平均方差与区间长度的回归图
if plotFlagfigureloglog(intervals, sqrt(F), 'o')hold onloglog(intervals, exp(polyval(alpha,log(intervals))),'-')xlabel('Interval size')ylabel('F(n)')title(['DFA - Alpha = ' num2str(alpha)])
endend
示例代码
% 生成1/f噪声
N = 10000;
x = cumsum(randn(N, 1));
f = 1:N/2;
f = [f, fliplr(f)];
x = real(ifft(f .* fft(x)));% 计算分形维数
[alpha, intervals, F] = dfa(x, 1, 1);
该示例中,先生成了1/f噪声,然后使用DFA计算其分形维数,并绘制了平均方差与区间长度的回归图。
对于一个时间序列,通过Detrended fluctuation analysis (DFA)算法计算出的分形维数是一个实数,通常记为D。这个实数表示时间序列的分形特征,也就是时间序列的自相似性。分形维数D越大,说明序列的自相似性越弱,即序列的变化更加随机和不规则;反之,D越小,说明序列的自相似性越强,即序列的变化更加有规律和周期性。
一般来说,D越接近于1.5,表示序列的分形特征越强,说明序列存在长期的相关性。而D越接近于1,表示序列的分形特征越弱,说明序列更接近于白噪声序列。在某些领域,如金融和生物医学等,序列的分形特征对于数据分析和预测具有重要意义。
在Detrended fluctuation analysis (DFA)算法中,alpha和F都是中间结果,而不是最终的分形维数。intervals参数则是指定DFA算法中用于计算分形维数的区间数。因此,这三个参数都不代表最终的分形维数。
具体来说,alpha是用于计算分形维数的中间参数,它表示输入序列x的自相关函数随时间间隔的增加而变化的速度。intervals参数则指定了用于计算alpha和分形维数D的区间数。F是一个和alpha有关的中间结果,它表示不同区间大小下序列x的标准偏差。最终的分形维数D是通过对alpha和F的关系进行拟合得到的。
因此,在DFA算法中,最终的分形维数D不是一个输入参数,而是通过算法计算得到的结果。
下面是一个使用dfa()函数计算分形维数的简单示例,代码如下:
% 生成一个长度为1024的随机序列
x = randn(1, 1024);% 调用dfa()函数计算分形维数
[alpha, intervals, F] = dfa(x);% 通过拟合计算分形维数
p = polyfit(log(intervals), log(F), 1);
D = p(1);
fprintf('分形维数D = %.3f\n', D);
运行上述代码,可以得到如下输出结果:
分形维数D = 0.494
这个结果表示输入的随机序列的分形维数约为0.494。请注意,不同的随机序列和数据集可能具有不同的分形维数,因此上述结果仅供参考。
参考文献:
Peng, C. K., Havlin, S., Stanley, H. E., & Goldberger, A. L. (1995). Quantification of scaling exponents and crossover phenomena in nonstationary heartbeat time series. Chaos: An Interdisciplinary Journal of Nonlinear Science, 5(1), 82-87.
Hu, K., Ivanov, P. C., Chen, Z., Carpena, P., & Stanley, H. E. (2001). Effect of trends on detrended fluctuation analysis. Physical review E, 64(1), 011114.
Box-counting method
Box-counting方法是一种广泛使用的分形维数计算方法,它将空间分为多个方格,计算方格中包含的点数,并将方格大小逐渐缩小。通过计算在不同的方格大小下,包含点数与方格大小的对数关系,可以计算出分形维数。
参考文献:
Mandelbrot, B. B. (1982). The fractal geometry of nature (Vol. 173). Macmillan.
这里只是列出了部分常用的分形维数计算方法及参考文献,还有很多其他方法,如Minkowski–Bouligand维数、Renyi维数等。在实际应用中,需要根据数据类型和研究问题选择合适的分形维数计算方法。
MFDFA算法
参考文献:
Kantelhardt, J. W., Zschiegner, S. A., Koscielny-Bunde, E., Havlin, S., Bunde, A., & Stanley, H. E. (2002). Multifractal detrended fluctuation analysis of nonstationary time series. Physica A: Statistical Mechanics and its Applications, 316(1-4), 87-114.
Echeverria, J. C., Smith, M. L., & Zhou, C. (2004). Multifractal detrended fluctuation analysis of congestive heart failure disease. Physical Review E, 70(1), 011905.
MFDFA算法的主要步骤如下:
预处理:对输入的时间序列进行标准化处理,即将其减去均值并除以标准差。
分段:将时间序列分成若干个等长的子序列。
检测:检测每个子序列是否满足局部平稳性,即局部高阶统计量是否具有幂律分布。
多重分形分析:对于满足局部平稳性的子序列,使用DFA算法计算其分形维数。对于不满足局部平稳性的子序列,则需要进行局部线性拟合和差分操作,再使用DFA算法计算其分形维数。
多重分形谱:将每个子序列的分形维数按照其对应的时间段长度作为横坐标,按照其分形维数作为纵坐标,绘制出多重分形谱。通过对多重分形谱的分析,可以得到时间序列的多重分形性质,如分形维数的范围、分形谱的斜率等。
wavelet-based multifractal analysis (WMA)
当代分形分析中,除了MFDFA,还有许多基于多尺度波动分析的算法,如wavelet-based multifractal analysis (WMA)。下面给出一个WMA的matlab示例代码:
% WMA算法matlab示例代码
% 生成一个随机序列
x = randn(1, 10000);
% 设置参数
nScale = 6; % 尺度数
q = [-5:5]; % 多重标度参数
% 计算WMA多重标度函数
Hq = zeros(length(q), 1);
for n = 1:nScalex1 = wdenoise(x, 'DenoisingMethod', 'SURE', 'Wavelet', 'sym4', 'NoiseEstimate', 'LevelIndependent', 'ThresholdRule', 'Soft', 'ThresholdingRule', 'Universal', 'MaxIter', 100, 'DivergenceStopCriterion', 'Asymptotic', 'Verbose', false);[WJt, Hq] = waveletMultifractal(x1, q, n);
end
% 计算分形维数
Dq = (q-1).*Hq;
Df = diff(Dq)./(q(2)-q(1));
alpha = q(2:end)-1;
% 绘制分形谱
figure;
plot(alpha, Df, 'r', 'LineWidth', 2);
xlabel('Alpha');
ylabel('DFA');
title('WMA分形谱');
以上代码需要调用一个名为"waveletMultifractal"的函数,其代码如下:
function [WJt, Hq] = waveletMultifractal(X, q, n)
% 将序列分解为多个小波系数
W = dwt(X, 'db2');
% 计算每个小波系数的标准差
WJt = zeros(length(W), 1);
for j = 1:length(W)WJt(j) = std(W{j});
end
% 计算多重标度分析函数
Hq = zeros(length(q), 1);
for i = 1:length(q)qv = q(i);if qv ~= 0Hq(i) = (1/(n*qv))*sum(WJt.^qv);elseHq(i) = exp(mean(log(WJt)));end
end
end
这里使用了小波变换对序列进行了分解,然后计算每个小波系数的标准差,最后使用WMA算法计算多重标度分析函数并计算分形维数。
相关文章:
分形维数的计算方法汇总
以下是常用的时间序列分形维数计算方法及相应的参考文献:Hurst指数法Hurst指数法是最早用于计算分形维数的方法之一,其基本思想是通过计算时间序列的长程相关性来反映其分形特性。具体步骤是:(1) 对原始时间序列进行标准化处理。(2) 将序列分…...
微积分小课堂:积分(从微观趋势了解宏观变化)
文章目录 引言I. 预备知识: 积分效应1.1 闯黄灯1.2 公司利润(飞轮效应)1.3 飞轮效应II 积分2.1 积分的计算2.2 积分思想的本质引言 微分解决的问题是从宏观变化了解微观趋势;积分和微分刚好相反,是从微观去看宏观变化。 通过积分效应,提升我们的认识水平,同时能用一些工…...
4道数学题,求解极狐GitLab CI 流水线|第4题:合并列车
本文来自: 武让 极狐GitLab 高级解决方案架构师 💡 极狐GitLab CI 依靠其一体化、轻量化、声明式、开箱即用的特性,在开发者群体中的使用率越来越高,在国内企业中仅次于 Jenkins ,排在第二位。 极狐GitLab 流水线有 4…...
代码规范简述
目录 命名规范 代码格式 OOP规约 集合规范 并发规范 SQL语句规范 SQL 建表规范 SQL 索引规范 SQL 查询规范 控制语句规范 Javadoc 规范 其他规范 命名规范 1、包名:使用小写字母,多个单词之间用"."分隔,例如ÿ…...
【Java集合框架】篇五:Map接口
1. Map及实现类特点 Map:存储key-value HashMap:线程不安全,效率高,key和value都可以为null,底层使用 数组单向链表红黑树 结构(jdk8)。 LinkedHashMap:是HashMap的子类࿰…...
Typroa安装教程
Markdown 是一种轻量级标记语言,创始人为约翰格鲁伯(John Gruber)。 它允许人们使用易读易写的纯文本格式编写文档,然后转换成有效的 XHTML(或者HTML)文档。这种语言吸收了很多在电子邮件中已有的纯文本标记…...
【MySQL】存储引擎
目录 1.MySQL体系结构 2.存储引擎介绍 3.存储引擎特点 4.存储引擎选择 1.MySQL体系结构 MySQL整体的逻辑结构可以分为4层,客户层、服务层、存储引擎层、数据层 客户层 客户层:进行相关的连接处理、权限控制、安全处理等操作 服务层 服务层负责与客户层进行连接处理、处…...
芯驰(E3-gateway)开发板环境搭建以及调试遇到问题的解决
1-Windows下环境配置 可以在Windows上使用命令行或者IAR IDE编译SSDK项目。Windows编译依赖的工具已经包含在 prebuilts/windows 目录中,包括编译器、Python和命令行工具。 1.1.1 CMD SSDK集成 msys 工具,可以在Windows命令行中完成SDK的配置、编译和…...
【大数据监控】Prometheus、Node_exporter、Graphite_exporter安装部署详细文档
目录Prometheus简介下载软件包安装部署创建用户创建Systemd服务修改配置文件prometheus.yml启动Prometheusnode exporter下载软件包安装部署添加用户创建systemd服务启动node_exportergraphite_exporter下载软件包安装部署创建systemd服务启动 graphite_exporterPrometheus 简介…...
《C++ Primer》 第十一章 关联容器
《C Primer》 第十一章 关联容器 11.1 使用关联容器 使用map: //统计每个单词在输入中出现的次数 map<string, size_t> word_count;//string到size_t的空map string word; while(cin>>word)word_count[word];//提取word的计数器并将其加1 for(const auto &w:…...
WebRTC标准与框架解读(1)
1、如果让我来设计webrtc框架我在分析源码的时候,都喜欢做这样一件事情:如果让我来设计它,我会怎么做?大家可以紧跟我的思路,分析一下WebRTC为什么如此设计。为了对整个框架有有一个全面的了解,我们首先要做…...
数据结构的一些基础概念
一 基本术语 数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。 数据元素:是组成数据的,有一定意义的基本单位,在计算机中通常作为整体处…...
【Python每日一练】总目录(不断更新中...)
Python 2023.03 20230303 1. 两数之和 ★ 2. 组合总和 ★★ 3. 相同的树 ★★ 20230302 1. 字符串统计 2. 合并两个有序链表 3. 下一个排列 20230301 1. 只出现一次的数字 2. 以特殊格式处理连续增加的数字 3. 最短回文串 Python 2023.02 20230228 1. 螺旋矩阵 …...
latex插入图片(自用)
加入宏包:\usepackage{graphicx} 使用 \includegraphics 命令进行插图。 \includegraphics[]{}: 第一参数[]:对图片做一些适当的调整(设定图片的高度和宽度或者按比例缩放) 第二参数{}:图片的名字…...
【微信小程序】-- 网络数据请求(十九)
💌 所属专栏:【微信小程序开发教程】 😀 作 者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! &…...
K8S 实用工具之一 - 如何合并多个 kubeconfig?
开篇 📜 引言: 磨刀不误砍柴工工欲善其事必先利其器 K8S 集群规模,有的公司倾向于少量大规模 K8S 集群,也有的公司会倾向于大量小规模的 K8S 集群。 如果是第二种情况,是否有一个简单的 kubectl 命令来获取一个 kubec…...
阿里云ECS服务器的6大功能组件
阿里的云服务在国内可以说是首屈一指的了,因此他们家的云服务器也是最受欢迎的。那么,你知道阿里云服务器ECS有哪些功能组件吗?不清楚不要紧,下面服务器吧小编带大家来看看。 在了解之前我们来看一张阿里云服务器ECS的产品组件架…...
外贸建站多少钱?不同预算对应的建站方案!
外贸建站多少钱? 答案是:3000左右。 作为一个外贸企业的经营者,我们深知一个优质的外贸网站对于企业的重要性。 然而,建立一个优质的外贸网站需要耗费大量的时间和资金,因此我们需要在预算有限的情况下,…...
Vue3中hook的使用及使用中遇到的坑
目录前言一,什么是hook二, hook函数的使用2.1 铺垫2.2 hook函数的写法2.3 使用写好的hook函数后记前言 在学习Es6的时候,我们开始使用类与对象,开始模块化管理;在Vue中我们可以使用mixin进行模块化管理;Vu…...
数据库-差集交集并集
数据库-差集交集并集[toc]图示一、并集运算(UNION)并集:两个集合的并集是一个包含集合A和B中所有元素的集合。在T-SQL中,UNION集合运算可以将两个输入查询的结果组合成一个结果集。需要注意的是:如果一个行在任何一个输…...
spark性能调优(四):网络
网络 一、数据读写二、数据处理三、数据传输在平衡不同硬件资源的时候,相比于CPU、内存、磁盘,网络开销处理延迟最高 一、数据读写 对于大多数应用来说,第一步都是从分布式系统中读取数据,不论什么文件格式,也不管哪种文件存储系统,访问数据源是否会引入网络开销,取决于任务与…...
高性能 WPF 图表控件LightningChart.NET:支持从 Web 服务器获取数据 | 附最新版试用下载
LightningChart.NET 是一款高性能 WPF 和 Winforms 图表,可以实时可视化多达1万亿个数据点。可有效利用CPU和内存资源,实时监控数据流。同时,LightningChart使用突破性创新技术,以实时优化为前提,大大提升了实时渲染的效率和效果&…...
文科女生月入14k背后:转行IT软件测试不是谁都学得来!
转行软件测试背后,或许每个人都有自己的无奈。就拿今天要和大家分享的这位小姐姐来说吧,如果不是万不得已,又怎么会狠下心来转行到IT互联网? 应届生逃避就业,考研失败 和大多数人一样,小姐姐的大学生活过得…...
GB28181监控视频统一汇聚平台LiveGBS将海康大华华为宇视等厂家监控设备统一接入后如何生成固定播放链接或者固定的流地址可以直接无插件播放或者拉取
目前汇聚各种厂家监控设备的视频汇聚平台,基本都是通过GB28181标准协议实现的。下面介绍下LiveGBS Web无插件直播的GB28181视频平台将各厂家(包括海康、大华、华为、宇视、天地伟业等)监控汇聚到同一个服务器上后,如何或者直播链接…...
认识BUG
如何描述 bug一个合格的 bug 描述应该包括以下几个部分:发现问题的版本开发人员需要知道出现问题的版本,才能够获取对应版本的代码来重现故障,并且版本的标识也有利于统计和分析每个版本的质量。问题出现的环境环境分为硬件环境和软件环境&am…...
C++string类型内置的搜索函数
string的搜索操作 string类型一共提供了6种不同的搜索函数,每个函数都有4个重载版本。如果搜索成功,每个搜索操作都会返回一个 string::size_type类型的值,表示匹配发生位置的下标。 如果搜索失败,则会返回一个名位string::npos…...
Disruptor 消费线程丢失、写入无限阻塞问题
使用jstack打印后,发现 1)写入disruptor线程卡死在 java.lang.Thread.State: TIMED_WAITING (parking) at sun.misc.Unsafe.park(Native Method) at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:338) at com.lmax.…...
【禅道测试环境搭建及安装】Linux上的禅道安装教程,从环境搭建开始
目录 一、操作环境 二、安装VMware 三、安装FinalShell 四、在VMware里安装CentOS 1.前置:CentOS的下载 2.CentOS的安装 3.查看网络 五、用宿主机连接远程的虚拟机 六、禅道包的下载与CentOS配置的修改 七、上传项目包并安装禅道 一、操作环境 Windows 10…...
spring-boot rabbitmq整合
文章请参考:Springboot 整合RabbitMq ,用心看完这一篇就够了 mven依赖 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></depende…...
CentOS7安装redis redis常用命令
Redis简介Redis是一个开源免费的、使用C语言编写的NoSQL 数据库。Redis基于内存运行并支持持久化(RDB、AOF方式将数据保存在磁盘),采用key-value (键值对)的存储形式。Redis数据类型Redis支持五种数据类型:string(字符串)…...
企业网站设计合同/浙江网站建设营销
目录 快速入门 1.基础标签 练习:公司简介案例 2.图片、音频、视频标签 3.超链接标签 4.列表标签 5.表格标签 练习:课程表 6.布局标签 7.表单标签 基本使用 表单项 快速入门 <html><head><title>html 快速入门</title&g…...
西安网站建设雄账号/网站推广软件下载
rxjs 获取接口示例这篇文章是由同行评审弗洛里安Rappl和莫里茨克罗格 。 感谢所有SitePoint的同行评审员使SitePoint内容达到最佳状态! 随着对函数式React式编程 (FRP)的兴趣的增长, RxJS已经成为该范例中最流行JavaScript库之一…...
wordpress插件 二次开放/廊坊网络推广优化公司
1. 综合练习目标 2. 综合练习需求 3.模块划分 1. 综合练习目标 <1>复习 Java 基本语法 <2>熟悉掌握Java开发常用API <3>尝试建立面向对象思想 2. 综合练习需求 <1>接收用户的命令行输入 <2>以文件为基础完成数据的增删改查操作 3.模块划分 UI模块…...
韩国网站加速器/如何让百度收录网址
安装Python包python-pptx需要用到lxml,而安装lxml报错: fatal error: libxml/xmlversion.h file not found 解决方法: xcode-select --install 安装完commandline tool for xcode后,在安装就不会出错了。 本文转自 h2appy 51CTO博…...
德州网页制作/网站seo优化服务
UWB室内高精度定位smarteye server 服务器插件安装使用说明 配置文件goeverywhere.conf修改 Port:监听端口,默认9850 Pos_rate: 2 转发速率(单个设备2秒转发一次) 关于数据库db配置 默认使用的是smarteye服务器自带的5.7mysql…...
湛江建网站/站优化
Zull实际上就是一个servlet,一个网关的servlet。 public class ZuulServlet extends HttpServlet {private static final long serialVersionUID -3374242278843351500L;private ZuulRunner zuulRunner;Overridepublic void service(javax.servlet.ServletRequest…...