Main Content

本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

synchronize

将时间表与公共时间向量同步,并对输入时间表中的数据进行重采样或聚合。

说明

synchronize 函数收集所有输入时间表中的变量,将它们与公共时间向量同步,并返回单个时间表形式的结果。其作用与水平串联相似,但是输入时间表可能有不同的行时间。当 synchronize 函数将时间表变量同步到不同时间时,它还使用您指定的方法对变量中的数据进行重采样或聚合。

示例

TT = synchronize(TT1,TT2) 创建时间表 TT,它包含输入时间表 TT1TT2 中的所有变量,这些变量同步到由 TT1TT2 的行时间并集构成的行时间向量。TT 的行时间已排序,没有重复时间。

实际上,synchronize 水平串联 TT1TT2 的变量,即使它们的行时间不同也是如此。因此,只要 TT 满足以下条件,synchronize 就会在其中插入缺失数据指示符:

  • 仅具有来自 TT1 的行时间,而没有来自 TT2 的变量的相应数据。

  • 仅具有来自 TT2 的行时间,而没有来自 TT1 的变量的相应数据。

如果 TT1TT2 具有名称相同的变量,synchronize 会将它们重命名并将两个变量均复制到 TT 中。

要对不同的变量使用不同的方法在 TT 中插入或填入值,请指定每个输入时间表的 VariableContinuity 属性。有关详细信息,请参阅 使用不同的方法对时间表变量重设时间并进行同步

示例

TT = synchronize(TT1,TT2,newTimeBasis,method) 通过将来自 TT1TT2 的变量同步到 newTimeBasis 指定的新时间向量来创建 TTsynchronize 使用 method 指定的操作对来自 TT1TT2 中的变量数据进行重采样或聚合。输入参数 newTimeBasis 指定 synchronize 如何根据 TT1TT2 的行时间构造 TT 的行时间。

例如,如果 newTimeBasis'union'method'linear',则 TT 包含来自 TT1TT2 的行时间,并且 synchronize 使用线性插值将来自输入时间表的数据重采样到输出行时间。

示例

TT = synchronize(TT1,TT2,newTimeStep,method) 通过将 TT1TT2 中的变量同步到按 newTimeStep 指定的时间单位均匀间隔的新时间向量来创建 TT

例如,如果 newTimeStep'daily'method'mean',则 TT 包含间隔一天的行时间,并且 TT 包含来自 TT1TT2 的每个变量的每日均值。

示例

TT = synchronize(TT1,TT2,'regular',method,'TimeStep',dt) 使用时间步 dt 计算固定间隔的行时间。dt 是标量持续时间或日历持续时间。TT 的行时间跨越 TT1TT2 的行时间范围。

TT = synchronize(TT1,TT2,'regular',method,'SampleRate',Fs) 使用采样率 Fs 计算固定间隔的行时间。Fs 是一个正数值标量,用于指定每秒采样数 (Hz)。

示例

TT = synchronize(TT1,TT2,newTimes,method) 通过将 TT1TT2 中的变量同步到 newTimes(您指定的有序唯一时间的日期时间或持续时间向量)来创建 TTnewTimes 中的时间变成 TT 的行时间。

示例

TT = synchronize(TT1,TT2,newTimeBasis) 通过将 TT1TT2 中的变量同步到新时间向量来创建 TTsynchronizeTT 中需要的位置插入缺失数据指示符。

示例

TT = synchronize(TT1,TT2,newTimeStep) 通过将 TT1TT2 中的变量同步到按 newTimeStep 指定的时间单位均匀间隔的新时间向量来创建 TTsynchronize 函数在 TT 中需要的位置插入缺失数据指示符。

TT = synchronize(TT1,TT2,'regular','TimeStep',dt) 使用时间步 dt 计算固定间隔的行时间。dt 是标量持续时间或日历持续时间。TT 的行时间跨越 TT1TT2 的行时间范围。

TT = synchronize(TT1,TT2,'regular','SampleRate',Fs) 使用采样率 Fs 计算固定间隔的行时间。Fs 是一个正数值标量,用于指定每秒采样数 (Hz)。

TT = synchronize(TT1,TT2,newTimes) 通过将 TT1TT2 中的变量同步到时间向量 newTimes 来创建 TTsynchronize 函数在 TT 中需要的位置插入缺失数据指示符。

