0

我有一个 Matlab 函数,我需要 1)加速 2)通过自动微分(AD)生成函数的导数。

我通过使用 Matlab Coder 生成 C 代码和 mex 函数来完成加速部分。现在我正在寻找一个开箱即用(或进行少量代码修改)的 AD 工具,可用于自动生成的 C 代码。那里似乎有很多 C/C++ AD 工具,请参阅C/C++ AD 工具,为此我测试了几个:

  • Tapenade:不适用于 Matlab Coder 生成的文件
  • ADOL-C:需要将C函数重写为一些特定的数据类型(我想很多工具都有这样的要求)

有没有人有使用 Matlab Coder 生成代码的这些工具的经验?

PS。AD 工具应该可以在 Windows 上运行。

4

1 回答 1

1

如果您有符号工具箱,则可以使用它来生成解析导数。假设你有一个像 z = f(x,y) 这样的函数,你会创建符号变量

x = sym('x', [mx,nx]); 
y = sym('y', [my,ny]);

其中 mx,nx,mx,my 指定输入变量的大小。使用符号变量调用 f(例如 z = f(x,y))。

现在您可以使用函数 jacobian 创建导数。

jac_z_x = jacobian(z,x(:));
jac_z_y = jacobian(z,y(:));

使用 matlabFunction 将导数写入 matlab 文件。如果需要,您可以使用 MATLAB Coder 编译该函数。这就是我解决优化问题的方法。

希望这有助于马蒂亚斯

于 2015-09-24T19:40:43.470 回答