Main Content

逼近函数值的方法

关于逼近函数值

表查找操作的第二阶段是为提供的输入生成对应的输出。如果输入与断点向量中指定的索引值匹配,模块将输出对应的值。但是,如果输入与断点向量中的任何索引值都不匹配,Simulink® 将估算输出。您可以在模块参数对话框中指定这种情况下如何计算输出。以下各节介绍可用的查找方法。

内插方法

当输入位于两个断点值之间时,模块将根据相邻断点内插输出值。大多数查找表模块提供了以下内插方法:

  • 均一 - 禁用内插,并使用名为向下取输入值的舍入操作。有关详细信息,请参阅 舍入方法

  • 最邻近值 - 禁用内插,并返回与最邻近输入的断点对应的表值。如果输入与两个相邻断点之间的距离相等,则选择索引值较大的断点。

  • 线性点-斜率 - 在相邻断点之间拟合一条线,并返回该线条上与输入对应的点。以下是线性点-斜率的公式,其中 x 是输入数据,y 是输出表数据(xi,yi 是表数据的坐标),f 是分式。有关 xi,yi 的详细信息,请参阅 关于查找表模块

    f=xxixi+1xi

    y=yi+f(yi+1yi)

  • 三次样条 - 在相邻断点之间拟合一条三次样条曲线,并返回该样条曲线上与输入对应的点。

  • 线性拉格朗日 - 使用一阶拉格朗日插值在相邻断点之间拟合一条线,并返回该线条上与输入对应的点。以下是线性拉格朗日方程,其中 x 是输入数据,y 是输出表数据,f 是分式。f 限制在 0 到小于 1 的范围内 ([0,1))。有关 x 和 y 的详细信息,请参阅关于查找表模块

    f=xxixi+1xi

    y=(1f)yi+fyi+1

    如果外插方法是线性,则基于所选择的线性插值方法计算外插值。例如,如果插值方法是线性拉格朗日,则外插方法继承线性拉格朗日方程以计算外插值。

  • Akima 样条 - 在相邻断点之间拟合一条 Akima 样条曲线,并返回该样条曲线上与输入对应的点。插值方法仅适用于 Akima 样条外插方法。修正 Akima 三次 Hermite 插值方法具有以下属性:

    • 它比三次样条产生的波动更少。

    • 对于实时应用,它比三次样条更高效。

    • 与三次样条不同,它不会产生过冲。

    • 与三次样条不同,它支持非标量信号。

注意

Lookup Table Dynamic 模块不允许您选择内插方法。模块参数对话框中的查找方法字段中的内插-外插选项会执行线性插值。

每一种内插方法在计算时间与结果平滑度之间各有取舍。舍入方法虽然速度最快,但平滑度最低。线性内插比舍入方法慢,但生成的结果更平滑(斜率改变的断点处除外)。三次样条插值方法最慢,但能生成平滑的结果。Akima 样条产生最平滑的结果。

外插方法

当输入位于断点向量的范围之外时,模块会从断点向量端点处的一对值对输出值进行外插。大多数查找表模块提供了以下外插方法:

  • 裁剪 - 禁用外插,并返回与断点向量范围的端点对应的表数据。此方法对超出范围的值无任何保证。

  • 线性 - 如果插值方法为线性,此外插方法将在第一对断点间或最后一对断点间拟合一条线,具体取决于输入是小于第一个断点还是大于最后一个断点。如果插值方法为三次样条Akima 样条,此外插方法将使用插值在第一个或最后一个断点处的斜率来拟合一个线性曲面,具体取决于输入是小于第一个断点还是大于最后一个断点。外插方法将返回生成的线性曲面上与输入对应的点。

    如果外插方法是线性,则基于所选择的线性插值方法计算外插值。例如,如果插值方法是线性拉格朗日,则外插方法继承线性拉格朗日方程以计算外插值。

  • 三次样条 - 对第一对或最后一对断点拟合一条三次样条曲线,具体取决于输入是小于第一个断点还是大于最后一个断点。此方法将返回该样条曲线上与输入对应的点。

  • Akima 样条 - 分别对第一对或最后一对断点拟合一条 Akima 样条曲线,具体取决于输入是小于第一个断点还是大于最后一个断点。此方法将返回该样条曲线上与输入对应的点。

注意

Lookup Table Dynamic 模块不允许您选择外插方法。模块参数对话框中的查找方法字段中的内插-外插选项会执行线性外插。

除了这些方法之外,有些查找表模块(例如 n-D Lookup Table 模块)允许您选择当遇到需要外插的情况时要执行的操作。例如,当查找表输入位于断点向量范围之外时,您可以指定 Simulink 生成警告或错误。要指定此类操作,请从模块参数对话框中的输入超出范围的诊断列表中进行选择。

舍入方法

如果某个输入在两个断点值之间或者超出断点向量的范围,而您未指定内插或外插,则模块会将该值舍入到邻近的断点,并返回对应的输出值。例如,Lookup Table Dynamic 模块允许您选择以下舍入方法之一:

  • 取最邻近的输入值 - 返回与最邻近的输入值对应的输出值。

  • 向下取输入值 - 返回与小于输入值的紧邻断点值对应的输出值。如果输入值下面没有任何断点值,则返回最邻近输入值的断点值。

  • 向上取输入值 - 返回与大于输入值的紧邻断点值对应的输出值。如果输入值上面没有任何断点值,则返回最邻近输入值的断点值。

各查找方法的输出示例

在下面的模型中,Lookup Table Dynamic 模块接受由 [-5:5] 指定的断点数据向量,以及由 sinh([-5:5]) 指定的表数据向量。

当使用指定的查找方法和输入时,Lookup Table Dynamic 模块将输出以下值。

查找方法输入输出注释

内插-
外插

1.4

2.156

不适用

5.2

83.59

不适用

插值-
使用最终值

1.4

2.156

不适用

5.2

74.2

模块使用 sinh(5.0) 的值。

向上取输入值

1.4

3.627

模块使用 sinh(2.0) 的值。

5.2

74.2

模块使用 sinh(5.0) 的值。

向下取输入值

1.4

1.175

模块使用 sinh(1.0) 的值。

-5.2

-74.2

模块使用 sinh(-5.0) 的值。

取最邻近的输入值

1.4

1.175

模块使用 sinh(1.0) 的值。

相关主题