TT = synchronize(TT1,TT2,___,Name,Value) 将时间表与一个或多个 Name,Value 对组指定的其他选项进行同步。您可以将此语法与前面任何语法中的输入参数结合使用。

TT = synchronize(TT1,...,TTN,___) 通过同步 N 个时间表 TT1,...,TTN 来创建时间表 TT。您可以将此语法与前面任何语法中的输入参数结合使用。

示例

全部折叠

从文件中加载两个采样时间表。然后将它们的数据同步到新行时间的向量。

load smallTT

显示时间表。TT1 具有无序的行时间。TT1TT2 具有不同的变量。

TT1
TT1=3×1 timetable
            Time            Temp
    ____________________    ____

    18-Dec-2015 12:00:00    42.3
    18-Dec-2015 08:00:00    37.3
    18-Dec-2015 10:00:00    39.1

TT2
TT2=3×1 timetable
            Time            Pressure
    ____________________    ________

    18-Dec-2015 09:00:00      30.1  
    18-Dec-2015 11:00:00     30.03  
    18-Dec-2015 13:00:00      29.9  

同步 TT1TT2。输出时间表 TT 包含两个时间表中的所有行时间(按排序顺序)。在 TT 中,Temp 包含 NaN,表示行时间来自 TT2Pressure 包含 NaN,表示行时间来自 TT1

TT = synchronize(TT1,TT2)
TT=6×2 timetable
            Time            Temp    Pressure
    ____________________    ____    ________

    18-Dec-2015 08:00:00    37.3       NaN  
    18-Dec-2015 09:00:00     NaN      30.1  
    18-Dec-2015 10:00:00    39.1       NaN  
    18-Dec-2015 11:00:00     NaN     30.03  
    18-Dec-2015 12:00:00    42.3       NaN  
    18-Dec-2015 13:00:00     NaN      29.9  

加载包含天气测量值的两个采样时间表。将它们的数据同步到时间表中的行时间的并集。

load firstTT

显示时间表。

TT1
TT1=3×1 timetable
            Time            Temp
    ____________________    ____

    06-Jun-2016 15:00:00    79.7
    06-Jun-2016 16:00:00    76.3
    06-Jun-2016 17:00:00    74.9

TT2
TT2=4×1 timetable
            Time            Humidity
    ____________________    ________

    06-Jun-2016 14:35:48      49.7  
    06-Jun-2016 15:35:48      52.2  
    06-Jun-2016 16:35:48      56.7  
    06-Jun-2016 17:35:48        60  

同步这些时间表。要选择行时间的并集,请指定 'union'。要使用线性插值重采样 TT1.TempTT2.Humidity,请指定 'linear'

TT = synchronize(TT1,TT2,'union','linear')
TT=7×2 timetable
            Time             Temp     Humidity
    ____________________    ______    ________

    06-Jun-2016 14:35:48    81.071       49.7 
    06-Jun-2016 15:00:00      79.7     50.708 
    06-Jun-2016 15:35:48    77.671       52.2 
    06-Jun-2016 16:00:00      76.3     54.014 
    06-Jun-2016 16:35:48    75.464       56.7 
    06-Jun-2016 17:00:00      74.9      58.03 
    06-Jun-2016 17:35:48    74.064         60 

将两个时间表同步到新的行时间,这些行时间指定时间 bin,每个时间 bin 跨度为一天。将输入时间表中的数据聚合到每日时间 bin 中。

加载包含两组不同的环境测量值 indoorsoutdoors 的采样时间表。空气质量数据来自建筑物内部的传感器,而天气测量值来自外部传感器。时间表包括从 2015 年 11 月 15 日到 2015 年 11 月 19 日获取的测量值。

load indoors
load outdoors

显示每个时间表的前三行。它们不包含相同的行时间或变量。

indoors(1:3,:)
ans=3×2 timetable
           Time            Humidity    AirQuality
    ___________________    ________    __________

    2015-11-15 00:00:24       36           80    
    2015-11-15 01:13:35       36           80    
    2015-11-15 02:26:47       37           79    

outdoors(1:3,:)
ans=3×3 timetable
           Time            Humidity    TemperatureF    PressureHg
    ___________________    ________    ____________    __________

    2015-11-15 00:00:24        49          51.3          29.61   
    2015-11-15 01:30:24      48.9          51.5          29.61   
    2015-11-15 03:00:24      48.9          51.5          29.61   

