Questão Como plotar a soma sobre a função exp no gnuplot?


Existe algum caminho curto para traçar o somatório seguinte da função exp?

plot f1*exp(-0.001*(x-L1)^2) +  f2*exp(-0.001*(x-L2)^2) + etc

Onde f e eu os valores são classificados em coulmns 1 E 2 no arquivo data.dat, respectivamente.


1


origem




Respostas:


Então linha i de arquivo contém f_i L_i ? Você pode fazer isso usando uma chamada para uma função:

sumval=0
add(x)=(sumval=sumval+x)
plot "file.dat" using 0:(add($1*exp(-0.001*(x-$2)**2)))

(aqui as abscissas serão em termos de número de linha, pseudo-coluna $0) Aqui x Presume-se que seja fixado antes, emitindo, e. uma x=... comando.

Mas eu acho que o que você queria é para qualquer x valores, traçar o resultado da soma?

Então você precisaria fazer um grande número dessas somas, plotando apenas o último ponto para cada x.

N_samples=100 # number of points to plot
Xmin=0
Xmax=1.
x(ix)=Xmin+(Xmax-Xmin+0.)*ix/N_samples
stats "data.dat" 
N=STATS_records
sumval=0
currec=0
finished(v)=(sumval=0,currec=0,v) #reinitialise the counters
add(y)=(currec=currec+1,sumval=sumval+y,(currec==N)?finished(sumval):1/0)
plot [Xmin:Xmax] for [ix=0:N_samples] "file.dat" using (x(ix)):(add($1*exp(-0.001*(x(ix)-$2)**2)))

Você não poderá juntar pontos com uma linha a menos que você primeiro redirecione sua trama para uma tabela e, em seguida, plote a tabela.


1