detrend3文档

detrend3沿矩阵的第三维执行线性最小二乘去趋势。

参见:趋势

回到气候数据工具内容

内容

语法

Ad = detrend3(A) Ad = detrend3(A,t) Ad = detrend3(…,'omitnan')

描述

Ad = detrend3(A)的第三维中去除线性趋势一个假设切片一个以恒定的间隔进行采样。

Ad = detrend3(A,t)指定时间t与a的每个切片有关t不需要在固定的时间间隔发生。

Ad = detren3(…,'omitnan')甚至在包含的网格单元格中应用去趋势值。如果许多网格单元格包含虚假的nan,您可能会发现此选项比默认选项慢。

例1:3D网格数据集

这个样本数据集到处都有3.2个单位/时间步长的趋势:

T = 50:50:1000;Y = 3.2*t + 0.1*randn(size(t));%趋势为3.2*t(加上一些随机噪声)%创建5x5网格w/趋势由y决定:Z = expand3(ones(5),y);

这是通过趋势趋势函数:

趋势(Z, t)
Ans = 3.2000 3.2000 3.2000 3.2000 3.2000 3.2000 3.2000 3.2000 3.2000 3.2000 3.2000 3.2000 3.2000 3.2000 3.2000 3.2000 3.2000 3.2000 3.2000 3.2000 3.2000 3.2000 3.2000 3.2000 3.2000 3.2000 3.2000 3.2000

现在让我们看看趋势:

z_dettrend = detrend3(Z,t);

现在的趋势是什么?

趋势(Z_detrend t)
Ans = 1.0e-14 * -0.2212 -0.2212 -0.2212 -0.2212 -0.2212 -0.2212 -0.2212 -0.2212 -0.2212 -0.2212 -0.2212 -0.2212 -0.2212 -0.2212 -0.2212 -0.2212 -0.2212 -0.2212 -0.2212 -0.2212 -0.2212 -0.2212 -0.2212 -0.2212 -0.2212 -0.2212 -0.2212

只是数值噪声(注意它是0到1.0e-14的水平)。

例2:海面温度

这个例子计算了一个区域平均海面温度异常从网格时间序列,然后去趋势网格化海表温度时间序列,绘制去趋势异常时间序列。

首先加载示例pacific_sst。每月sst的mat数据集。使用cdtarea得到每个网格单元的面积,然后使用当地的得到所有海洋网格单元面积加权sst的一维时间序列。

加载示例数据:负载pacific_sst%将lat,lon数组转换为网格:[Lon,Lat] =网格(Lon,Lat);获取每个网格单元的面积(m^2):A = cdtarea(Lat,Lon);每个网格单元面积的% (m^2)%只做有限数据的掩码(有效地忽略土地)掩码= all(isfinite(sst),3);得到面积加权sst的1D时间序列:Sst_1 = local(sst,mask,“重量”,);

现在绘制面积加权海温异常异常函数。为上下文,绘制线性趋势polyplot

图异常(t,sst_1-mean(sst_1))轴datetick (“x”“keeplimits”) ntitle (“海面温度异常(非去趋势)”)举行polyplot (t, sst_1-mean (sst_1), 1,“k”“线宽”3)

现在对整个3D sst数据集进行去趋势化,并绘制相同的面积平均时间序列,但这次使用去趋势数据:

%全3d时间序列去趋势:Sst_dt = detrend3(sst);得到面积平均无趋势海温时间序列:Sst_dt_1 = local(sst_dt,mask,“重量”,);图异常(t,sst_dt_1-mean(sst_dt_1))轴datetick (“x”“keeplimits”) ntitle (“非趋势海温异常”)举行polyplot (t, sst_dt_1-mean (sst_dt_1), 1,“k”“线宽”3)

例3:'omitnan'选项

在某些情况下,网格化数据集可能包含虚假的nan。这就是我们在上面示例中分析的sst数据集的情况。对于802个月的海表温度数据,看看有多少值是有限的:

图imagescn(lon,lat,sum(isfinite(sst),3)) cb = colorbar;ylabel (cb、有限数据值的数目)的士([700 802])%设置颜色轴限制

在上图中,我们来看看加拿大的哈德逊湾。您会注意到,并非所有802个月都有有效数据。多达100个月的数据缺失,因为在冬季的几个月里,当冰破坏测量时,很难获得良好的海表温度读数。不过,您可能需要从可用数据中删除长期趋势。

下面是sst数据集去趋势的比较“omitnan”选择。首先使用趋势函数,简单地评估趋势的大小:

图subplot(1,2,1) imagescn(lon,lat,trend(sst,12)) cb = colorbar(“位置”“southoutside”);包含(cb、“海温趋势\circC/年”)标题“没有omitnan的趋势”Caxis ([-0.04 0.04])“平衡”) subplot(1,2,2) imagescn(lon,lat,trend(sst,12,“omitnan”)) cb = colorbar(“位置”“southoutside”);包含(cb、“海温趋势\circC/年”)标题“潮流与omitnan”Caxis ([-0.04 0.04])“平衡”

在上图中,请注意加拿大哈德逊湾的差异。

去趋势也是一样的。我们将对每个数据集进行去趋势化,然后像上面那样绘制去趋势数据集的趋势图:

Sst_dt = detrend3(sst);Sst_dt_o = detrend3(sst,“omitnan”);图subplot(1,2,1) imagescn(lon,lat,trend(sst_dt,12)) cb = colorbar(“位置”“southoutside”);包含(cb、“海温趋势\circC/年”) caxis([-0.000000000000001 0.000000000000001])“平衡”)标题“没有omitnan的去趋势”次要情节(1、2、2)imagescn(经度、纬度、趋势(sst_dt_o 12“omitnan”)) cb = colorbar(“位置”“southoutside”);包含(cb、“海温趋势\circC/年”) caxis([-0.000000000000001 0.000000000000001])“平衡”)标题“与omitnan的去趋势”

现在,去趋势数据集中唯一的“趋势”是数值噪声(注意颜色尺度的1x10^-15限制)。

作者信息

这个函数是气候数据工具箱Matlab.函数和支持文档由Chad A. G万博1manbetxreene编写。