自动微分Matlab Coder生成的C代码

Automatic differentiation of Matlab Coder generated C code

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

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

有没有人有使用此类工具来生成 Matlab Coder 代码的经验?

PS。 AD 工具应该在 Windows.

上工作

如果你有符号工具箱,你可以用它来生成解析导数。假设您有一个像 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 编译函数。这就是我解决优化问题的方法。

希望对您有所帮助 马蒂亚斯