Loren在Matlab的艺术上

将想法转化为matlab

到底什么是闰秒呢?

今天的帖子是从Mathworks开发团队成员的彼得珀金斯带到您的帖子。
在Matlab的一些时间和日期职能上工作,MathWorks的人有时会问我关于日历和计时的问题。通常它是这样的:1月初(或7月),我在午餐期间盯着我的手机,迷失了,“ 公告C. 刚刚发表!没有新的飞跃第二六月(或12月)!“然后在尴尬的沉默之后”不是 再次 “从之前听到这个消息的人看起来,有人新说:”无论如何,哈克是什么时候跳动了?“我没有专家,但我的标准答案开始,”所以,事实证明,它已经放慢了地球正在减速。“故事的其余部分遵循。
在此过程中,我将展示一些对处理时间序列数据有用的时间表和日期时间的用法。

所以,事实证明,地球正在放缓......但最近不是

在日常生活中,我们认为一天的长度是太阳回到天顶所需要的时间,换句话说,地球绕它的轴旋转一次。我们认为这是24小时,但事实上它是不同的(作为结果 开普勒的第二法 )与约30秒+季节的/ -21s因为地球轨道(开普勒第一定律)的偏心。这将是非常不方便的“天”的长度由这么多在一年的过程中发生变化,因为如果我们长期认为每一天,24 * 60 * 60 = 86400秒,再进行第二次的长度将需要在六月有所不同比12月,测量精确经过的时间是不可能的。在太阳日的长度那些季节性影响可以在一年来理顺,导致“平均太阳日”,其长度不超过一年不等。基于平均太阳日的时间系统,被称为“世界时”(UT)。
与UT的问题是,在除了由偏心轨道上的“几何效果”,地球的旋转速度不会随时间恒定的。其实,还有一个长期在旋转减缓由于与月亮潮汐相互作用,并估计天都不再由几个小时过去6亿年增长。还有一个短期部件,更小的但在相反的方向,被认为是由于在近千年大陆冰盖的融化。从历史上看,放缓的旋转意味着一个太阳日的长度减少了大约1.4-1.7每一个世纪毫秒平均增加。也有季节性的周期,且不可预测的波动,由于地质事件等原因造成的。在几十年的秩序,甚至是长度上的任何时期 的意思是 太阳日可以增加,减少,或两者。
为了科学目的,第二次在19世纪的定义 一个平均太阳日的1/86400 ,但如果每天随时间波动的长度,什么是第二实际上等于?这个定义是根据收集的18和19世纪,有效利用平均太阳日从1820年左右,但即使是在19世纪后期人们认识到,当时的平均太阳日比86400秒稍长的天文数据。由1940年和1950的石英和原子钟由在地球的旋转速度的变化更加明显,并导致 更精确的定义 一个国际单位系统的长度(SI)第二。没有惊神,地球的旋转不关注这一点,平均太阳日的长度继续在20世纪上下波动。近几十年来,它主要是超过86400年的1-3毫秒。这种差异被称为“多余的一天(LOD)”,并发布 国际地球自转服务
文件=“https://datacenter.iers.org/data/latestVersion/EOP_14_C04_IAU2000A_one_file_1962-now.txt”;
IERSdata = readtable(文件,“NumHeaderLines”14);
iersdata.properties.variablenames([4 8])= [“mjd”“translod”];
IERSdata.Date =日期时间(IERSdata.MJD,“ConvertFrom”“mjd”);%修改朱利安日期 - > datetime
iersdata.excesslod =秒(iersdata.excesslod);
IERSdata = table2timetable (IERSdata (:,“日期”“transllod”]));
plot(iersdata.date,iersdata.excesslod,“b -”);
ylabel (“超额LOD”);

好的,肯定,但是什么闰秒,无论如何?

