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

时间:2015-09-03 08:49:32

标签: c matlab matlab-coder automatic-differentiation

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

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

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

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

PS。 AD工具应该适用于Windows。

1 个答案:

答案 0 :(得分:1)

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

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

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

现在您可以使用jacobian函数创建衍生物。

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

使用matlabFunction将衍生物写入matlab文件。如果需要,您可以使用MATLAB Coder编译该函数。这就是我为优化问题所做的工作。

希望这会有所帮助 的Matthias