Matlab - 如何从传递函数中生成LaTeX?

时间:2015-05-27 05:32:11

标签: matlab latex

我有一个传递函数:

TF =

0.00995 z^7 - 0.02786 z^6 + 0.03611 z^5 - 0.0293 z^4 + 0.01565 z^3 - 0.005669 z^2 + 0.001274 z - 0.0001554
----------------------------------------------------------------------------------------------------------
     z^8 - 2.4 z^7 + 3.16 z^6 - 2.664 z^5 + 1.585 z^4 - 0.666 z^3 + 0.1975 z^2 - 0.0375 z + 0.003906

当我尝试:

[num,den] = tfdata(TF);
syms z
clipboard('copy', latex(poly2sym(cell2mat(num),z)/poly2sym(cell2mat(den),z)));

这就是我得到的,这不是我想要的:

enter image description here

如何调整我的答案看起来像原始传输函数?

1 个答案:

答案 0 :(得分:0)

由于evalc('TF')接近LaTeX格式,因此只需使用regexp形成一个字符串即可。首先我制作TF,尝试模仿OPs值,以便这是一个MWE:

numIn=[0.00995  -0.02786 0.03611 -0.0293 0.01565 -0.005669 0.001274 -0.0001554];   
denIn=[1 -2.4 3.16 -2.664 1.585 -0.666 0.1975 -0.0375 0.003906];
TF=tf(numIn,denIn,1,'variable','z'); 

然后我通过查找超过1个连续的' - '找到分数的分子和分母,然后返回并转发到换行符。最后,我形成了一个LaTeX字符串。

fracparts=regexp(evalc('TF'),'([^\n]*)\n[ ]*-[-]+[ ]*\n([^\n]*)','tokens');
TFlatex=['T(z)=\frac{' fracparts{1}{1} '}{' fracparts{1}{2} '}'];

其中fracparts{1}{1}是分子,fracparts{1}{2}是分母。输出是:

T(z)=\frac{  0.00995 z^7 - 0.02786 z^6 + 0.03611 z^5 - 0.0293 z^4 + 0.01565 z^3 - 0.005669 z^2 + 0.001274 z - 0.0001554}{       z^8 - 2.4 z^7 + 3.16 z^6 - 2.664 z^5 + 1.585 z^4 - 0.666 z^3 + 0.1975 z^2 - 0.0375 z + 0.003906}

使用

编译LaTeX
\documentclass{standalone}
\begin{document}
$T(z)=\frac{  0.00995 z^7 - 0.02786 z^6 + 0.03611 z^5 - 0.0293 z^4 + 0.01565 z^3 - 0.005669 z^2 + 0.001274 z - 0.0001554}{       z^8 - 2.4 z^7 + 3.16 z^6 - 2.664 z^5 + 1.585 z^4 - 0.666 z^3 + 0.1975 z^2 - 0.0375 z + 0.003906}$
\end{document}

给予

enter image description here

作为参考,我最初建议使用vpahttp://mathworks.com/help/symbolic/vpa.html)将有效性转换回小数,但这对OP不起作用,因为我们有不同的Matlab版本,或者因为我的测试TF不同。