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

Matlab convert anonymous function to Latex expression

我想漂亮地打印一个匿名函数,所以我找到了函数 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 中做到这一点?

正如@thewaywewalk 指出的那样,根据 Matlab 的规则,转换为符号数学的表达式是 "simplified"。这是避免这种情况的方法。首先,您需要将数字函数转换为合适的字符串(摆脱参数列表,删除元素运算符),然后在调用 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)

这个returns:

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

看起来像:

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