@sym: s = fortran (g) ¶@sym: s = fortran (g1, …, gn) ¶@sym: fortran (…, 'file', filename) ¶@sym: [F, H] = fortran (…, 'file', '') ¶Convert symbolic expression into Fortran code.
Example returning a string of Fortran code:
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⎠ ⎠
fortran(g)
⇒ x*(x*(x*(1.0d0/3.0d0 - 1.0d0/4.0d0*x) - 1.0d0/2.0d0) + 1)
We can write to a file or obtain the contents directly:
[f90, h] = fortran(g, 'file', '', 'show_header', false); f90.name ⇒ file.f90 h.name ⇒ file.h
disp(f90.code) -| REAL*8 function myfun(x) -| implicit none -| REAL*8, intent(in) :: x -| -| myfun = x*(x*(x*(1.0d0/3.0d0 - 1.0d0/4.0d0*x) - 1.0d0/2.0d0) + 1) -| -| end function
disp(h.code) -| interface -| REAL*8 function myfun(x) -| implicit none -| REAL*8, intent(in) :: x -| end function -| end interface
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/ccode, @@sym/latex, @@sym/function_handle.
Package: symbolic