几个额外的女士似乎不重要,但多余的洛杉矶积累了。定义为86400 si秒的时钟,在地球的旋转方面有效地运行,每天都在偏离太阳的时间。例如,当天6月21日在其Zenith的时钟的一天的时间将在每年晚些时候读数几十次。仍然是自1960年代以来的超额洛杉矶的总结,换档已经不到一分钟,甚至没有每天用途,所以谁关心?
iersdata.cumulatialelod = [0;CuMsum(IERSDATA.excesslod(1:end-1))];
stackedplot (IERSdata [“超越”“CumulativeLod”]);
但在几个世纪的历程,积累过剩的LOD可能加起来到中午的阳光会明显不再出现了顶峰点附近。换句话说,报时以每天86400 SI秒会从身体的体验,即UT渐行渐远。,这被视为一个问题,尽管有明显的事实是,在太阳的位置在中午在不同在同一个城市的时区,甚至标准时间和夏令时之间的“两端”城市之间的差异,远远大于转变过去的一个世纪。此前1972年, 各种临时调整 与UT同步,保持民间计时或多或少。到1972年, 当前版本的时间系统 颁布了称为协调的通用时间(UTC),它使用由原子钟定义的86400秒,但偶尔插入额外的“闰秒”调整以使UTC与UT同步( UT1. , 更确切地说)。这一想法是,由于86400S对于地球旋转有点太短,UTC时钟相对于太阳开销运行得太快,因此您只需通过使其缩小额外的第二次缩小速度等一下。地球的旋转也可能在短期内加速,也有点达到86400 在这种情况下,闰秒可能最终需要 删除了 。到目前为止,从未发生过;更多关于以下。
地球的自转是如此不可预测,以至于 IERS提前六个月宣布闰秒 ,1月和7月。这个特定的时机使得它是一个争夺,以便将最新信息获取到MATLAB的每个版本中。我们尝试(检查第二个输出 迈出六世 功能)。

等一下!

UTC的当前定义在1972年1月1日至1972年午夜开始采用,因此我将仅选择1971年后的数据。
IERSdata1972 = IERSdata(TIMERANGE(“1-1月1972年”,天道酬勤)“ExcessLOD”);
1960年期间,民间报时作出的临时调整的意思是UTC从UT1相差约45毫秒的1月 - 1972年。但是,如果没有闰秒调整,1972年以后,积累了过多的LOD会造成UTC从UT1多年来渐行渐远。到2017年,该差异将增长到约26秒。
DiffUT1_1972 =秒(0.0454859);
IERSDATA1972.UNADJDIFF =差异1_1972 + [0;CuMsum(IERSDATA1972.EXCESSLOD(1:结束1))];
IERSdata1972(TIMERANGE(“2016年29〜12月”“2017年4月4日”),:)
ans =. 6×2时间表
日期 过度 unadjdiff
1 2016年12月29日 - 2016年 0.0008055秒 26.402秒
2 2016年30月30日 0.0008525秒 26.402秒
3. 2016年- 12月31日 0.0009173秒 26.403秒
4. 2017年1月01日 0.001016秒 26.404秒
5. 02 - 1月- 2017 0.0011845秒 26.405秒
6. 03-1月 - 2017年 0.0013554秒 26.406秒
这种不断增长的差异正是闰秒的目的所在。的 迈出六世 函数枚举自1972年以来已经发生的每个“闰秒事件”。返回的时间表 迈出六世 包含时间戳和对事件的描述(到目前为止,所有闰秒都是“正”插入,而不是“否定”删除),以及累计速度的闰秒,达到和包括事件。
lsEvents = leapseconds ()
lsEvents = 27×2时间表
日期 类型 CumulativeAdjustment
1 1972年- 6月30日 + 1秒
2 1972年3月31日 - 1972年 + 2秒
3. 1973年3月31日 - 1973年 + 3秒
4. 1974年3月31日 - 12月31日 + 4秒
5. 1975年3月31日 - 1975年 + 5秒
6. 1976年3月31日 - 12月31日 + 6秒
7. 1977年3月31日 - 12月31日 + 7秒
8. 1978年3月31日 - 1978年 + 8秒
9. 1979年3月31日 - 1979年 + 9秒
10. 1981年- 6月30日 + 10秒
11. 1982年- 6月30日 + 11秒
12. 1983年- 6月30日 + 12秒
13. 1985年- 6月30日 + 13秒
14. 1987年3月31日 - 1987年 + 14秒
使用闰秒时间戳来索引包含LOD数据的时间表,我会添加什么UTC和UT1之间的差异未调整会一直在每这些瞬间的没有被插入闰秒。
lsEvents。UnadjDiff = IERSdata1972.UnadjDiff (lsEvents.Date)
lsEvents = 27×3时间表
日期 类型 CumulativeAdjustment unadjdiff
1 1972年- 6月30日 + 1秒 0.63494秒
2 1972年3月31日 - 1972年 + 2秒 1.1864秒
3. 1973年3月31日 - 1973年 + 3秒 2.2976秒
4. 1974年3月31日 - 12月31日 + 4秒 3.289秒
5. 1975年3月31日 - 1975年 + 5秒 4.2718秒
6. 1976年3月31日 - 12月31日 + 6秒 5.3334秒
7. 1977年3月31日 - 12月31日 + 7秒 6.3469秒
8. 1978年3月31日 - 1978年 + 8秒 7.398秒
9. 1979年3月31日 - 1979年 + 9秒 8.3526秒
10. 1981年- 6月30日 + 10秒 9.6281秒
11. 1982年- 6月30日 + 11秒 10.389秒
12. 1983年- 6月30日 + 12秒 11.249秒
13. 1985年- 6月30日 + 13秒 12.451秒
14. 1987年3月31日 - 1987年 + 14秒 13.634秒
在每个闰秒事​​件中查看未调整的差异,显然只要多余的LOD累积大约一个额外的秒,就会插入闰秒。绘制LED秒作为覆盖在LOD数据上的点,请确认在视觉上。
plot(iersdata1972.date,iersdata1972.unadjdiff);
ylabel (“累计超额LOD”);
抓住
plot(lsevents.date,iersdata1972.unadjdiff(lsevents.date),“r。”);
抓住离开

