7

テキスト ファイルの値に基づいて関数をプロットする方法はありますか?

gnuplot で関数を定義してプロットする方法は知っていますが、それは私が必要としているものではありません。定期的に更新される関数の定数を含むテーブルがあります。この更新が発生したら、この新しい曲線で図形を描画するスクリプトを実行できるようにしたいと考えています。描く図形が少ないので自動化したい。

定数を含むテーブルの例を次に示します。

location a  b  c
1        1  3  4
2

問題を解決するには2つの方法がありますが、それらを実装できるかどうか、およびどのように実装できるかはわかりません。

  1. 次に、awk を使用して文字列: を生成し、f(x)=1(x)**2+3(x)+4それをファイルに書き込み、何らかの方法で gnuplot にこの新しいファイルを読み取らせ、特定のx範囲でプロットさせることができます。
  2. または、gnuplot 内で awkf(x) = awk /1/ {print "f(x)="$2などを使用するか、plot コマンドで awk を直接使用します。

いずれにせよ、私は立ち往生しており、この問題の解決策をオンラインで見つけていません。何か提案はありますか?

4

3 に答える 3

3

これに対してやや一般的なバージョンを使用する別の可能性として、次のことができます。

パラメータがファイルに保存されparameters.dat、最初の行に変数名が含まれ、他のすべてのパラメータセットが次のように含まれていると仮定します。

location a b c
1        1 3 4

スクリプト ファイルは次のようになります。

file = 'parameters.dat'
par_names = system('head -1 '.file)
par_cnt = words(par_names)

# which parameter set to choose
par_line_num = 2
# select the respective string
par_line = system(sprintf('head -%d ', par_line_num).file.' | tail -1')
par_string = ''
do for [i=1:par_cnt] {
  eval(word(par_names, i).' = '.word(par_line, i))
}
f(x) = a*x**2 + b*x + c

plot f(x) title sprintf('location = %d', location)
于 2013-08-14T13:03:52.210 に答える
1

この質問 ( gnuplot store one number from data file into variable ) には、最初の回答でいくつかのヒントがありました。

私の場合、放物線のパラメータを含むファイルがあります。パラメータを gnuplot 変数に保存しました。次に、各タイムステップのパラメーター変数を含む関数をプロットします。

#!/usr/bin/gnuplot

datafile = "parabola.txt"

set terminal pngcairo size 1000,500
set xrange [-100:100]
set yrange [-100:100]
titletext(timepar, apar, cpar) = sprintf("In timestep %d we have parameter a = %f, parameter c = %f", timepar, apar, cpar)

do for [step=1:400] {
  set output sprintf("parabola%04d.png", step)

  # read parameters from file, where the first line is the header, thus the +1
  a=system("awk '{ if (NR == " . step . "+1) printf \"%f\", $1}' " . datafile)
  c=system("awk '{ if (NR == " . step . "+1) printf \"%f\", $2}' " . datafile)

  # convert parameters to numeric format
  a=a+0.
  c=c+0.

  set title titletext(step, a, c)

  plot   c+a*x**2
}

これにより、parabola0001.png、parabola0002.png、parabola0003.png、… という名前の一連の png ファイルが得られ、それぞれが というファイルから読み込まれたパラメータを持つ放物線を示していますparabola.txt。タイトルには、指定された時間ステップのパラメーターが含まれています。

gnuplotsystem()関数を理解するには、次のことを知っておく必要があります。

  • 二重引用符内のものは gnuplot によって解析されません
  • ドットは、gnuplot で文字列を連結するためのものです
  • awkprintfコマンドの二重引用符は、gnuplot パーサーから隠すためにエスケープする必要があります

この gnuplot スクリプトをテストするには、たとえば任意の名前でファイルに保存し、parabolaplot.gplot実行可能 ( chmad a+x parabolaplot.gplot) にします。parabola.txtファイルはで作成できます

awk 'BEGIN {for (i=1; i<=1000; i++) printf "%f\t%f\n", i/200, i/100}' > parabola.txt

于 2013-07-24T17:43:25.400 に答える
0
awk '/1/ {print "plot "$2"*x**2+"$3"*x+"$4}' | gnuplot -persist

ラインを選択してプロットします

于 2013-03-27T13:45:46.140 に答える