我想要制作下图这样的图形。
我的努力是:
\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.5
到5.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}}
来解决该问题。
同样,我假设 应该
dashedd
是dashed
。所以我定义了\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-eucl
CTAN 的最新信息或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}