下面的代码生成函数的轮廓线$(x,y)\mapsto e^{-x^2-y^2}$
。我想要:
- 平滑轮廓线。我发现此解决方案直接使用 gnuplot 时,whis 是有效的。但是,使用 gnuplot通过TikZ 似乎无法处理“ isosamples ”变量,或者至少我没有成功使用它。
- 添加梯度矢量来可视化它们与轮廓线的正交性。
任何帮助,将不胜感激 !
\documentclass[a4paper,10pt]{article}
% TikZ Figures
\usepackage{tikz,pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[ticks=none,xlabel=$x$,ylabel=$y$,domain=-2:2,view={0}{90}]
\addplot3 [contour gnuplot={
labels=false,
number=5} ] {exp(-x^2-y^2)};
\end{axis}
\end{tikzpicture}
\end{document}
答案1
一个例子渐近线代码。
编译于http://asymptote.ualberta.ca/
import graph;
import contour;
size(300,false);
pair a=(-2,-2),b=(2,2);
real f(real x, real y){ return exp(-x^2-y^2);}
// The gradient vector of f(x,y)
pair F(pair z)
{
real x = z.x, y = z.y;
return (-2*x*f(x,y),-2*y*f(x,y));
}
path vector(pair z) {return (0,0)--F(z);}
guide[][] g=contour(f,a,b,uniform(0,1,10),350);
guide[] G=concat(... g);
pen[] p={red, green, blue, orange, gray};
p.cyclic=true;
for (int i=0; i<G.length; ++i) draw(G[i],p[i]+0.8bp);
limits(a+(0.3,0.3),b-(0.3,0.3));
add(vectorfield(vector,a+(0.3,0.3),b-(0.3,0.3),15));
crop();
xaxis("$x$",BottomTop,LeftTicks(Size=4),above=true);
yaxis("$y$",LeftRight,RightTicks(Size=4),above=true);
shipout(bbox(mm,invisible));