Method on @sym: s = ccode (f)
Method on @sym: s = ccode (f1, …, fn)
Method on @sym: ccode (…, 'file', filename)
Method on @sym: [c_stuff, h_stuff] = ccode (…, 'file', '')

Convert symbolic expression into C code.

Example:

syms x
g = taylor(log(1 + x), x, 0, 'order', 5);
g = horner(g)
  ⇒ g = (sym)
        ⎛  ⎛  ⎛1   x⎞   1⎞    ⎞
      x⋅⎜x⋅⎜x⋅⎜─ - ─⎟ - ─⎟ + 1⎟
        ⎝  ⎝  ⎝3   4⎠   2⎠    ⎠
ccode(g)
  ⇒ x*(x*(x*(1.0/3.0 - 1.0/4.0*x) - 1.0/2.0) + 1)

We can write to a file or obtain the contents directly:

[C, H] = ccode(g, 'file', '', 'show_header', false);
C.name
  ⇒ file.c
H.name
  ⇒ file.h

disp(H.code)
  -|  #ifndef PROJECT__FILE__H
  -|  #define PROJECT__FILE__H
  -|
  -|  double myfun(double x);
  -|
  -|  #endif

disp(C.code)
  -|  #include "file.h"
  -|  #include <math.h>
  -|
  -|  double myfun(double x) {
  -|
  -|     double myfun_result;
  -|     myfun_result = x*(x*(x*(1.0/3.0 - 1.0/4.0*x) - 1.0/2.0) + 1);
  -|     return myfun_result;
  -|
  -|  }

FIXME: This doesn’t write “optimized” code like Matlab’s Symbolic Math Toolbox; it doesn’t do “Common Subexpression Elimination”. Presumably the compiler would do that for us anyway. Sympy has a “cse” module that will do it. See: http://stackoverflow.com/questions/22665990/optimize-code-generated-by-sympy

See also: @sym/fortran, @sym/latex, @ssym/function_handle.

Package: symbolic