为什么闰秒工作

每一闰秒都是在特定时间发生的瞬间事件。另一种表示它们的方法是将变量附加到LOD数据中,表示任意给定日期的累计闰秒之和。闰秒发生在一天的结束,所以首先给每个事件的日期之后的一天分配1秒的值…
IERSdata1972.Adjustment (lsEvents.Date + caldays(1)) =秒(1);
IERSdata1972(TIMERANGE(“2016年29〜12月”“2017年4月4日”),:)
ans =. 6×3时间表
日期 过度 unadjdiff 调整
1 2016年12月29日 - 2016年 0.0008055秒 26.402秒 0秒
2 2016年30月30日 0.0008525秒 26.402秒 0秒
3. 2016年- 12月31日 0.0009173秒 26.403秒 0秒
4. 2017年1月01日 0.001016秒 26.404秒 1秒
5. 02 - 1月- 2017 0.0011845秒 26.405秒 0秒
6. 03-1月 - 2017年 0.0013554秒 26.406秒 0秒
...然后使用累积的总和来填写 调整 在数据中的所有其他时间。
iersdata1972.adjustment = cumsum(iersdata1972.adjustment);
IERSdata1972(TIMERANGE(“2016年29〜12月”“2017年4月4日”),:)
ans =. 6×3时间表
日期 过度 unadjdiff 调整
1 2016年12月29日 - 2016年 0.0008055秒 26.402秒 26秒
2 2016年30月30日 0.0008525秒 26.402秒 26秒
3. 2016年- 12月31日 0.0009173秒 26.403秒 26秒
4. 2017年1月01日 0.001016秒 26.404秒 27秒
5. 02 - 1月- 2017 0.0011845秒 26.405秒 27秒
6. 03-1月 - 2017年 0.0013554秒 26.406秒 27秒
在数据中每次都定义该新变量,因此它可以用于计算UTC和UT1之间的实际差,给定所有闰秒调整,从而从上面计算的不调整差异减去它。按照惯例,它计算为UT1-UTC,具有相反的符号,正如我们已被调用的不调整差异,并表示为DUT1。
iersdata1972.dut1 = - (iersdata1972.unadjdiff - iersdata1972.adjustment);
IERSdata1972(TIMERANGE(“2016年29〜12月”“2017年4月4日”),:)
ans =. 6×4时间表
日期 过度 unadjdiff 调整 DUT1
1 2016年12月29日 - 2016年 0.0008055秒 26.402秒 26秒 -0.40159秒
2 2016年30月30日 0.0008525秒 26.402秒 26秒 -0.40239秒
3. 2016年- 12月31日 0.0009173秒 26.403秒 26秒 -0.40324秒
4. 2017年1月01日 0.001016秒 26.404秒 27秒 0.59584秒
5. 02 - 1月- 2017 0.0011845秒 26.405秒 27秒 0.59482秒
6. 03-1月 - 2017年 0.0013554秒 26.406秒 27秒 0.59364秒
闰秒调整旨在与UT1粗略地保持UTC。绘图 调整 随着时间的推移,作为分段 - 常数阶跃功能说明了调整工作原理:步进功能大致近似于累积的多余床,因此减去它保持DUT1小。沿同一时间轴绘制DUT1确认调整保持不到1秒的差异。
stackedplot(iersdata1972,{[“UnadjDiff”“调整”]“dut1”});

