这是我现在的代码:
\documentclass{minimal}
\usepackage{tikz}
\usetikzlibrary{calc,arrows}
\begin{document}
\begin{tikzpicture}[
scale=1.5,
axis/.style={very thick, ->, >=stealth'},
important line/.style={thick},
dashed line/.style={dashed, thick},
every node/.style={color=black,}
]
\draw[axis] (0,0) -- (6,0) node(xline)[right] {$k$};
\draw[axis] (0,-2) -- (0,2) node(yline)[above] {$\dot{k}$};
\draw (0,0) .. controls (0,2) and (2,2) .. (2,2);
\draw (2,2) .. controls (4,2) and (4,0) .. (6,-2);
\fill[black] (4,0) circle (1pt) node[above right] {$k^*$};
\end{tikzpicture}
\end{document}
答案1
至少有三种可能性:
构造一个具有所需属性的多项式,例如它必须经过的点、斜率、最小值、最大值等。需要少量数学知识。请参阅我的其他答案。
这是安德鲁 (Andrew) 使用 TikZ 功能给出的答案。
对于假曲线,选择曲线必须经过的点作为
\draw
命令的开始或结束,而不是作为控制点。此外,使用相对坐标(前缀为+
)作为控制点。这些将对应于此点的切线。确保点上的控制向量指向相反的方向。它们的长度可能不同,但需要具有相同的角度,否则此点将出现弯曲。
例子: k^*
是第一个的终点\draw
和第二个的起点,因此曲线将穿过k^*
。与 相关的控件k^*
是+(-1,2)
和+(0.5,-1)
。请注意,它们指向相反的方向。控制向量越长,曲线尝试遵循此方向的时间就越长。
\documentclass{minimal}
\usepackage{tikz}
\usetikzlibrary{calc,arrows}
\begin{document}
\begin{tikzpicture}[
scale=1.5,
axis/.style={very thick, ->, >=stealth'},
important line/.style={thick},
dashed line/.style={dashed, thick},
every node/.style={color=black,}
]
\draw[axis] (0,0) -- (6,0) node(xline)[right] {$k$};
\draw[axis] (0,-2) -- (0,2) node(yline)[above] {$\dot{k}$};
\draw (0,0) .. controls +(1.5,3) and +(-1,2) .. (4,0);
\draw (4,0) .. controls +(0.5,-1) and +(-0.8,0.5) .. (6,-2);
\fill[black] (4,0) circle (1pt) node[above right] {$k^*$};
% just for the explanation
\begin{scope}[->,blue,every node/.style={blue,sloped}]
\draw (0,0) -- node[yshift=1.5ex]{$(1.5,3)$} ($(0,0)+(1.5,3)$);
\draw (4,0) -- node[yshift=1.5ex]{$(-1,2)$} ($(4,0)+(-1,2)$);
\draw (4,0) -- node[yshift=-1.5ex]{$(0.5,-1)$} ($(4,0)+(0.5,-1)$);
\draw (6,-2) -- node[yshift=-1.5ex]{$(-0.8,0.5)$} ($(6,-2)+(-0.8,0.5)$);
\end{scope}
\end{tikzpicture}
\end{document}
答案2
这hobby
旨在轻松生成通过特定点的曲线。它在设计时考虑了 2D 曲线,需要一点技巧才能绘制出真实的图形,但在这种情况下它仍然可以生成合理的曲线。
\documentclass{article}
%\url{https://tex.stackexchange.com/q/582112/86}
\usepackage{tikz}
\usetikzlibrary{calc,arrows,hobby}
\begin{document}
\begin{tikzpicture}[
scale=1.5,
axis/.style={very thick, ->, >=stealth'},
important line/.style={thick},
dashed line/.style={dashed, thick},
every node/.style={color=black,},
use Hobby shortcut
]
\draw[axis] (0,0) -- (6,0) node(xline)[right] {$k$};
\draw[axis] (0,-2) -- (0,2) node(yline)[above] {$\dot{k}$};
\draw (0,0) .. controls (0,2) and (2,2) .. (2,2);
\draw (2,2) .. controls (4,2) and (4,0) .. (6,-2);
\fill[black] (4,0) circle (1pt) node[above right] {$k^*$};
\draw[orange, ultra thick] ([out angle=70]0,0) .. (2,2) .. (4,0) .. (6,-2);
\end{tikzpicture}
\end{document}
答案3
这是一个解决方案,我们首先确定一个多项式,然后绘制它。多项式的复杂性(度)取决于我们想要施加的约束数量。我们假设函数应该通过点(0,0)
、(2,2)
和(4,0)
,并且还应该选择性地通过(6,-2)
。这意味着我们寻找二次或三次多项式(三个或四个自由度)。
二次多项式:
p(x) = a + bx + cx^2
constraints: p(0)=0, p(2)=2, p(4)=0
solution: a=0, b=2, c=-1/2
I.e.: p(x) = 2x + x^2/2
三次多项式:
p(x) = a + bx + cx^2 + dx^3
constraints: p(0)=0, p(2)=2, p(4)=0, p(6)=-2
solution: a=0, b=8/3, c=-1, d=1/12
I.e.: p(x) = 8x/3 - x^2 + x^3/12
\documentclass{minimal}
\usepackage{tikz}
\usetikzlibrary{calc,arrows}
\begin{document}
\begin{tikzpicture}[
scale=1.5,
axis/.style={very thick, ->, >=stealth'},
important line/.style={thick},
dashed line/.style={dashed, thick},
every node/.style={color=black,}
]
\draw[axis] (0,0) -- (6,0) node(xline)[right] {$k$};
\draw[axis] (0,-2) -- (0,2) node(yline)[above] {$\dot{k}$};
\fill[black] (4,0) circle (1pt) node[above right] {$k^*$};
\draw[domain=0:6,blue,smooth] plot ({\x},{2*\x-\x^2/2});
\draw[domain=0:6,red,smooth] plot ({\x},{8*\x/3-\x^2+\x^3/12});
\end{tikzpicture}
\end{document}