gnuplot动画

类别:    标签: gnuplot 动画   阅读次数:   版权: (CC) BY-NC-SA

2015-01-18 14:29:06

利用gnuplot的gif终端可以制作简单的动画, 制作时可以使用reread命令, 像马欢的博文中介绍的那样. 更简单的方法是使用do for命令.

下面是指数函数和高斯函数卷积的动画, 具体的理论请参看以前的博文.

# Language: gPL
A=1; B=2
a=1; b=50; k=0.1
f(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]
do for [t=-1/k:2/k] {
	#set object circle at k*t,h(k*t) fillcolor rgb 'red' fillstyle solid noborder
	plot 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""
}

Fig. 1

# Language: gPL
A=1; B=2
a=1; b=50; k=0.1
f(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]
do for [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 noborder
	plot 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)"
}

Fig. 2

绘制单个点时, gnuplot有三种方法, 使用set label绘点, 各个点会同时存在于最终的动画中, 而使用+set object绘点各个点不会叠加到图上.

另外, gnuplot 5.0版本支持单独的各种虚线形式, 参考下面的讨论.

◆本文地址: , 转载请注明◆
◆评论问题: https://jerkwin.herokuapp.com/category/3/博客, 欢迎留言◆


前一篇: 我使用的markdown工具
后一篇: 轨道查看器OribitalViewer汉化版

访问人次(2015年7月 9日起): | 最后更新: 2024-04-16 06:38:20 UTC | 版权所有 © 2008 - 2024 Jerkwin