pgfplot 是常数零

pgfplot 是常数零

目前,我正在尝试将使用 python 和 matplotlib 制作的图转换为 pgfplot,但该图为常数零。我检查了公式,它似乎是正确的,所以我不知道为什么这些图不同。这是 tex 和 python 代码:

\begin{tikzpicture}
\pgfmathsetmacro{\r}{4}
\pgfmathsetmacro{\l}{(20e-6)}
\pgfmathsetmacro{\c}{((1/20)*1e-6)}

\begin{axis}[
    xmin=1,
    xmax=2e6,
    samples=5000,
    xlabel=$\omega$]

    \addplot[domain=2:2e6, black, thick] {1/(1 + ((x*\l)/\r - 1/(x*\r*\c))^2)};
\end{axis}
\end{tikzpicture}


def frac(a, b):
    return a / b

def h(w, r, l, c):
    return frac(1, 1 + (frac(w*l, r) - frac(1, w*r*c))**2)

我很高兴得到任何帮助!

答案1

您的问题是 正在对\pgfmathsetmacro{}数字进行四舍五入,并且 的数字范围pgfmath非常有限(参见注释 2)。我添加了一个调试节点来向您显示您的\l(参见注释 1)是0.0...

我建议使用这种declare function工具(此外,语法要好得多)。数字范围仍然会受到限制,而且dimension too large很容易出错,但它更稳定。

\documentclass[border=10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,positioning,calc}
\usepackage{pgfplots}\pgfplotsset{compat=newest}
\begin{document}
\begin{tikzpicture}
    \pgfmathsetmacro{\l}{(20e-6)}
    \tikzset{declare function={
            L=20e-6;
            R=4;
            C=(1/20)*1e-6;
        }
    }

    \node[red] at (3,3) {l is \l}; % just to debug

    \begin{axis}[
        xmin=1,
        xmax=2e6,
        samples=150,
        xlabel=$\omega$]

        \addplot[domain=2:2e6, black, thick] {1/(1 + (x*L/R - 1/(x*R*C))^2)};
    \end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述


注1:尽量不要使用单字母宏。这非常危险,因为核心 LaTeX 中有很多宏是为重音符定义的,事情可能会以难以想象的方式爆发。

笔记2pgfplots手册上说:

在此处输入图片描述 在此处输入图片描述

但请注意,使用fpu手动操作可能比较棘手

还有其他数学引擎,例如xfp,它们更“标准”,但与其他引擎的集成度不是很好pgf。对于非常复杂的计算,最好使用外部工具,然后导入数据点。

相关内容