Generate C or Fortran Code from Symbolic Expressions
You can generate C or Fortran code fragments from a symbolic
expression, or generate files containing code fragments, using the ccode
and fortran
functions.
These code fragments calculate numerical values as if substituting
numbers for variables in the symbolic expression.
To generate code from a symbolic expression g
, enter either
ccode(g)
or fortran(g)
.
For example:
syms x y z = 30*x^4/(x*y^2 + 10) - x^3*(y^2 + 1)^2; fortran(z)
ans = ' t0 = (x**4*3.0D+1)/(x*y**2+1.0D+1)-x**3*(y**2+1.0D0)**2'
ccode(z)
ans = ' t0 = ((x*x*x*x)*3.0E+1)/(x*(y*y)+1.0E+1)-(x*x*x)*pow(y*y+1.0,2.0);'
To generate a file containing code, either enter
ccode(g,'file','
or
filename
')fortran(g,'file','
. For the
example above,filename
')
fortran(z, 'file', 'fortrantest')
generates a file named fortrantest
in the
current folder. fortrantest
consists of the following:
t2 = y**2 t0 = (x**4*3.0D+1)/(t2*x+1.0D+1)-x**3*(t2+1.0D0)**2
Similarly, the command
ccode(z,'file','ccodetest')
generates a file named ccodetest
that consists
of the lines
t2 = y*y; t0 = ((x*x*x*x)*3.0E+1)/(t2*x+1.0E+1)-(x*x*x)*pow(t2+1.0,2.0);
ccode
and fortran
generate many intermediate
variables. This is called optimized code. MATLAB® generates intermediate variables as a lowercase letter t
followed by an automatically generated number, such as t2
. Intermediate
variables can make the resulting code more efficient by reusing intermediate expressions
(such as t2
in fortrantest
and
ccodetest
). They can also make the code easier to read by keeping
expressions short.