enso文档

enso计算尼诺3.4海温指数的一个版本。

回到气候数据工具内容

内容

语法

idx = enso(sst,t) idx = enso(sst,t,lat,lon) idx = enso(sst,t,lat,lon,'region',NinoRegion) idx = enso(sst,t,mask) idx = enso(…,'smoothing',months)

描述

Idx = enso(sst,t)计算厄尔尼诺南方涛动指数从一个时间序列的海洋表面温度sst及其相应的时间t.sst可以是在感兴趣的区域平均的海洋表面温度的矢量,也可以是三维矩阵,其第三维对应于时间t.如果sst是一个3D矩阵,则通过对每个时间步中sst中的所有网格单元进行平均,自动生成一个时间序列。

Idx = enso(sst,t,lat,lon)计算尼诺3.4指数的3D风场时间序列和相应的网格坐标纬度、经度.使用此语法,将自动确定Nino 3.4区域内的网格单元格,并根据该区域内sst的面积平均时间序列计算Nino指数。

idx = enso(sst,t,lat,lon,'region',NinoRegion)允许以下任何Nino区域,以字符串形式输入(在'单引号'中)

Idx = enso(sst,t,mask)使用二维逻辑中对应于真值的sst网格单元的未加权平均值计算sst指数面具

Idx = enso(…,'smoothing',months)以月为单位定义移动平均窗口。默认值为5,继1997年Trenberth之后。唯一的例外是ONI区域,它有一个平滑窗口3.个月。要关闭平均,请设置“平滑”,假的

例1:Automatic Nino 3.4

对于本例,使用每月pacific_sst计算Nino 3.4指数。mat数据集与CDT。首先加载数据,然后enso函数中每个网格单元对应的地理坐标风场数据集,所以使用meshgrid为了得到纬度、经度我们称之为二维网格的数组纬度、经度

负载pacific_sst.mat从lat,lon数组中获取2D网格:[Lon,Lat] =网格(Lon,Lat);

最简单的使用方法enso函数是进入3D风场数据,对应的时间t,网格单元格坐标,如下所示:

idx = enso(sst,t,Lat,Lon);

把它画好

有了这些,我们现在可以绘制尼诺3.4异常。我们将使用异常阈值为+/- 0.4度的函数,分别识别El Nino和La Nina周期:

