Como posso plotar uma função sum usando o gnuplot?

1

Eu quero traçar a seguinte função %código% onde aeb valores estão listados na primeira e segunda colunas de um arquivo de entrada, respectivamente, como este

a1 b1
a2 b2
a3 b3

.....
an bn

agora eu estou plotando usando o seguinte comando

plot a1*exp(-0.001*(x-b1)**2) + a2*exp(-0.001*(x-b2)**2) + a1*exp(-0.001*(x-b3)**2) ...etc

O que eu preciso é de um curto comando para plotar todos os dados sem escrever todos os dados um por um.

o resultado esperado deve ser uma linha contínua como esta

    
por Mohsen El-Tahawy 09.11.2017 / 21:47

2 respostas

2

O mais simples é provavelmente usar o awk para gerar o comando de plotagem desejado. Por exemplo,

f(a,b,x)=a*exp(-0.001*(x-b)**2)
sum(x) = 'awk <data '{v = v sprintf("f(%s,%s,x)+",$1,$2)} END{print v "0"}''
set xrange [250:650]
plot sum(x)

Isso usa backticks dentro do arquivo de comando do gnuplot para executar o awk, que lê o arquivo de dados e gera uma string como:

f(1,2,x)+f(3,4,x)+...0

em que 1,2 3,4 são os primeiros 2 conjuntos de valores dos dados. A função definida pelo usuário do gnuplot sum() está configurada para isto, e você pode plotar isto.

    
por 09.11.2017 / 23:37
0

Se eu entendi corretamente, você está procurando por algo como:

com gnuplot 5.0:

gnuplot> set title "sum columns"
gnuplot> set size square
gnuplot> plot 'inputfile' u 1:($1*exp(-0.001*(x-$2)**2)) w linespoints

A saída:

    
por 09.11.2017 / 23:40

Tags