使用 synchronize 函数将时间表中的数据聚合到每日时间 bin 中。指定 'daily' 可将数据聚合到时间 bin 中,每个 时间 bin 跨度为一天。指定 'mean' 可获取每个变量在每个时间 bin 中的均值。

TT = synchronize(indoors,outdoors,'daily','mean');
TT(1:3,:)
ans=3×5 timetable
           Time            Humidity_indoors    AirQuality    Humidity_outdoors    TemperatureF    PressureHg
    ___________________    ________________    __________    _________________    ____________    __________

    2015-11-15 00:00:00          36.5            80.05            48.931             51.394         29.607  
    2015-11-16 00:00:00         36.85            80.35            47.924             51.571         29.611  
    2015-11-17 00:00:00         36.85            79.45             48.45             51.238         29.613  

将两个包含天气测量结果的小型时间表同步到跨输入时间表中的行时间的一组规则行时间。将时间步指定为输出时间表中连续行时间之间的间隔。使用线性插值,对与输入时间表中的行时间不匹配的时间向量中的时间的数据进行重采样。

首先,加载两个时间表。

load indoors
load outdoors

显示每个时间表的前三行。它们不包含相同的行时间或变量。

indoors(1:3,:)
ans=3×2 timetable
           Time            Humidity    AirQuality
    ___________________    ________    __________

    2015-11-15 00:00:24       36           80    
    2015-11-15 01:13:35       36           80    
    2015-11-15 02:26:47       37           79    

outdoors(1:3,:)
ans=3×3 timetable
           Time            Humidity    TemperatureF    PressureHg
    ___________________    ________    ____________    __________

    2015-11-15 00:00:24        49          51.3          29.61   
    2015-11-15 01:30:24      48.9          51.5          29.61   
    2015-11-15 03:00:24      48.9          51.5          29.61   

使用 synchronize 函数将时间表中的数据聚合到宽度为 30 分钟的时间 bin 中。使用 'regular' 输入参数和 'TimeStep' 名称-值对组参数指定一个规则时间步。您可以使用这些参数创建一个不采用预定义时间步(例如 'hourly')的规则时间表。

TT = synchronize(indoors,outdoors,'regular','linear','TimeStep',minutes(30));
TT(1:3,:)
ans=3×5 timetable
           Time            Humidity_indoors    AirQuality    Humidity_outdoors    TemperatureF    PressureHg
    ___________________    ________________    __________    _________________    ____________    __________

    2015-11-15 00:00:00           36               80                 49             51.299         29.61   
    2015-11-15 00:30:00           36               80             48.967             51.366         29.61   
    2015-11-15 01:00:00           36               80             48.934             51.432         29.61   

将两个具有天气测量值的较小时间表同步到任意时间向量。使用线性插值,对与输入时间表中的行时间不匹配的时间向量中的时间的数据进行重采样。

加载两个较小的时间表,其中包含在半小时标记处获取的测量值的行时间。但是,在每个时间表中,都存在一个不是在半小时标记处收集的数据的行时间。这两个时间表均是不规则的,这意味着连续行时间之间的时间步是不同的。

load halfHoursTT

显示时间表。TT1TT2 具有三行和不同的变量。

TT1
TT1=3×1 timetable
            Time            Temp
    ____________________    ____

    18-Dec-2015 08:30:00    47.6
    18-Dec-2015 09:30:00    49.2
    18-Dec-2015 10:47:23    51.4

TT2
TT2=3×1 timetable
            Time            Pressure
    ____________________    ________

    18-Dec-2015 07:00:00      29.7  
    18-Dec-2015 09:30:00     30.03  
    18-Dec-2015 10:30:00      29.9  

指定时间向量,其中包含每个时间表的一些行时间。

newTimes = datetime('2015-12-18 08:30:00') + hours(0:1:2)
newTimes = 1x3 datetime
   18-Dec-2015 08:30:00   18-Dec-2015 09:30:00   18-Dec-2015 10:30:00

TT1TT2 同步到 newTimesnewTimes 向量具有的时间不是 TT1TT2 的行时间。要在 newTimes 中进行与 TT1TT2 中的行时间不匹配的时间数据值插值,请指定 'linear'

