答案1
这是一个使用TikZ
和 的解决方案pgfplots
。在所示行上插入函数,并按所示插入关于 x 和 y 的导数。
根据功能,您可能需要调整箭头长度,这可以通过调整quiver/scale arrows=0.1
其他内容来实现(例如使其变0.1
小或变大)。您还可以调整指示的域的大小。
\documentclass{standalone}
\usepackage{tikz,pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
domain=-1:1,
xmax=1,
ymax=1,
]
\addplot3[blue,/pgfplots/quiver,
quiver/u=2*x, % derivative w.r.t. x
quiver/v=2*y, % derivative w.r.t. y
quiver/w=0,
quiver/scale arrows=0.1,
-stealth,samples=10] {-2};
\addplot3[mesh,draw=blue] {x^2+y^2}; % function
\end{axis}
\end{tikzpicture}
\end{document}
有关可以做什么的更多想法,这里有大量的使用示例pgfplot
:http://pgfplots.sourceforge.net/gallery.html
答案2
我同意 rbrignall 的观点,这里可以使用箭头图。不过,我还想补充几点
- 如果您有一个缓慢变化的函数,您可以让 pgfplots 计算导数。
- 由于函数变化缓慢,因此您需要对箭头进行相当大的缩放。
- 指示 对您有好处
compat=1.16
。旧的兼容模式与最新的兼容模式有很大不同。 - 你需要
3d box=complete
有一个完整的盒子。
结果(使用类似于您的屏幕截图的功能):
\documentclass[tikz,border=3mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16,width=12cm}
\begin{document}
\begin{tikzpicture}
\begin{axis}[declare function={f(\x,\y)=0.5-pow(cos(\x)*cos(\y),2)-pow(cos(\x),2)-pow(cos(\y),2)
-0.5*pow(sin(\x)*sin(\y),2);},
zmin=-4.001,zmax=0.001,
domain=-90:90,ytick={-90,0,90},xtick={-90,0,90},
view={145}{30},3d box=complete]
\addplot3[color=blue,quiver={
u={(f(x+1,y)-f(x-1,y))},
v={(f(x,y+1)-f(x,y-1))},
w value=0,
scale arrows=180},
every arrow/.append style={line width=0.2pt},
%quiver/scale arrows=0.1,
-stealth,samples=15] {-4};
\addplot3[mesh,draw=blue] {f(x,y)}; % function
\end{axis}
\end{tikzpicture}
\end{document}