逐像元计算Hurst指数和趋势率Slope的Matlab代码实现

一、实验背景

1、Hurst指数:基于重标极差(R/S)分析方法基础上的赫斯特指数(H)的研究是由英国水文专家Hurst在研究尼罗河水库水流量和贮存能力的关系时,发现用有偏的随机游走(分形布朗运动)能够更好地描述水库的长期存贮能力,并在此基础上提出了用重标极差(R/S)分析方法来建立赫斯特指数(H)。作为判断时间序列数据遵从随机游走还是有偏的随机游走过程的指标(参考文章:【Matlab】逐像元Hurst指数分析)。

为了分析ΔLAI变化的持续性,引入Hurst指数进行分析,采用重标极差法(R/S)来计算Hurst指数,其计算方法如下:

逐像元计算Hurst指数和趋势率Slope的Matlab代码实现_第1张图片

(1)如果H=0.5,无一致性随机序列(无法判断未来的趋势);

(2)如果0.5

(3)如果0≤H<0.5,未来不一致的时间序列(未来趋势与现在趋势不一致)。

2、Slope趋势率指数:用来表征一个时间序列在指定时间范围内的变化趋势,Slope>0,上升趋势;Slope<0,下降趋势。

二、实验数据和方法

1、数据:2001~2021年中国东部林地LAI数据(0.05°,1month)

2、方法:将Slope和Hurst指数叠加得出LAI在未来的变化趋势[1].

Hurst

Slope

未来趋势

>0.5

>0

持续增加

<0

持续减少

<0.5

>0

由增加变为减少

<0

由减少变为增加

=0.5

无法预测

3、实现步骤

第一步:新建函数文件

function H = calculateHurst(data)
    n = length(data);
    m = floor(log2(n));

    fluct = zeros(m,1);
    scale = zeros(m,1);

    for i = 1:m
        scale(i) = 2^i;
        subset = reshape(data(1:scale(i)*floor(n/scale(i))), scale(i), []);
        subset_mean = mean(subset,1);
        subset_deviation = subset - repmat(subset_mean, scale(i), 1);
        cumsum_deviation = cumsum(subset_deviation, 1);
        subset_range = max(cumsum_deviation, [], 1) - min(cumsum_deviation, [], 1);
        subset_std = std(subset, 1);
        fluct(i) = mean(subset_range ./ subset_std);
    end

    p = polyfit(log2(scale), log2(fluct), 1);
    H = p(1);
end

第二步:实例应用

clear;
clc;
close all;
[aa,R]=geotiffread('D:\text\2001LAI_GUP.tif');%先导入纬度数据
info=geotiffinfo('D:\text\2001LAI_GUP.tif');
[e,f]=size(aa);
%%导入数据
inputLAIfile='D:\text\clip/';
LAI = nan(e,f,20);
result= nan(e,f);
X=nan(1,20);
for i=2001:2020
     LAI(:,:, i-2000)=imread(strcat(inputLAIfile,num2str(i),'LAI_4-3.tif'));
     linshi=LAI(:,:, i-2000);
     linshi(linshi<-3000)=0;
      LAI(:,:, i-2000)=linshi;
end
%%逐像元计算Hurst
for row=1:e
    for col=1:f
        X(:) = LAI(row,col,:); 
        H = calculateHurst(X);
        time=2001:2020;
        time=time';
        B=[ones(20,1),time];
        LAI1=X';
        %计算趋势率Slope
        [b,bint,r,rint,stats] = regress(LAI1,B);
        trend=b(2);
        if trend>0
            if H>0.5
                result(row,col) = 1;
            elseif H<0.5
                result(row,col) = 2;
            else
                result(row,col) = 5;
            end
        elseif trend<0
            if H>0.5
                result(row,col) = 3;
            elseif H<0.5
                result(row,col) = 4;
            else
                result(row,col) = 5;
            end
            
        end
        
    end
end
filename='D:\text/hurst_trend_ΔLAI.tif';
geotiffwrite(filename,result,R,'GeoKeyDirectoryTag',info.GeoTIFFTags.GeoKeyDirectoryTag)


三、实验结果

逐像元计算Hurst指数和趋势率Slope的Matlab代码实现_第2张图片

参考文献

[1]朱鹏凡,刘刚,何敬等.近20年大别山区植被净初级生产力时空变化及驱动因素分析[J].长江科学院院报,2023,40(10):66-73+79.

[2]魏  岚,杨少海,邹献中,等.不同土壤调理剂对酸性土壤的改良 效 果[J].湖南农业大学学报(自然科学版),2010,36 (1): 77-81.

你可能感兴趣的:(算法)