TT = synchronize(TT1,TT2,newTimes,'linear')
TT=3×2 timetable
            Time             Temp     Pressure
    ____________________    ______    ________

    18-Dec-2015 08:30:00      47.6     29.898 
    18-Dec-2015 09:30:00      49.2      30.03 
    18-Dec-2015 10:30:00    50.906       29.9 

加载两个采样时间表并将它们的数据同步到它们共有的行时间的向量。

load intersectTT

显示时间表。TT1TT2 具有三行和不同的变量。

TT1
TT1=3×1 timetable
            Time            Temp
    ____________________    ____

    18-Dec-2015 08:00:00    37.3
    18-Dec-2015 10:00:00    39.1
    18-Dec-2015 12:00:00    42.3

TT2
TT2=3×1 timetable
            Time            Pressure
    ____________________    ________

    18-Dec-2015 06:00:00      30.1  
    18-Dec-2015 08:00:00     30.03  
    18-Dec-2015 10:00:00      29.9  

同步 TT1TT2,指定 'intersection' 为生成输出时间表的行时间所基于的方法。TT 只有两行,因为 TT1TT2 只有两个行时间是相同的。

TT = synchronize(TT1,TT2,'intersection')
TT=2×2 timetable
            Time            Temp    Pressure
    ____________________    ____    ________

    18-Dec-2015 08:00:00    37.3     30.03  
    18-Dec-2015 10:00:00    39.1      29.9  

不需要插值或填充不匹配的行,因为 TT1TT2 均具有它们共有的行时间的数据。

将两个具有天气测量值的较小时间表同步到每小时时间向量。

加载两个较小的时间表。在每个时间表中,都存在一个不是在整点收集的数据的行时间。这两个时间表均是不规则的,这意味着连续行时间之间的时间步是不同的。

load irregularTT

显示时间表。TT1TT2 具有三行和不同的变量。

TT1
TT1=3×1 timetable
            Time            Temp
    ____________________    ____

    18-Dec-2015 08:00:00    37.3
    18-Dec-2015 09:11:17    39.1
    18-Dec-2015 10:00:00    42.3

TT2
TT2=3×1 timetable
            Time            Pressure
    ____________________    ________

    18-Dec-2015 08:00:00      29.8  
    18-Dec-2015 09:27:23      29.7  
    18-Dec-2015 10:00:00      30.3  

同步 TT1TT2,指定 'hourly' 作为输出时间表的行时间的时间步。TT 具有来自 TT1TT2 的数据,它们具有位于整点的行时间。TT 具有缺失数据指示符,表示 TT1TT2 在该处没有行时间。

TT = synchronize(TT1,TT2,'hourly')
TT=3×2 timetable
            Time            Temp    Pressure
    ____________________    ____    ________

    18-Dec-2015 08:00:00    37.3      29.8  
    18-Dec-2015 09:00:00     NaN       NaN  
    18-Dec-2015 10:00:00    42.3      30.3  

同步两个时间表。将 mean 方法应用到一些时间表变量,将 sum 方法应用到其他时间表变量。

加载两个包含波士顿和纳蒂克的天气测量值的较小时间表。每个时间表都包含温度和降雨量读数。

load citiesTT
Boston
Boston=6×2 timetable
           Time            Temp    Rain
    ___________________    ____    ____

    2016-06-09 06:03:00    59.5    0.05
    2016-06-09 12:00:23      63    0.08
    2016-06-09 18:02:57    61.7    0.13
    2016-06-10 06:01:47    55.4    0.15
    2016-06-10 12:06:00    62.3    0.87
    2016-06-10 18:02:57    58.8    0.33

Natick
Natick=5×2 timetable
           Time            Temp     Rain 
    ___________________    _____    _____

    2016-06-09 12:00:23     61.2    0.076
    2016-06-09 17:59:00     60.3     0.11
    2016-06-10 09:03:01     56.1     0.19
    2016-06-10 12:07:03    62.17     0.72
    2016-06-10 17:59:57     58.3      0.1

将测量值同步到每日时间,以生成平均温度和降雨量测量值总和。synchronize 将指定的方法应用到所有时间表变量。要将不同的方法应用到不同的时间表变量,请对时间表进行索引来选择不同的变量,并针对您使用的每个方法调用 synchronize

