Matlab将匿名函数转换为Latex表达式

时间:2015-09-17 14:56:33

标签: matlab latex anonymous-function symbolic-math

我想打印一个匿名函数,所以我发现函数latex(只接受符号表达式)来执行此操作:

f =@(x,a) (x/a) * exp(-x.^2 / (2*a^2));
latex(sym(f))

输出:

\frac{x\, \mathrm{e}^{-\frac{x^2}{2\, a^2}}}{a}

但是,上述LaTeX语法与我最初在函数中输入的方式。我希望LaTeX语法以我最初编写的方式出现,如下所示:

\frac{x}{a} \mathrm{e}^{-\frac{x^2}{2\, a^2}}

我也愿意从字符串开始。有没有办法在MATLAB中做到这一点?

1 个答案:

答案 0 :(得分:3)

正如@thewaywewalk指出的那样,根据Matlab的规则,转换为符号数学的表达式是“简化的”。这是一种避免这种情况的方法。首先,您需要将数字函数转换为合适的字符串(删除参数列表,删除逐元素运算符),然后在调用MuPAD的hold时将其转换为符号表达式:

f = @(x,a) (x/a) * exp(-x.^2 / (2*a^2));
fstr = regexprep(func2str(f), '^@\(.*?\)|\.', '') % Remove arguments, element-wise operators
fsym = feval(symengine, 'hold', fstr)             % Convert to symbolic expression
latex(fsym)

返回:

\left(\frac{x}{a}\right)\, \mathrm{e}^{- \frac{x^2}{2\, a^2}}

看起来像:

LaTeX expression

我不确定这个方案在更复杂的情况下有多可靠,因为从数学到LateX的转换是不明确的。如果您需要特定的精确LaTeX表达式(例如,特定位置的括号而不是其他位置),您需要自己编写或编辑它们或者提出自己的转换函数。