Есть ли какой-нибудь короткий способ построить следующую сумму функции exp?
plot f1*exp(-0.001*(x-L1)^2) + f2*exp(-0.001*(x-L2)^2) + etc
где значения f и L отсортированы в кулонах 1 и 2 в файле data.dat соответственно.
Есть ли какой-нибудь короткий способ построить следующую сумму функции exp?
plot f1*exp(-0.001*(x-L1)^2) + f2*exp(-0.001*(x-L2)^2) + etc
где значения f и L отсортированы в кулонах 1 и 2 в файле data.dat соответственно.
Итак, строка 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)))
Вы не сможете соединить точки линией, если сначала не перенаправите свой график в таблицу, а затем построите эту таблицу.