我想打印一个匿名函数,所以我发现函数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中做到这一点?
答案 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的转换是不明确的。如果您需要特定的精确LaTeX表达式(例如,特定位置的括号而不是其他位置),您需要自己编写或编辑它们或者提出自己的转换函数。