如何绘制两个相交的图形?

如何绘制两个相交的图形?

我想要制作下图这样的图形。

在此处输入图片描述

我的努力是:

\documentclass{standalone}

\usepackage{pgfplots}
\usetikzlibrary{calc,shadings}
\usepackage{pgfplots}

\begin{document}
\begin{tikzpicture}
    \def\xmin{0}
    \def\xmax{10}
    \def\ymin{0}
    \def\ymax{7}
    \draw[style=help lines, ystep=1, xstep=1] ;

    \draw (-.25,-.25) node[auto] {0};
    \draw[->] (\xmin,\ymin) -- (\xmax,\ymin) node[right] {$x$};
    \draw[->] (\xmin,\ymin) -- (\xmin,\ymax) node[above] {$f(x)$};

    \def\intersectX1{2}
    \def\intersectY1{4/5+3}
    \def\intersectX2{7}
    \def\intersectY1{9/5+3}
    \def\intersectX{4.76}
    \def\intersectY{4.26}
    \def\QPX{4}
    \def\QPY{5}
    \draw[color=red,smooth] plot [domain=0:8] (\x,{((\x-4)^2)/5+3)});

    \draw[dashed]  (2,0) node[below] {$x_1$} -- (2,3.8) node[up,left] {$f(x_1)$};
    \draw[dashed]  (7,0) node[below] {$x_1$} -- (7,4.8) node[up,right] {$f(x_2)$};

    \draw[dashed,orange]  (4,0) node[below] {$\alpha\,x_1+(1-\alpha)x_2$} -- (4,3) node[below] {$f(\alpha\,x_1+(1-\alpha)x_2)$};
    \draw[color=black,dashedd] (4,3) -- (4,4.2) node[up] {$\alpha f(x_1) + (1-\alpha)f(x_2)$};
    \draw[color=blue] (2,3.8) -- (7,4.8);
\end{tikzpicture}
\end{document}

答案1

只是为了和 PSTricks 一起玩。我在有人编辑问题标题之前就完成了。

在此处输入图片描述

\documentclass[pstricks,border={2pt 2pt 14pt 14pt}]{standalone}
\usepackage{pst-eucl}
\usepackage{pst-plot}

