我有一个传递函数:
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)));
这就是我得到的,这不是我想要的:
如何调整我的答案看起来像原始传输函数?
答案 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}
给予
作为参考,我最初建议使用vpa
(http://mathworks.com/help/symbolic/vpa.html)将有效性转换回小数,但这对OP不起作用,因为我们有不同的Matlab版本,或者因为我的测试TF
不同。