上空时间

闰秒仅在需要时插入。看着上面的一些数字,似乎自1972年以来闰秒之间的平均时间一直在增加。计算每个十年后的事件数量。
十年=离散化(Lsevents.date,“十年”“分类”);
直方图(十年);
要了解为什么,我们将返回多余的LOD数据。
自1960年代以来,在短期内过多的LOD减少了几个时期。平滑原始LOD数据使得更容易看到本地行为。
IERSdata.SmoothedELOD = smoothdata(秒(IERSdata.ExcessLOD),“黄土”“smoothingfactor”,.4);
plot(iersdata.date,iersdata.excesslod,“b -”);
抓住
情节(IERSdata.Date IERSdata.SmoothedELOD,“G-”“行宽”,2);
抓住离开
ylabel (“超额LOD”);
从平滑的数据中,识别短期趋势改变方向的峰值和槽,并获得每一个平滑多余床的日期和值。
峰=查找(islocalmax(IERSdata.SmoothedELOD));
波谷=找到(islocalmin (IERSdata.SmoothedELOD));
date = iersdata.date([peaks; troughs]);
值= IERSdata.SmoothedELOD((波峰、波谷));
接下来,我将创建一个包含高峰/低谷事件的时间表,并在情节中标记每个高峰/低谷事件。时间表的每一行都包含事件日期、事件类型和该事件的超额LOD值。
类型=分类([零(大小(峰值));(大小(槽)),[0 1],[“峰值”“trough”]);
extremaEvents = Sortrows(时间表(日期,类型,值))
extremaEvents = 9×2时间表
日期 类型 价值
1 24 - 1972年7月24日 顶峰 0.0030
2 31-7月 - 1975年 0.0028
3. 25军,1977年 顶峰 0.0029
4. 22 - 1987年1月 0.0013
5. 10-NOV-1993 顶峰 0.0023
6. 11月20 - - 2003 0.0003
7. 10-Feb-2008 顶峰 0.0009
8. 2010年7月25日 0.0007
9. 2015年28亿八二十五年 顶峰 0.0012
抓住
isPeak = (extremaEvents。类型= =“顶峰”);
情节(extremaEvents.Date (isPeak) extremaEvents.Value (isPeak),“y ^”“MarkerfaceColor”“y”);
绘图(extremaevents.date(〜ispeak),极值vents.value(〜ispeak),“yv”“MarkerfaceColor”“y”);
抓住离开
以上是单个日期的多余植物的曲线,并且具有平滑的版本,大致跟踪年平均值。它所说的是,一年中平均的日长度变得大约等于,甚至 略低于 86400年代过去两年,这意味着差异UTC-UT1实际上是平坦的或萎缩,而不是成长。前面所示的累积多余睡眠的曲线表明它已经升级了。这解释了为什么自2016年12月以来,为什么没有积极的闰秒增加。萎缩的UTC-UT1提出了一个 “闰秒”最终还是需要的。还没有,耐心等待,但如果这种趋势继续下去,可以想象,多余的LOD会在几年内累积接近-1和负闰秒 然后根据UTC的定义是必要的。这从未发生过,可能会导致很多软件困惑(Matlab不会被混淆)。负闰秒可能是动机 终于放弃闰秒 。然而,许多专家认为,这种趋势不会继续,而且只是一个周期的一部分。
这个数字有很多事情。有多余的LOD(基本上太阳日长),它的斜率(日期长度如何变化),其积分(UTC和UT1之间的差异)。

与时间赛跑

从峰到槽,多余的睡腰正在减少,这意味着地球的旋转正在加速。我将存储在表中的这些减少句点的开始和结束。最后一个峰值没有匹配的槽;我将在最后一次使用数据中的最后一次作为最后一个间隔的结束时间。
startdate = iersdata.date(峰值);
enddate = [iersdata.date(槽);iersdata.date(结束)];
decureatevents = table(startdate,enddate)
减少= 5×2表
StartDate可以 结束日期
1 24 - 1972年7月24日 31-7月 - 1975年
2 25军,1977年 22 - 1987年1月
3. 10-NOV-1993 11月20 - - 2003
4. 10-Feb-2008 2010年7月25日
5. 2015年28亿八二十五年 06年4月 - 2021
抓住
(decreasingEvents startEnd =。StartDate可以decreasingEvents。结束日期];
h = fill(startEnd(:,[1 2 2 1]),[-。002 -。0.0.2。0.0.5.。0.0.5.]那“红色”“Facealpha”2,“linestyle”“没有任何”);
抓住离开
最后,我将计算每个间隔期间超额LOD的平均减少量(以每年“每日超额LOD的秒数”为单位),并将该信息添加到表中的间隔事件中。
dTime = decreasingEvents。结束日期- decreasingEvents.StartDate;
dexcess = iersdata.smoothedelod(deceureatevents.enddate) - iersdata.smoothedelod(deceureatevents.startdate);
decreasingEvents。annualavgreduce = seconds(dExcess ./ years(dTime))
减少= 5×3表
StartDate可以 结束日期 无检
1 24 - 1972年7月24日 31-7月 - 1975年 -8.6974 e-05秒
2 25军,1977年 22 - 1987年1月 -0.00016705秒
3. 10-NOV-1993 11月20 - - 2003 -0.0001993秒
4. 10-Feb-2008 2010年7月25日 -5.6298 e-05秒
5. 2015年28亿八二十五年 06年4月 - 2021 -0.00030701秒
换句话说,平均的太阳日,在整整一年中平均,在过去几年中一直在减少约0.3毫秒。正如我们在上面所看到的那样,目前非常接近86400岁。如果最近的减少持续,并且从现在开始的一年的太阳日为0.3毫秒,小于86400,这意味着负多余的LOD将在一年的十分之次累积。但是,在那次下,它将在需要消极的闰之前接近十年。

刻不容缓

将地球停止加速?从长远来看,是的。你不能战胜潮汐相互作用。
在近年来,当原始多余的LOD显着消极时,在很短的时间内都有很短的时间,相对而言。这些只是短暂的波动,但在这些时期,地球旋转多达1.5ms 快点 超过86400秒。
plot(iersdata.date,iersdata.excesslod,“b -”);
ylabel (“超额LOD”);
抓住
线(IERSdata.Date([1个端]),[0 0],“颜色”“K”“linestyle”“:”
抓住离开
ylabel (“超额LOD”);
我将确定多年的多年,其中多个日子在任何一天少于-0.5ms,发现每年的每个年份的最小洛泊,并创建一个最小值的表。
negLOD = IERSdata (IERSdata。过度< milliseconds(-0.5),“ExcessLOD”);
groupsummary (negLOD“日期”“年”“分钟”
ans =. 11×3表
year_Date GroupCount min_ExcessLOD
1 2001年 8. -0.0007064秒
2 2002年 13. -0.0007436秒
3. 2003年 31. -0.0009769秒
4. 2004年 29. -0.0010672秒
5. 2005年 25. -0.0010809秒
6. 2007年 4. -0.0006192秒
7. 2010年 12. -0.000784秒
8. 2018年 6. -0.0006457秒
9. 2019年 19. -0.0009571秒
10. 2020. 88. -0.0014663秒
11. 2021. 11. -0.0007026秒
那么明年将发生什么事?闰秒仅提前六个月宣布的原因是,因为它难以预测地球的转速变化,以任何准确性。但虽然 IERS. 他们没有预测未来过多的洛杉矶,他们会这样做 发布DUT1预测 出去一年。
t = readtable(“https://datacenter.iers.org/data/latestVersion/finals.all.iau2000.txt”);
t = t(:,[3 10 12]);
t.properties.variablenames = [“日期”“dut1”“lod”];
t.date = datetime(t.date,“ConvertFrom”“mjd”);
t.dut1 =秒(t.dut1);
T.LOD =毫秒(T.LOD);
t = t(t.date> =“1 - 1月- 2020”:)
t = 908×3表
日期 DUT1 l
1 01-1月20日 -0.17716秒 0.0004379秒
2 02 - 1月- 2020 -0.17763秒 0.0004915秒
3. 03-1月20日 -0.17811秒 0.0004743秒
4. 04 -简- 2020 -0.17859秒 0.0004946秒
5. 05-1月20日 -0.17908秒 0.0004482秒
6. 06 - 1月- 2020 -0.17943秒 0.0002298秒
7. 07 - 1月- 2020 -0.17955秒 4.14E-05秒
8. 08-1N-2020 -0.17953秒 -8.77e-05秒
9. 09-1月20日 -0.17938秒 -0.0002198秒
10. 10-Jan-2020 -0.17912秒 -0.0002715秒
11. 11 - 1月- 2020 -0.17888秒 -0.0001832秒
12. 12-Jan-2020 -0.17879秒 2.29e-05秒
13. 13-1月20日 -0.17894秒 0.0002682秒
14. 14-1月20日 -0.17933秒 0.0005166秒
预测= (t.Date >=“1 - 4月 - 2021”);
绘图(t.date(〜预测),t.dut1(〜预测),'B'...
T.Date(预测),T.Dut1(预测),'r');
ylabel (“dut1”
传奇([“实际”“预测”],“地点”“西北”
请记住,DUT1为UT1-UTC,当DUT1小于0.5s时将增加正闰秒。从过去一年的斜率可以看出,太阳日长度先是大于86400秒,然后小于86400秒,最后大致等于86400秒。下一年的斜率预测太阳日长度将小于86400秒,然后等于86400秒,然后大于86400秒。如果正确,这意味着……一段时间内没有闰秒,消极或积极!在接下来的几年里,关注这个问题将会很有趣。如果自1970年以来的模式继续,则为负闰秒 需要,但问题是:当最近几个十二年周期的一部分后,洛氏多余的洛杉矶会再次出现,或者继续降低2015年以来

阅读时间

我对时间系统和闰秒的大部分了解都来自于此 这些非常全面的页面 史蒂夫艾伦在 UCO /利克天文台 。UTC历史和闰秒的其他非常可读的帐户 莱文 麦卡锡 奎因 , 和 纳尔逊等人

有时间包装

当你计算跨越一个或多个闰秒的两个瞬间之间的差值时,闰秒就会显得很丑。在MATLAB中,你可以选择使用闰秒 约会时间 计算通过使用 UTCLeapSeconds 要创建数据时:
datetime(2016, 12日31,36岁,0,0,“时区”“utcleapseconds”31) - datetime(2016年,12日,12日,0,0,“时区”“utcleapseconds”
ans =.期间24:00:01
但是,我们发现大多数人都会很生气,显然是随意的额外第二次匍匐,所以如果没有明确要求闰秒会计,你会看到
datetime(2016, 12日31,36岁,0,0,“时区”“世界标准时间”31) - datetime(2016年,12日,12日,0,0,“时区”“世界标准时间”
ans =.期间24:00:00.
其他时区也一样,比如 美国/ New_York 。(我们还发现,许多人每年发现两次额外的小时或缺少小时令人讨厌,因此您还必须使用时区选择夏令时。)
你的工作在计算中需要闰秒吗?你用过闰秒吗 UTCLeapSeconds ?或者你只是发现他们烦人?闰秒应该被遗弃吗?与UTC不同,GPS时间系统不会插入闰秒,因此它是一个“统一”时间系统,但每次插入闰秒时,从UTC发出1S的发散。您的工作是否使用GPS时间?让我们知道你的matlab时间经历(困难?) 在这里
|
  • 打印
  • 发电子邮件

评论

要留下评论,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。