BOS = Boston(:,'Temp');
NTK = Natick(:,'Temp');
TT1 = synchronize(BOS,NTK,'daily','mean')
TT1=2×2 timetable
           Time            Temp_BOS    Temp_NTK
    ___________________    ________    ________

    2016-06-09 00:00:00       61.4       60.75 
    2016-06-10 00:00:00     58.833      58.857 

BOS = Boston(:,'Rain');
NTK = Natick(:,'Rain');
TT2 = synchronize(BOS,NTK,'daily','sum')
TT2=2×2 timetable
           Time            Rain_BOS    Rain_NTK
    ___________________    ________    ________

    2016-06-09 00:00:00      0.26       0.186  
    2016-06-10 00:00:00      1.35        1.01  

要将所有结果合并到一个时间表中,可串联 TT1TT2

TT = [TT1 TT2]
TT=2×4 timetable
           Time            Temp_BOS    Temp_NTK    Rain_BOS    Rain_NTK
    ___________________    ________    ________    ________    ________

    2016-06-09 00:00:00       61.4       60.75       0.26       0.186  
    2016-06-10 00:00:00     58.833      58.857       1.35        1.01  

输入参数

全部折叠

输入时间表。

计算输出时间表的行时间的基础,指定为字符向量。newTimeBasis 可以是下面列出的任一方法。

方法

说明

'union'(默认值)

行时间的并集

'intersection'

行时间的交集

'commonrange'

相交时间范围内的行时间的并集

'first'

仅第一个输入时间表中的行时间

'last'

仅最后一个输入时间表中的行时间

输出时间表中用于确定时间间隔的时间步,指定为字符向量。newTimeStep 可以是下面列出的任何时间步。

时间步

说明

'yearly'

一年

'quarterly'

一个季度

'monthly'

一个月

'weekly'

一周

'daily'

一天

'hourly'

一小时

'minutely'

一分钟

'secondly'

一秒钟

TT 的第一个行时间位于包含输入时间表中的最早行时间的时间单位的起始点。TT 中的行时间范围覆盖了 TT1TT2 中的行时间范围。但是,TT 可能不包含任何来自 TT1TT2 的实际行时间,因为它们可能具有不在任何时间单位起始点的行时间。

采样率,指定为正数值标量。Fs 指定每秒采样数 (Hz)。

时间步,指定为日期时间标量或持续时间标量。

数据类型: datetime | duration | calendarDuration

新时间向量,指定为日期时间向量或持续时间向量。新时间向量必须为列向量。newTimes 的行数可以不同于任何输入时间表的行数。

用于调整时间表数据的方法,指定为字符向量、字符串标量或函数句柄。您可以使用列出的任一方法来调整输入时间表中的数据。

填充方法

当输出时间表的行时间与相应输入的行时间匹配时,复制每个输入时间表的行中的数据。然后,使用缺失数据指示符填充输出时间表的其余元素。

要使用常量而不是缺失数据指示符填充其余元素,请使用 'Constant' 名称-值对组参数。

方法

说明

'fillwithmissing'(默认值)

使用缺失数据指示符填充输出中的空缺(例如,使用 NaN 表示数值变量)。

'fillwithconstant'

使用 'Constant' 名称-值对组参数的值填充输出中的空缺。默认值为 0

最近邻方法

按照指定的方法,将输入时间表的行中的数据复制到行时间最接近匹配的输出时间表行中。输入时间表必须按行时间进行排序。

方法

说明

'previous'

从输入时间表中前一个最近邻项中复制数据,从行时间向量的末尾开始。如果存在重复的行时间,则 'previous' 是指最后一个重复项。

'next'

从输入时间表中后一个最近邻项中复制数据,从行时间向量的开头开始。如果存在重复的行时间,则 'next' 是指第一个重复项。

'nearest'

从输入时间表中的最近邻项中复制数据。

插值方法

根据输入时间表的相邻行中的数据值在输出时间表中插入数据值。输入时间表必须具有已排序且唯一的行时间。要控制如何在输入时间表的第一个和最后一个行时间以外的位置外插数据,请使用 'EndValues' 名称-值对组参数。

方法

说明

'linear'

使用线性插值。

'spline'

使用分段三次样条插值。

'pchip'

使用保形分段三次插值。

