在 Latex 中绘制 y^2=x^3+7

在 Latex 中绘制 y^2=x^3+7

我的问题参考这个帖子: 在 Latex 中绘制椭圆曲线 我希望它们不太相似,但这些问题的答案对我来说不起作用。我正尝试在 Latex 中绘制它

但是,当我尝试使用问题“在 Latex 中绘制椭圆曲线”中的答案中的代码时,我始终得到一条左侧开放的曲线。

我正在使用 Texmaker 并希望将此图包含在文档类中

\documentclass[11pt,a4paper,british,openright]{book}

如果有人能告诉我在使用 Latex 实现这个功能时所犯的错误,或者告诉我如何正确实现它,我会非常高兴。

在评论中,有人建议我更改“域”部分。但我不知道这部分对我的情节有什么作用,所以最后变得相当混乱。

\documentclass[border=5pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{pgfplots}

\pgfplotsset{
    compat=1.12,
}
\begin{document}
\begin{tikzpicture}
    \begin{axis}[
        xmin=-3,
        xmax=4,
        ymin=-7,
        ymax=7,
        xlabel={$x$},
        ylabel={$y$},
        scale only axis,
        axis lines=middle,
        % set the minimum value to the minimum x value
        % which in this case is $-\sqrt[3]{7}$
        domain=-2.646:4,
        samples=200,
        smooth,
        % to avoid that the "plot node" is clipped (partially)
        clip=false,
        % use same unit vectors on the axis
        axis equal image=true,
    ]
        \addplot [red] {sqrt(x^3+7)}
            node[right] {$y^2=x^3+7$};
        \addplot [red] {-sqrt(x^3+7)};
        \draw[color=blue] (-4, 0) node[left] {$\bullet$};
        \draw[color=blue] (-1.71, 1.4) node[left] {$P_1$};
        \draw[color=blue] (-1.71, 1.4) node[left] {$\bullet$};
        \draw[color=blue] (0.33,2.65) node[left] {$P_2$};
        \draw[color=blue] (0.33,2.65) node[left] {$\bullet$};
        \draw[color=blue] (1.76, 3.53) node[left] {$R$};
        \draw[color=blue] (1.76, 3.53) node[left] {$\bullet$};
        \draw[color=blue] (1.76, -3.53) node[left] {$P_3 = P_1+P_2$};
        \draw[color=blue] (1.76, -3.53) node[left] {$\bullet$};
    \end{axis}
\end{tikzpicture}
\end{document}

(这是我多次尝试让它发挥作用的其中一次。)它看起来像这样: 在此处输入图片描述

如果有人能帮助我,我将非常感激。

一切顺利,

卢卡

答案1

正如下面的评论中所述,达莱夫并在回答中约翰内斯domain由于您使用了错误的起点,因此曲线没有“闭合” 。

(有趣的是,你用过我的回答来自相应的问题,但无论出于何种原因,将domain起点改为-2.646...我们也已经在该答案下面的评论中讨论过这一点。)

对于第二点:您的标记没有绘制在您期望的位置,因为您首先声明一个坐标,然后说应该绘制一个节点[left]指定坐标的作为$\bullet$文本

请查看代码的注释来了解其工作原理的更多细节。

\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
    % `calc' library used for the line from (P0) through (P3)
    \usetikzlibrary{calc}
    \pgfplotsset{compat=1.12}
\begin{document}
    \begin{tikzpicture}[
        % define the style `point' which is used for the nodes on the coordinates
        point/.style={
            circle,
            fill=blue,
            inner sep=1.5pt,
        },
    ]
        \begin{axis}[
            xmin=-4.5,
            xmax=4,
            ymin=-7,
            ymax=7,
            xlabel={$x$},
            ylabel={$y$},
            scale only axis,
            axis lines=middle,
            % set the minimum value to the minimum x value
            % which in this case is $-\sqrt[3]{7}$
            domain=-1.912931:3,
            samples=200,
            smooth,
            % to avoid that the "plot node" is clipped (partially)
            clip=false,
            % use same unit vectors on the axis
            axis equal image=true,
        ]
            \addplot [red] {sqrt(x^3+7)}
                node[right] {$y^2=x^3+7$};
            \addplot [red] {-sqrt(x^3+7)};

            % add nodes to the points and the corresponding labels
            \node [point]
                (P0) at (-4,0)       {};
            \node [point,label={left:$P_1$}]
                (P1) at (-1.71,1.4)  {};
            \node [point,label={above:$P_2$}]
                (P2) at (0.33,2.65)  {};
            \node [point,label={right:$P_3 = P_1 + P_2$}]
                (P3) at (1.76,3.53)  {};
            \node [point,label={right:$R$}]
                (R)  at (1.76,-3.53) {};

            % draw a line from (P0) a bit further than just to (P3)
            \draw [blue] (P0) -- ($ (P0)!1.1!(P3) $);
        \end{axis}
    \end{tikzpicture}
\end{document}

该图显示了上述代码的结果

答案2

使用domain=<x1>:<x2>和,samples=<num>您可以指定在哪些点pgfplots处计算函数值。因此,只有当这样的数据点恰好是函数的根时,绘图才会从 x 轴开始。

最朴素的解决方案是将样本数量增加到荒谬的数量,然后只希望获得最佳效果。更聪明的方法是手动计算根(正如 daleif 已经建议的那样)并相应地指定域。


编辑:由于 Stefan 已经解决了节点标签的问题,我只想向您展示另一种计算交点的方法(似乎不适用于该smooth选项):

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.12}
\usetikzlibrary{intersections}

\begin{document}
\begin{tikzpicture}
  \begin{axis}[
    xmin=-4.5,xmax=4,ymin=-7,ymax=7,
    xlabel=$x$,ylabel=$y$,
    scale only axis,axis lines=middle,
    samples=200,%smooth,
    clip=false,axis equal image=true
  ]
    \addplot [red,domain=-1.91293:4,name path=CurveA] {sqrt(x^3+7)};
    \addplot [red,domain=-1.91293:4,name path=CurveB] {-sqrt(x^3+7)};
    \path [name path=LineA] (-4,0) -- (4,4.90);
    \path [name path=LineB] (-4,0) -- (4,-4.90);
    \fill [blue,name intersections={of=CurveA and LineA}]
      (intersection-1) circle (2pt) node [above left] {$P_1$}
      (intersection-2) circle (2pt) node [below right] {$P_2$}
      (intersection-3) circle (2pt) node [below right] {$R$};
    \path [blue,name intersections={of=CurveB and LineB}];
    \fill [blue] (intersection-3) circle (2pt)
      node [above right] {$P_3 = P_1 + P_2$};
    \fill [blue] (-4,0) circle (2pt);
    \fill [blue] (-4,0) circle (2pt);
  \end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容