1

Есть ли какой-нибудь короткий способ построить следующую сумму функции 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

Итак, строка 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)))

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .