我曾多次尝试为项目的小部分寻求帮助,但都无法使其发挥作用,因此我在这里提出更大的问题。
我的问题:我为想要评估函数的点生成了一个数字列表(在感兴趣的值附近添加点),但这个列表的排序不正确。因此,在绘制函数之前,我一直试图对其进行排序,否则绘图会很混乱
以下是最低限度清洁后的效果:
\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