||
2015-01-18 14:29:06
利用gnuplot的gif终端可以制作简单的动画, 制作时可以使用reread命令, 像马欢的博文中介绍的那样. 更简单的方法是使用do for命令.
下面是指数函数和高斯函数卷积的动画, 具体的理论请参看以前的博文.
# Language: gPLA=1; B=2a=1; b=50; k=0.1f(x)=A*exp(-a*x)*(x>0?1:0)g(x,t)=B*exp(-b*(t-x)**2)h(x)=.5*A*B*sqrt(pi/b)*exp(-a*(x-.25*a/b))*erfc(-sqrt(b)*x+.5*a/sqrt(b))set tit"Convolution of Exponential and Gaussian Function"set xl"t/{/symbolpi t}";set yl"Value"set xr [-2:3]dofor[t=-1/k:2/k]{#set object circle at k*t,h(k*t) fillcolor rgb 'red' fillstyle solid noborderplot f(x) lw 6 t"f({/symbolpi t})=exp(-{/symbolpi t}^2), {/symbolpi t}>0", g(k*t,x) lw 6 t"g({/symbolpi t})=2*exp(-50*{/symbolpi t}^2)", f(x)*g(k*t,x) lw 6 t"f(t)g(t-{/symbolpi t})", h(x) lw 6 t"h(t)", '+' u (k*t):(h(k*t)) w p pt 7 ps 4 t""}
# Language: gPLA=1; B=2a=1; b=50; k=0.1f(x)=A*exp(-a*x)*(x>0?1:0)g(x,t)=B*exp(-b*(t-x)**2)h(x)=.5*A*B*sqrt(pi/b)*exp(-a*(x-.25*a/b))*erfc(-sqrt(b)*x+.5*a/sqrt(b))set tit"Convolution of Exponential and Gaussian Function"set xl"t/{/symbolpi t}";set yl"Value"set xr [-2:3]dofor[t=-1/k:2/k]{set label front at k*t,h(k*t)"" point pt 7 ps 4#set object circle at k*t,h(k*t) fillcolor rgb 'red' fillstyle solid noborderplot f(x) lw 6 t"f({/symbolpi t})=exp(-{/symbolpi t}^2), {/symbolpi t}>0", g(k*t,x) lw 6 t"g({/symbolpi t})=2*exp(-50*{/symbolpi t}^2)", f(x)*g(k*t,x) lw 6 t"f(t)g(t-{/symbolpi t})", h(x) lw 6 t"h(t)"}
绘制单个点时, gnuplot有三种方法, 使用set label绘点, 各个点会同时存在于最终的动画中, 而使用+或set object绘点各个点不会叠加到图上.
另外, gnuplot 5.0版本支持单独的各种虚线形式, 参考下面的讨论.
◆本文地址: http://jerkwin.github.io/2015/01/18/gnuplot动画, 转载请注明◆
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-7-23 07:17
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社