在之前的问题,我询问了如何创建根轨迹图,并得到了一个相当不错的答案,这要感谢 @percusse,使用\pgfplotstableread
它我完成了 90% 的工作。但是,为了正确绘制这样的图表,我需要处理的一件事是处理根无限大的情况(相对于当它们终止于某个有限零点时,目前可以正确处理这种情况)。
matlab 输出给了我正在使用的下表:
pr1 pi1 pr2 pi2 pr3 pi3 pr4 pi4 k
0 0 -1 0 -2 1 -2 -1 0
... % More numbers
Inf 0 Inf 0 Inf 0 Inf 0 Inf
您可以看到其中的最后一行(有时)以“Inf”结尾。
\pgfplotstableread
在创建如下图表时将会抛出这个结果:
NOTE: coordinate (Inf,0) has been dropped because it is unbounded (in x). (see also unbounded coords=jump).
我想处理最后一行条目,并决定是在最后一个位置放置一个圆圈(如果它不是无限的)或者以某种方式表明这个根是无限的,要么简单地放置一个箭头指示它的方向,要么将线延伸到(靠近)地块边界。
这是我从其他线程中获得的修改后的代码:
\usepackage{pgfplots}
\pgfplotsset{compat=1.11}
\pgfplotstableread{prob3.txt}\tablea
\begin{tikzpicture}[
%This is to provide the start point cross marker
start marker/.pic={\draw (-#1,-#1) -- (#1,#1) (#1,-#1)--(-#1,#1);}
]
% Don't put any markers, limit the visible area from one side, draw grid
\begin{axis}[no marks,grid=both,width=\linewidth]
\pgfplotstablegetcolsof{\tablea}
\pgfmathparse{\pgfplotsretval-2} % 1 for K and 1 for extra length
\pgfmathparse{\pgfmathresult/2} % Real and Imag part for each
\foreach \x in{1,...,\pgfmathresult}{ % Iterate over the columns of the table
\addplot+[] table[x=pr\x,y=pi\x] {\tablea} % Draw the curves
% Put the ending marker with size adjusted to 2pt
node[draw,circle,inner sep=2pt] at (current plot end) {}
pic at (current plot begin) {start marker=2pt};%Put the starting marker
}
\end{axis}
\end{tikzpicture}
绘制如下图
使用此精确数据(prob3.txt):
pr1 pi1 pr2 pi2 pr3 pi3 pr4 pi4 k
0 0 -1 0 -2 1 -2 -1 0
-0.043035 0 -0.9 0 -2.0285 1.0103 -2.0285 -1.0103 0.1989
-0.14648 0 -0.70634 0 -2.0736 1.0295 -2.0736 -1.0295 0.55456
-0.37852 0 -0.40764 0 -2.1069 1.0459 -2.1069 -1.0459 0.85374
-0.39299 0 -0.39299 0 -2.107 1.0459 -2.107 -1.0459 0.8546
-0.3929 0.014558 -0.3929 -0.014558 -2.1071 1.046 -2.1071 -1.046 0.85545
-0.32759 0.39389 -0.32759 -0.39389 -2.1724 1.0824 -2.1724 -1.0824 1.5462
-0.3132 0.43556 -0.3132 -0.43556 -2.1868 1.0911 -2.1868 -1.0911 1.719
-0.29944 0.47216 -0.29944 -0.47216 -2.2006 1.0996 -2.2006 -1.0996 1.8917
-0.27357 0.53465 -0.27357 -0.53465 -2.2264 1.1162 -2.2264 -1.1162 2.2373
-0.22727 0.63256 -0.22727 -0.63256 -2.2727 1.1475 -2.2727 -1.1475 2.9285
-0.15017 0.77197 -0.15017 -0.77197 -2.3498 1.2035 -2.3498 -1.2035 4.3109
Inf 0 Inf 0 Inf 0 Inf 0 Inf
我还注意到最后一组列 ( pr4/pi4
) 没有被绘制出来。任何想法都可以提供帮助(可能与它没有绘制超过 y = -0.8 的部分有关)