主要内容

行-主阵列布局的子表选择插值算法

这个例子说明了插值块从高维表中选择的子表进行插值的算法。对带子表选择的插补算法进行了优化,以适应行主数组布局。作为参考,请参阅针对列-主数组布局优化的带子表选择的插值算法。使用行主插值算法生成的代码在对行主数组布局的表数据进行操作时具有最佳的速度和内存使用率。使用列主算法生成的代码在列主数组布局下性能最好。

在这个例子中,你:

  • 用列主和行主算法在选定的子表上进行插值。

  • 通过表排列保持块语义。

  • 使用行主算法和数组布局生成代码。

用行主算法进行模拟

1.开放范例模型rtwdemo_col_interpselsubtable而且rtwdemo_row_interpselsubtable

open_system (“rtwdemo_col_interpselsubtable”);open_system (“rtwdemo_row_interpselsubtable”);

2.默认情况下,Simuli万博1manbetxnk®配置一个具有列主算法和列主数组布局的模型。该模型rtwdemo_col_interpselsubtable配置为使用列-主算法。运行模型并观察存储在工作区变量中的输出

3.要启用行主算法,请打开“配置参数”对话框。在数学和数据类型窗格中,选择配置参数使用针对行主数组布局优化的算法或者,在MATLAB®命令窗口中输入:

set_param (“rtwdemo_col_interpselsubtable”“UseRowMajorAlgorithm”“上”);

4.对模型进行仿真,观察误差。

列主算法和行主算法在子表选择和插补顺序方面存在差异。子表选择是在原始表内部执行的。没有为子表分配额外的内存。所选子表在内存中是连续的。插值顺序对于列主数组布局的列主算法和行主数组布局的行主算法是缓存友好的。这个插图比较了行为主和列为主的插补与子表选择。

由于语义的变化,在不同的子表或数据集上执行列主和行主插值。这种插值会导致不同的数字输出或错误。

通过表排列保持语义

使用子表选择,当从列主算法切换到行主算法时,模型语义会发生变化。为了保持语义或确保选择相同的子表进行插值,您需要打乱表数据。否则,如果在预查找和插万博1manbetx值块之间遇到不一致的断点和表数据,Simulink可能会报告错误。

1.rtwdemo_col_interpselsubtable /插值函数3-D表数据给出为T3d =重塑([1:24],3,2,4)和一个选择端口与输入2(基于指数)。所选子表为T3d (:: 3)(MATLAB中基于1的索引)用于列主算法。为了在同一模型上保留行主算法的语义,即选择具有相同索引和选择端口输入的相同子表,将表排列为T3d_p = permute(T3d, [3,1,2]).所选子表为T3d_p (3::)(基于1的索引)用于行主算法。

T3d_str = get_param(“rtwdemo_col_interpselsubtable /插值函数”“表”);set_param (“rtwdemo_col_interpselsubtable /插值函数”“表”...“排列(”T3d_str,”,[3 1 2])”]);

2.从文件导入表数据时,在导入文件之前必须打乱文件中的表数据。这种排列使表在整个模拟和代码生成工作流中保持可调。

使用行主算法和数组布局生成代码

在排列表数据后,建立模型rtwdemo_col_interpselsubtable配置为行主行模拟。该模型等价于预配置的模型rtwdemo_row_interpselsubtable它使用行主算法。

1.要设置用于生成行主代码的模型,请打开Configuration Parameters对话框。除了选择使用针对行主数组布局优化的算法的配置参数代码生成>接口窗格中,设置配置参数阵列布局选择。此配置参数启用用于生成行主代码的模型。或者,在MATLAB命令窗口中输入:

set_param (“rtwdemo_col_interpselsubtable”“ArrayLayout”“行”);

2.在对话框中,检查排列的3-D表数据和选定的2-D子表。

3.在MATLAB中将当前文件夹更改为可写文件夹。在C代码选项卡上,单击构建生成C代码。在生成的代码中,观察针对行主数据优化的2-D插值算法。

close_system (“rtwdemo_col_interpselsubtable”, 0);

相关的话题