\def\f(#1){#1 2 sub 2 exp 2 mul 9 div 1 add}
\def\g(#1){#1 2.5 div 1 add}

\begin{document}
\begin{pspicture}(-3,-1)(6,4)
    \psaxes[labels=none,ticks=none]{->}(0,0)(-3,-1)(6,4)[$x$,0][$y$,90]
    \psplot{0.5}{5.5}{\f(x)}
    \psplot[linecolor=magenta]{0.5}{5.5}{\g(x)}
    \rput(!5.5 {\f(5.5) 0.25 add}/Y ED Y){$f(x)$}
    \psset{PointName=none,PointSymbol=none}
    \pstInterFF{\f(x)}{\g(x)}{0.5}{A}
    \pstInterFF{\f(x)}{\g(x)}{5.5}{B}
    \pstGeonode
        (!2 {\g(2)}/Y ED Y){C}
        (!2 {\f(2)}/Y ED Y){D}
        (0,0|A){Ay}
        (A|0,0){Ax}
        (0,0|B){By}
        (B|0,0){Bx}
        (0,0|C){Cy}
        (C|0,0){Cx}
        (0,0|D){Dy}
        (D|0,0){Dx}
    \psset{linestyle=dashed,dash=2pt 1pt,linecolor=gray,linewidth=0.5\pslinewidth}
    \psline(Ax)(A)(Ay)
    \psline(Bx)(B)(By)
    \psline(Cx)(C)(Cy)
    \psline(Dx)(D)(Dy)
    \uput[-90](Ax){\tiny$x_1$}
    \uput[-90](Bx){\tiny$x_2$}
    \uput[-90](Cx){\tiny$tx_1+(1-t)x_2$}
    \uput[180](Cy){\tiny$tf(x_1)+(1-t)f(x_2)$}
    \uput[180](Dy){\tiny$f(tx_1+(1-t)x_2)$}
\end{pspicture}
\end{document}

评论

  • \usepackage{pst-eucl}(其中包括)\pstGeonode\pstInterFF
  • \usepackage{pst-plot}(其中包括)\psaxes\psplot
  • \def\f(#1){#1 2 sub 2 exp 2 mul 9 div 1 add}是 RPN(逆波兰表示法)中的二次函数。\f(#1)=2/9 * (#1-2)^2 + 1在中缀表示法中它等于。
  • \def\g(#1){#1 2.5 div 1 add}是RPN中的线函数。\g(#1)=#1/2.5 + 1在中缀表示法中,它等于。
  • \begin{pspicture}(-3,-1)(6,4)<drawing macros>\end{pspicture}定义绘图区域(画布)的大小。
  • \psaxes[labels=none,ticks=none]{->}(0,0)(-3,-1)(6,4)[$x$,0][$y$,90]x绘制带有和y标签但没有数字标签及其刻度标记的笛卡尔坐标轴。

    ->表示每个轴都有一个箭头。水平轴的箭头位于右端,垂直轴的箭头位于顶端。如果我们使用<-,我们会得到相反的位置;水平轴的箭头位于左端,垂直轴的箭头位于底部。使用<->使所有端点都有箭头。有很多选项可以改变箭头的形状,请查阅 PSTricks 文档了解详情。

  • \psplot{0.5}{5.5}{\f(x)}\f(x)0.55.5

  • \psplot[linecolor=magenta]{0.5}{5.5}{\g(x)}绘制\g(x)0.5到 的图5.5并将颜色线更改为洋红色。
  • \rput(!5.5 {\f(5.5) 0.25 add}/Y ED Y){$f(x)$}$f(x)$标签置于点处(5.5,f(5.5)+0.25)

    (!5.5 {\f(5.5) 0.25 add}/Y ED Y)是 RPN 中的一个点。它等于(5.5,f(5.5)+0.25)。RPN 版本似乎有些晦涩难懂,但经过一些练习后,您就会习惯。<operand> /Y ED Y是 的简写形式<operand> /Y exch def Y(当然,我们可以节省的击键次数并不多)。

  • \psset{PointName=none,PointSymbol=none}设置影响以下宏的选项。

  • \pstInterFF{\f(x)}{\g(x)}{0.5}{A}\f(x)在和\g(x)周围寻找最近的交点x=0.5。交点将被命名为A
  • \pstInterFF{\f(x)}{\g(x)}{5.5}{B}\f(x)在和\g(x)周围寻找最近的交点x=5.5。交点将被命名为B

  • 下列

    \pstGeonode
        (!2 {\g(2)}/Y ED Y){C}
        (!2 {\f(2)}/Y ED Y){D}
        (0,0|A){Ay}
        (A|0,0){Ax}
        (0,0|B){By}
        (B|0,0){Bx}
        (0,0|C){Cy}
        (C|0,0){Cx}
        (0,0|D){Dy}
        (D|0,0){Dx}
    

    用于定义

    • 指向C(2,g(2))

    • 指向D(2,f(2))

    • Py(0,<ordinate of P>)其中的点P应读作任意点。

    • Px(<abscissa of P>,0)其中的点P应读作任意点。

    你需要知道的理论是(<coordinate 1>|<coordinate 2>)代表一个等于 的新坐标(<abscissa of coordinate 1>, <ordinate of coordinate 2>)。有关详细信息,请参阅 PSTricks 文档。

  • \psline(Px)(P)(Py)绘制一系列从点开始Px到点结束的线Py

  • \uput[<angle>](<point>){<contents>}从点向<contents>方向 放。<angle>(<point>)

如果您有任何疑问,请发表评论。并确保使用latex->dvips->ps2pdf序列或单个编译代码xelatex

更新 1

我做了一些小改动。

  • \tiny全局缩放数学字体并对所有标签使用默认文本字体大小(而不是)。

    \usepackage{lmodern}
    \DeclareMathSizes{10}{8}{5}{4}
    
  • 删除 2 条不必要的水平虚线。

  • \rput使用而不是在水平轴上对齐标签\uput

在此处输入图片描述

\documentclass[pstricks,border={2pt 2pt 2pt 4pt}]{standalone}
\usepackage{pst-eucl}
\usepackage{pst-plot}

\usepackage{lmodern}
\DeclareMathSizes{10}{8}{5}{4}

\def\f(#1){#1 2 sub 2 exp 2 mul 9 div 1 add}
\def\g(#1){#1 2.5 div 1 add}

\begin{document}
\begin{pspicture}(-3,-0.5)(6,4)
    \psaxes[labels=none,ticks=none,arrowinset=0]{->}(0,0)(-3,-0.5)(6,4)%[$x$,0][$y$,90]
    \psplot{0.5}{5.5}{\f(x)}
    \psplot[linecolor=magenta]{0.5}{5.5}{\g(x)}
    \rput(!5.5 {\f(5.5) 0.2 add}/Y ED Y){$f(x)$}
    \psset{PointName=none,PointSymbol=none}
    \pstInterFF{\f(x)}{\g(x)}{0.5}{A}
    \pstInterFF{\f(x)}{\g(x)}{5.5}{B}
    \pstGeonode
        (!2.2 {\g(2.2)}/Y ED Y){C}
        (!2.2 {\f(2.2)}/Y ED Y){D}
        %(0,0|A){Ay}
        (A|0,0){Ax}
        %(0,0|B){By}
        (B|0,0){Bx}
        (0,0|C){Cy}
        (C|0,0){Cx}
        (0,0|D){Dy}
        (D|0,0){Dx}
        (0,-0.25){XLabel}
    \psset{linestyle=dashed,dash=2pt 1pt,linecolor=gray,linewidth=0.5\pslinewidth}
    \psline(Ax)(A)%(Ay)
    \psline(Bx)(B)%(By)
    \psline(Cx)(C)(Cy)
    \psline(Dx)(D)(Dy)
    \rput(Ax|XLabel){$x_1$}
    \rput(Bx|XLabel){$x_2$}
    \rput(Cx|XLabel){$tx_1+(1-t)x_2$}
    \uput[180](Cy){$tf(x_1)+(1-t)f(x_2)$}
    \uput[180](Dy){$f(tx_1+(1-t)x_2)$}
\end{pspicture}
\end{document}

最新更新

为了您的方便,使用了中缀表示法。

\documentclass[pstricks,border={2pt 2pt 2pt 4pt}]{standalone}
\usepackage{pst-eucl}
\usepackage{pst-plot}

\usepackage{lmodern}
\DeclareMathSizes{10}{8}{5}{4}

\def\f(#1){(2*(#1-2)^2/9+1)}
\def\g(#1){((#1)/2.5+1)}

\pstVerb{/I2P {exec AlgParser cvx exec} def}

\begin{document}
\begin{pspicture}(-3,-0.5)(6,4)
    \psaxes[labels=none,ticks=none,arrowinset=0]{->}(0,0)(-3,-0.5)(6,4)%[$x$,0][$y$,90]
    \psplot{0.5}{5.5}{{\f(x)} I2P}
    \psplot[linecolor=magenta]{0.5}{5.5}{{\g(x)} I2P}
    \rput(*5.5 {(\f(x)+0.2)}){$f(x)$}
    \psset{PointName=none,PointSymbol=none}
    \pstInterFF{{\f(x)} I2P}{{\g(x)} I2P}{0.5}{A}
    \pstInterFF{{\f(x)} I2P}{{\g(x)} I2P}{5.5}{B}
    \pstGeonode
        (*2.2 {\g(x)}){C}
        (*2.2 {\f(x)}){D}
        %(0,0|A){Ay}
        (A|0,0){Ax}
        %(0,0|B){By}
        (B|0,0){Bx}
        (0,0|C){Cy}
        (C|0,0){Cx}
        (0,0|D){Dy}
        (D|0,0){Dx}
        (0,-0.25){XLabel}
    \psset{linestyle=dashed,dash=2pt 1pt,linecolor=gray,linewidth=0.5\pslinewidth}
    \psline(Ax)(A)%(Ay)
    \psline(Bx)(B)%(By)
    \psline(Cx)(C)(Cy)
    \psline(Dx)(D)(Dy)
    \rput(Ax|XLabel){$x_1$}
    \rput(Bx|XLabel){$x_2$}
    \rput(Cx|XLabel){$tx_1+(1-t)x_2$}
    \uput[180](Cy){$tf(x_1)+(1-t)f(x_2)$}
    \uput[180](Dy){$f(tx_1+(1-t)x_2)$}
\end{pspicture}
\end{document}

答案2

tikz您可以使用的intersections库,而不必计算交叉点的坐标:

在此处输入图片描述

笔记:

  • 我不知道up风格是什么,所以我添加了

    \tikzset{up/.style={above}}
    

    来解决该问题。

  • 同样,我假设 应该dashedddashed。所以我定义了

    \tikzset{dashedd/.style={dashed}}
    

    如果是拼写错误,我建议更正 的拼写dashedd。如果您已经dashedd在其他地方定义,只需删除上面提到的\tikzset行即可。

代码:

\documentclass{standalone}

\usepackage{pgfplots}
\usetikzlibrary{calc,intersections,shadings}
\usepackage{pgfplots}

\tikzset{up/.style={above}}
\tikzset{dashedd/.style={dashed}}

\begin{document}
\begin{tikzpicture}
    \def\xmin{0}
    \def\xmax{10}
    \def\ymin{0}
    \def\ymax{7}
    \draw[style=help lines, ystep=1, xstep=1] ;

    \draw (-.25,-.25) node[auto] {0};
    \draw[->] (\xmin,\ymin) -- (\xmax,\ymin) node[right] {$x$};
    \draw[->] (\xmin,\ymin) -- (\xmin,\ymax) node[above] {$f(x)$};

    \def\intersectX1{2}
    \def\intersectY1{4/5+3}
    \def\intersectX2{7}
    \def\intersectY1{9/5+3}
    \def\intersectX{4.76}
    \def\intersectY{4.26}
    \def\QPX{4}
    \def\QPY{5}
    \draw[color=red,smooth, ultra thick, name path=My Function] plot [domain=0:8] (\x,{((\x-4)^2)/5+3)});

    \draw[dashed, name path=x1]  
           (2,0) node[below] {$x_1$} 
        -- (2,3.8) node[up,left, xshift=-0.2cm, yshift=0.1cm] {$f(x_1)$};

    \draw[dashed]  
           (7,0) node[below] {$x_2$}% <--- corrected
        -- (7,4.8) node[up,right, yshift=-0.15cm] {$f(x_2)$};

    \draw[dashed,orange, name path= Orange Line]  
           (4,0) node[below] {$\alpha\,x_1+(1-\alpha)x_2$} 
        -- (4,3) node[below] {$f(\alpha\,x_1+(1-\alpha)x_2)$};

    \draw[color=black,dashedd, name path=Dashed Vertical Line] (4,3) 
        -- (4,4.2) node[up] {$\alpha f(x_1) + (1-\alpha)f(x_2)$};
    \draw[color=magenta, thick, shorten <= -1.0cm, shorten >= -1.0cm, name path=Diagonal Line] (2,3.8) -- (7,4.8);

    %% Determine intersection of function and the dashed lines
    \draw [dashed, blue, name intersections={of=My Function and Orange Line}]
        (intersection-1) -| (0,0) node [left] {$f(tx_1 + (1-t)x_2)$};
    \draw [dashed, blue]
        (4,4.2) -- (0,4.2) node [left] {$tf(x_1) + (1-t) f(x_2)$};
\end{tikzpicture}
\end{document}

答案3

需要pst-euclCTAN 的最新信息或http://texnik.dante.de/tex/generic/pst-eucl/

\documentclass[pstricks,border={2pt 2pt 2pt 4pt}]{standalone}
\usepackage{pst-eucl}
\usepackage{pst-plot}

\def\f{2*(x-2)^2/9+1}
\def\g{x/2.5+1}

\begin{document}\footnotesize
\begin{pspicture}[algebraic](-3,-0.5)(6,4)
    \psaxes[labels=none,ticks=none]{->}(0,0)(-3,-0.5)(6,4)%[$x$,0][$y$,90]
    \psplot{0.5}{5.5}{\f}
    \psplot[linecolor=magenta]{0.5}{5.5}{\g}
    \rput(*5.5 {\f+0.2}){$f(x)$}
    \psset{PointName=none,PointSymbol=none}
    \pstInterFF{\f}{\g}{0.5}{A} 
    \pstInterFF{\f}{\g}{5.5}{B}
    \psset{linestyle=dashed,dash=2pt 1pt,linecolor=gray,linewidth=0.5\pslinewidth,dotstyle=o}
    \pnodes(*2.2 {\g}){C}(*2.2 {\f}){D}
    \psCoordinates(A) \psCoordinates(B) \psCoordinates(C) \psCoordinates(D)  
    \uput[-90](A | 0,0){$x_1\mathstrut$}
    \uput[-90](B | 0,0){$x_2\mathstrut$}
    \uput[-90](2.2,0){$tx_1+(1-t)x_2\mathstrut$}
    \uput[180](0,0 | C){$tf(x_1)+(1-t)f(x_2)$}
    \uput[180](0,0 | D){$f(tx_1+(1-t)x_2)$}
\end{pspicture}
\end{document}

在此处输入图片描述

相关内容