gnuplotを使用して合計関数を描画するには?

gnuplotを使用して合計関数を描画するには?

sum a*exp(-0.001*(x-b)**2) 以下のように、入力ファイルの最初の列と2番目の列にそれぞれaとbの値がリストされている次の関数をプロットしたいと思います。

a1 b1
a2 b2
a3 b3

.....
an bn

次に、次のコマンドを使用してプロットします。

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

私にとって必要なのは、すべてのデータを1つずつ書き込むのではなく、すべてのデータをプロットする短いコマンドです。

予想される出力は、次の連続線でなければなりません。

予想される出力は、次の連続線でなければなりません。

答え1

最も簡単な方法は、おそらくawkを使用して必要な描画コマンドを生成することです。例えば、

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)

これは、gnuplotコマンドファイルのバックティックを使用してawkを実行します。 awk はデータファイルから読み込み、次の文字列を生成します。

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

ここで、1,2 3,4 はデータの最初の 2 つの値のセットです。 gnuplotカスタム関数はsum()これに設定されてプロットできます。

ここに画像の説明を入力してください。

答え2

私が正しく理解した場合は、次のようなものを探しています。

そしてgnuplot5.0:

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

出力: ここに画像の説明を入力してください。

関連情報