'makima'

使用修正 Akima 三次 Hermite 插值。

聚合方法

在输出时间表的行时间所指定的时间 bin 上聚合输入时间表的行中的数据。TT 的每个行时间是时间 bin 的左边界,下一个连续的行时间为右边界。默认情况下,左边界包含在时间 bin 内。要控制时间 bin 是否包含左右边界,请使用 'IncludedEdge' 名称-值对组参数。

如果指定时间向量 newTimes,则 newTimes 必须按升序排序。如果将输出时间表的时间基础指定为 'first''last',则第一个或最后一个时间表的行时间必须按升序排序。

下面列出的所有方法都忽略 NaNNaT 和其他缺失数据指示符,但 func 除外。要包含缺失数据指示符,请将 func 作为函数句柄指定给函数,该函数将在聚合数据时包含缺失数据指示符。

方法

说明

'sum'

对每个时间 bin 内的值求和。

'mean'

计算每个时间 bin 内的值的均值。

'prod'

计算每个时间 bin 内的值的乘积。

'min'

计算每个时间 bin 内的值的最小值。

'max'

计算每个时间 bin 内的值的最大值。

'count'

计算每个时间 bin 内有多少个值。

'firstvalue'

使用每个时间 bin 内的第一个值。

'lastvalue'

使用每个时间 bin 内的最后一个值。

@func

使用函数句柄指定的函数(例如,使用 @std 计算每个时间 bin 内的值的标准差)。func 必须返回标量或行向量输出参数,且必须接受空输入。

默认方法

默认方法等同于未指定 method

方法

说明

'default'(默认值)

用缺失数据指示符填充间隔,或者针对每个变量使用不同方法(如果它们由输入时间表的 VariableContinuity 属性指定)。

名称-值对组参数

指定可选的、以逗号分隔的 Name,Value 对组参数。Name 为参数名称,Value 为对应的值。Name 必须放在引号中。您可采用任意顺序指定多个名称-值对组参数,如 Name1,Value1,...,NameN,ValueN 所示。

示例: TT = synchronize(TT1,TT2,newTimes,'fillwithconstant','Constant',-1) 同步时间表 TT1TT2,并将值 -1 赋给 TT 的行中行时间与对应的输入时间表中的行时间不匹配的元素。

当方法为 'fillwithconstant' 时用来填补空缺的值,以逗号分隔的对组形式指定,该对组由 'Constant' 和一个数组组成。默认值为 0'Constant' 指定的值的数据类型必须与时间表变量的数据类型兼容。

示例: TT 中的所有变量都包含文本时,TT = synchronize(TT1,TT2,'hourly','fillwithconstant','Constant','NONE') 将用字符向量 'NONE' 填补 TT 中的空白。

使用插值方法时的外插方法,以逗号分隔的对组形式指定,该对组由 'EndValues''extrap' 或一个标量组成。如果指定标量,则其数据类型必须与时间表变量兼容。

方法

说明

'extrap'(默认值)

使用 method 输入参数指定的方法进行外插

标量

通过用标量填充输入行时间范围之外的空缺来进行外插

示例: 对于 TT = synchronize(TT1,TT2,'daily','previous','EndValues',1000) 来说,当 TT 的行时间在 TT1TT2 的行时间范围内时,它会用之前的行值填补 TT 中的空白;当 TT 的行时间在该范围外时,它会用值 1000 填补空白。

每个时间 bin 包含的边界,指定为逗号分隔的对组,其中包含 'IncludedEdge''left''right'TT 的每个行时间是时间 bin 的左边界,下一个连续的行时间为右边界。

要包含的边界

说明

'left'(默认值)

所有 bin 都包含左边界,但最后一个 bin 除外,它同时包含左右边界

'right'

所有 bin 都包含右边界,但第一个 bin 除外,它同时包含左右边界

如果您指定 'left',则时间 bin 包含左边界,但最后一个 bin 除外,它同时包含左右边界。如果您指定 'right',则时间 bin 包含右边界,但第一个 bin 除外,它同时包含左右边界。

示例: TT = synchronize(TT1,TT2,'hourly','mean','IncludedEdge','right') 包含每个时间 bin 的右边界。

兼容性考虑

全部展开

从 R2018b 起不建议使用

扩展功能

在 R2016b 中推出