图异常(t idx“打”[-0.4 - 0.4]);轴线(0,“k”%在0处放置一条水平线datetick (“x”“keeplimits”) ylabel“尼诺3.4海温异常(\circC)”

讲一点背景知识

来了解更多的背景知识,并理解enso函数所做的,这是来自pacific_sst数据集的平均海面温度,用imagescn并且使用cmoceancolormap:

figure imagescn(Lon,Lat,mean(sst,3)) cmoocean

默认情况下enso函数计算尼诺指数使用尼诺3.4框(5N-5S;170 w - 120 w)。以下是地图上的尼诺3.4地区:

定义Nino 3.4框:Latv = [-5 -5 5 5 -5];Lonv = [-170 -120 -120 -170 -170];绘制尼诺3.4方框:持有情节(lonv latv,“k -”“线宽”2)文本(-170 5“尼诺3.4盒子!”“绿色”“底”“fontangle”“斜体”

如果您想在默认的Nino 3.4区域以外的地区探索尼诺指数,请继续阅读…

例2:手动方法

默认情况下,enso函数计算尼诺3.4框内的面积加权平均海面温度,然后使用deseason去除季节周期。将均值从经过剔除的时间序列中去除,得到ENSO异常,然后进行平滑处理scatstat1作为一个移动平均滤波器。的enso函数允许您覆盖尼诺计算的大部分步骤,或根据您的喜好设置它们。属性的自定义使用示例如下enso函数。

界定尼诺区

要使用一个预定义的尼诺区域,而不是默认的“3.4”,简单地像这样指定它:

idx3 = enso(sst,t,Lat,Lon,“地区”“3”);

循环所有预定义的尼诺区域进行比较:

列出预定义的区域:区域= {“1 + 2”“3”“3.4”“4”“ONI”};图保存遍历每个区域,计算其尼诺指数,并绘制:k = 1:长度(区域)tmp = enso(sst,t,Lat,Lon,“地区”、地区{k});情节(t, tmp)结束datetick (“x”“keeplimits”)箱传奇(地区)

假设你提出了一个更好的区域来描述厄尔尼诺和拉尼娜现象。这是整个区域,从南纬20度到北纬20度,从西经170度到西经110度,但只是在网格单元的纬度和经度负半度能被3整除的地方。使用geomask以确定哪些网格单元格位于该区域内并使用国防部找出哪些网格单元格(负0.5度)能被3整除。下面是面具的样子:

mask = geomask(Lat,Lon,[-20 20],[-170 -110])...& mod(la -0.5,3)==0 & mod(Lon-0.5,3)==0;figure imagescn(Lon,Lat,掩码)边界

如果你想要一个未加权的尼诺指数的区域显示为黄色细胞在蒙版上面,这样做:

Idx = enso(sst,t,mask);图异常(t,idx)轴datetick (“x”“keepticks”)标题“我的假尼诺指数”

考虑到你的蒙版中的网格单元在全球使用的表面积上并不都是相等的cdtarea若要获取每个网格单元格的面积,则使用当地的要获得掩模内海洋表面温度的面积加权时间序列:

获取每个网格单元的面积:A = cdtarea(Lat,Lon);在Nino 3.4框中获取面积加权时间序列:Sst_myregion = local(sst,mask,“重量”,);

现在sst_myregion是一个802x1的区域平均海面温度数组在你的掩模,它可以直接输入enso函数将其转换为索引:

Idx_myregion = enso(sst_myregion,t);

将面积加权指数绘制在未加权异常图的顶部,你会发现它们非常相似。下面是我们在上面创建的异常图上方绘制的加权版本的蓝线:

持有情节(t, idx_myregion“b”

在计算掩码内的平均sst时,我们是否考虑网格单元尺寸,在这里似乎不太重要。这是因为这些网格单元都在靠近赤道的相对狭窄的纬度范围内,那里的网格单元都是相同的大小。

例3:重现Trenberth 1997

在本例中,我们将重现Trenberth 1997年的经典论文《厄尔尼诺的定义》(The Definition of El Nino)中的图1。1997),描绘了根据太平洋海面温度计算的ENSO指数。

我们将使用与上面示例相同的pacific_sst数据集。首先,计算尼诺3和尼诺3.4指数:

idx_3 = enso(sst,t,Lat,Lon,“地区”“3”);idx_34 = enso(sst,t,Lat,Lon,“地区”“3.4”);

现在重新创建Trenberth图1的两个子图,使用subsubplot

图subsubplot(2,1,1)异常(t,idx_3,“高级”rgb (“木炭”),...“底”rgb (“灰色”),“打”[-0.5 - 0.5]);线([-0.5 - 0.5],凯西:”)线(0,“k”“线宽”,1) xlim(datenum([1950 1997.5],1,1)) ylim([-2 3]) ntitle('尼诺3区(阈值= 0.5\circC) '“位置”“西北”) subsubplot(2,1,2)异常(t,idx_34,“高级”rgb (“木炭”),...“底”rgb (“灰色”),“打”[-0.4 - 0.4]);线([-0.4 - 0.4],凯西:”)线(0,“k”“线宽”,1) xlim(datenum([1950 1997.5],1,1)) ylim([-2 3]) ntitle('尼诺3.4区域(阈值= 0.4\circC) '“位置”“西北”) datetick (“x”“keeplimits”)包含(“年”

参考文献

凯文·特伦伯斯;“厄尔尼诺的定义。”美国气象学会通报78.12(1997):2771-2778。3 c2771: https://doi.org/10.1175/1520 - 0477 (1997) 078% TDOENO % 3 e2.0.co; 2

作者信息

enso函数和支持文档由金宝appThirumalai < http://www.kaustubh.info>,查德·a·格林查看Matlab气候数据工具箱,2019年。