糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > RS法计算Hurst指数

RS法计算Hurst指数

时间:2023-08-15 23:25:49

相关推荐

RS法计算Hurst指数

本文主要介绍一下使用RS法计算Hurst指数,文章原理等来自互联网,使用python进行了简单的实现。

声明:本博客的内容来源于各大论文和互联网,其正确性有待考究。目的仅仅为了记录一下本人的学习过程,如果正好也能对你有一点帮助或者发现文中的错误所在,非常欢迎留言交流呀。

1 原理

本人是一个小白,今天搜索了很多文章,讲得都不怎么透彻,最后看到了这篇/thread-1414154-1-1.html文章,讲得非常详细,这里我将其主要部分贴在此处。(原文中讲得非常详细,还涉及到了如何优化计算等问题)

2 意义

本人是个小白,以下内容来自引用[2],其Hurst数值大小的意义如下:

3 代码实现(python)

详细的实现代码也是根据该文中提供的原理进行编写的,是最原始的解法,未进行优化,其中的命名也是和上图中的原理是一一对应的,便于理解。

import numpy as np import mathdef hurst_rs(data:list):"""使用rs法计算Hurst指数值"""t_i = []for r in range(2, (len(data))//2 + 1):g = len(data)//rx_i_j = [data[i * r : (i+1)*r] for i in range(g)]x_i_mean = [sum(x_i)/r for x_i in x_i_j]y_i_j = [[x_i_j[i][j] - x_i_mean[i] for j in range(r)] for i in range(g)]z_i_j = [[sum(y_i_j[i][ : j + 1]) for j in range(r)] for i in range(g)]r_i = [max(z_i_j[i])-min(z_i_j[i]) for i in range(g)]s_i = [math.sqrt(sum([ (x_i_j[i][j]-x_i_mean[i])**2 for j in range(r)]) / (r-1)) for i in range(g)]rs_i = [r_i[i]/s_i[i] for i in range(g)]rs_mean = sum(rs_i)/g# t_i.append( math.sqrt(sum([(rs_i[i] - rs_mean)**2 for i in range(g)])/(g-1)) )t_i.append(rs_mean)return np.polyfit(np.log(np.arange(2, len(data)//2 + 1)), np.log(np.array(t_i)), 1)[0]if __name__ == "__main__":# 测试data_test = list(np.arange(0, 100))print(hurst_rs(data_test))

以上代码的测试结果为:1.0539540901544668

参考文献

[1]RS 分析法和 Hurst 指数计算方法/thread-1414154-1-1.html(出处: ExcelHome技术论坛)

[2]薛静. 基于Hurst指数的AED自动诊断分析算法研究[D]. .

如果觉得《RS法计算Hurst指数》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。