Matlab - 如何从传递函数生成 LaTeX?
Matlab - How to generate LaTeX out of a transfer function?
我的传递函数为:
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)));
这是我得到的,但不是我想要的:
如何调整我的答案以使其看起来像原始传递函数?
由于 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
不同。
我的传递函数为:
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)));
这是我得到的,但不是我想要的:
如何调整我的答案以使其看起来像原始传递函数?
由于 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
不同。