Как построить суммирование по функции exp в gnuplot?

590
Mohsen El-Tahawy

Есть ли какой-нибудь короткий способ построить следующую сумму функции exp?

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

где значения f и L отсортированы в кулонах 1 и 2 в файле data.dat соответственно.

1

1 ответ на вопрос

1
Joce

Так строка iфайла содержит f_i L_i? Вы можете сделать это с помощью вызова функции:

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

(здесь абсциссы будут обозначать номер строки, псевдостолбец $0). Здесь xпредполагается, что она исправлена ​​раньше, например, с помощью x=...команды.

Но я думаю, что вы хотели для каких-либо xзначений, построить результат суммирования?

Тогда вам нужно будет сделать большое количество этих сумм, нанося только последнюю точку для каждой 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))) 

Вы не сможете соединить точки линией, если сначала не перенаправите свой график в таблицу, а затем построите эту таблицу.

Похожие вопросы