对数字进行排序,以便将其用作示例列表或将列表转换为数组并转回

对数字进行排序,以便将其用作示例列表或将列表转换为数组并转回

我曾多次尝试为项目的小部分寻求帮助,但都无法使其发挥作用,因此我在这里提出更大的问题。

我的问题:我为想要评估函数的点生成了一个数字列表(在感兴趣的值附近添加点),但这个列表的排序不正确。因此,在绘制函数之前,我一直试图对其进行排序,否则绘图会很混乱

以下是最低限度清洁后的效果:

\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
 
\usepackage{listofitems} % \readlist\WcArray{0.1,1,10}

\usepgflibrary{fpu} % Avoid usual Latex calculation limits 
\newcommand\pgfmathparseFPU[1]{\begingroup%
\pgfkeys{/pgf/fpu,/pgf/fpu/output format=fixed}%
\pgfmathparse{#1}%
\pgfmathsmuggle\pgfmathresult\endgroup}%

% evenly spaced point from start to end
\newcommand*{\CreateList}{
\def\mySamplLst{\Wmin}
\xdef\mySamplNb{10}
\pgfmathparseFPU{(\Wmax/\Wmin)^(1/\mySamplNb)}
\xdef\myStep{\pgfmathresult}
\foreach \i in {1,2,...,\mySamplNb} {\pgfmathparseFPU{\Wmin*(\myStep^(\i))}
  \xdef\mySamplLst{\mySamplLst,\pgfmathresult}}
  
% evenly spaced point around a point of interest
\foreach \j in {1,...,\WcArraylen}{
\def\mySamplNb{5}
\def\mySamplCenter{\WcArray[\j]}
\def\mySamplwidth{10}
\pgfmathparseFPU{\mySamplwidth^(1/\mySamplNb)}
\xdef\myStep{\pgfmathresult}
\foreach \i in {-\mySamplNb,...,-1,0,1,2,...,\mySamplNb} {\pgfmathparseFPU{\mySamplCenter*(\myStep^(\i))}
  \xdef\mySamplLst{\mySamplLst,\pgfmathresult}}
}
}

\begin{document}
\begin{tikzpicture} 
    \def\Wmax{10^(2)}
    \def\Wmin{.01}
        \readlist\WcArray{0.1,1,10}
    \CreateList
    \begin{semilogxaxis}
        \expanded{\noexpand
            \addplot [samples at={\mySamplLst}] %=200,domain=\Wmin:\Wmax,mark=+]
            {   -20*(log10(x))
                +10*(log10((1-(x)^2)^2+4*(0.1^2)*(x)^2)) 
            }[green!80!black,very thick];
        }
    \end{semilogxaxis}
\end{tikzpicture}
\end{document}

给予:

在此处输入图片描述

你能如何帮助我

  • 对我的列表进行排序:

    • 我之前收到过帮助,代码适用于您输入的列表,但它不适用于我生成的列表。
  • 将列表转换为数组,再将数组转换为列表

    • 我找到了一种对数组进行排序的方法,但我不知道如何将列表转换为数组。我需要回到我的绘图方式。

    对数组进行排序:

     \usepackage[comparestr,comparenum,randompart]{arraysort}
    
     \begin{document} 
     \newarray{A}
     \readarray{A}{78&4&85&1&28&6&0.1&0.07}
     \sortArray{8}{A}
     \A(1) \A(2) \A(3) \A(4) \A(5) \A(6)
     \end{document}
    

但是您可以看到它用作&分隔符和列表用途,,所以我不能只使用:\readarray{A}{\mySamplLst}

感谢您的阅读

答案1

你的示例无法编译。我收到错误

 ! Package pgfkeys Error: I do not know the key '/pgfplots/mysum',

但你可以用这个代码对列表进行排序

\ExplSyntaxOn
\cs_new_protected:Npn \LMTsortlist #1
 {
  \clist_sort:Nn #1 
   {
    \fp_compare:nNnTF {##1}>{##2}
     {\sort_return_swapped:}
     {\sort_return_same: }
   } 
 }
\ExplSyntaxOff

然后后来

\LMTsortlist \mySamplLst

相关内容