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

4

我想要对一个匿名函数进行漂亮的打印输出,所以我找到了只接受符号表达式的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中有没有办法做到这一点?


2
让Matlab的符号引擎输出类似逻辑的东西,就像告诉一个老顽固农民如何种玉米一样。我每天都要处理这个问题...别试了。 - Robert Seifert
问题不在于 latex(...),而在于输出 (x*exp(-x^2/(2*a^2)))/asym(...) - Robert Seifert
所以你唯一的选择就是将你的方程分成两部分。 - Robert Seifert
1个回答

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表达式(例如,在特定位置但不是其他位置的括号),您需要自己编写或编辑它们,或者提出自己的转换函数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接