假设我想根据下图绘制三个简单的图形:
我该如何绘制这三个图表?我尝试创建类似这样的图表:
最小工作示例(MWE):
\documentclass{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[domain=0:1]
\addplot+[no marks, samples=100] {exp(3*x)};
\addplot+[no marks, samples=100] {(-exp(3*x)+20)};
\end{axis}
\end{tikzpicture}
\end{document}
当前状态截图:
问题说明:
但是,我不明白如何找出第三张图的功能,以及如何裁剪这些图并将x
它们y
对齐到图中的中心。不需要完全精确,我的上层模板的精度就足够了。
怎么做?
答案1
您可以使用函数 f1*f2/(f1+f2) 来获得类似于您描述的结果。为了使代码更清晰,我定义了函数f1
和f2
。
\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{%
compat=1.12,
/pgf/declare function={f1(\x)=exp(3*\x);},
/pgf/declare function={f2(\x)=-exp(3*\x)+20;},
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[domain=0:1]
\addplot+[no marks, samples=100] {f1(x)};
\addplot+[no marks, samples=100] {f2(x)};
\addplot+[no marks, samples=100] {f1(x)*f2(x)/(f1(x)+f2(x))};
\end{axis}
\end{tikzpicture}
\end{document}
如果您希望函数更紧密地跟随,则可以使用 sqrt(f1^2*f2^2/(f1^2+f2^2)。然后将第三个图替换为
\addplot+[no marks, samples=100] {sqrt(f1(x)*f1(x)*f2(x)*f2(x)/(f1(x)*f1(x)+f2(x)*f2(x)))};
要得到
稍微更一般地,可以使用指数\a
(不必是整数):
\foreach \a in {1,...,5}{
\addplot+[no marks, samples=100] {(f1(x)^\a*f2(x)^\a/(f1(x)^\a+f2(x)^\a))^(1/\a)};
}
答案2
您在寻找最小值吗?(我稍微改变了一下情节,但您当然可以撤消这种改变。)
\documentclass[border=3.14mm,tikz]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\begin{document}
\begin{tikzpicture}
\begin{axis}[domain=0:1]
\addplot+[no marks, samples=100] {exp(3*x)};
\addplot+[no marks, samples=100] {(-exp(3*x)+20)};
\addplot+[no marks, samples=6,smooth]
{min(exp(3*x),(-exp(3*x)+20))-pi/2};
\end{axis}
\end{tikzpicture}
\end{document}