私は次のことをしたい:
ガウス線形に従ったデータセットがありますが、大きく逸脱しているデータがいくつかあります。結果の適合については、これらのデータポイントを含めないでください。
したがって、私の考えは、制限として2つのガウス分布を上と下に作成することです。そのため、これら2つのガウス分布の間にあるすべてのデータポイントだけが適合と見なされ、残りは外部と見なされません。
2つのガウス分布を簡単に作成し、次を使用してこれらのデータをテーブルに作成できます:(注意:data = data file)
set table '1.Gauss'
plot g(x)+0.1
unset table
set table '2.Gauss'
plot g(x)-0.1
unset table
set table 'all'
plot '1.Gauss', '2.Gauss', 'data'
unset table
しかし、その後:すべてのデータが次々にリストされます。さらに、これら2つのガウス分布の間にある場合は、このデータを使用すると言って、後でどのように適合させるかがわかりません。
他に何かアイデアはありますか?
追加:
私はプログラミングやgnuplotにあまり興味がないので、あなたのメッセージを理解するのが難しいです。これがgnuplotでの私のプログラミングのすべてです:
set xrange [1038.6603:1038.666]
set yrange [0.8:1.3]
file="data"
g(x) = N0*(A*exp(-(x-(b+d))2/(2*sigma2)))+c
N0=0.2; b=1038.66315;d=0.00001; c=1; A=3; sigma=0.0001
filterData(y,m,M)=((yM)? 1/0 : y)
fit h(x) file using 1:(filterData($2,g($1)-0.1,g($1)+0.1)) via N0,d,c,A,sigma
plot file using 1:(filterData($2,g($1)-0.1,g($1)+0.1)) g(x)-0.1, g(x)+1, h(x)
最後から2番目の行で、gnuplotは次のように述べています:「未定義の変数:x」
もちろん何かが足りないか間違っていることは知っていますが、どうすれば解決できるのか本当にわかりません。多分あなたのセリフにもコメントできますか?私のような素人がそれを理解できるように?ありがとうございました :)
ここに2番目の追加:
これが私のテキストのすべてです:
set xrange [1038.6598:1038.6663]
set yrange [0.8:1.3]
set fit errorvariables
file= "09_05_16-10.thzpp"
g(x) = N0*(A*exp(-(x-(b+d))**2/(2*sigma**2)))+c
N0=0.2; b=1038.66315;d=0.00001; c=1; A=3; sigma=0.0001
filterData(y,m,M)=((y<m||x>M)? 1/0 : y)
fit h(x) file using 1:(filterData($2,g($1)-0.1,g($1)+0.1)) via N0,d,c,A,sigma
plot file using 1:(filterData($2,g($1)-0.1,g($1)+0.1)), g(x)-0.1, g(x)+1, h(x)
これにより、「8行目:未定義の変数:x」というエラーが表示されます。
したがって、私のデータはx範囲にあります:[1038.6598:1038.6663]。最後の3行を削除して、代わりに使用する場合:
fit [1038.6603:1038.666] [0.95:1.2] g(x) file via N0,d,c,A,sigma
plot file title 'Messung', g(x) title 'Fit'
それは機能しますが、私はこのニース2ガウス制限を持っていません。
それで、私の上のテキストの何が問題になっていますか?
次のような関数を作成して、データをフィルタリングできます。
min_value = 1
max_value = 2
filterData(x)=(x < min_value || x > max_value) ? (1/0) : (x)
plot 'data' u 1:(filterData($2))
三項演算子:(is this true) ? it is true : it is false
および1/0
は未定義で、gnuplotは黙って無視します。
(未検証)
ガウス関数をファイルに保存する必要がある理由がわかりません。ガウス関数g
を使用して直接作業できます。
データを2つのガウス分布と比較するため、フィルタリング関数には、考慮される位置で最大値と最小値を指定する必要があります。
filterData(y,m,M)=((y<m||y>M)? 1/0 : y)
次に、プロットおよび/または適合できます。
fit h(x) 'data' using 1:(filterData($2,g($1)-0.1,g($1)+0.1)) via ...
plot 'data' using 1:(filterData($2,g($1)-0.1,g($1)+0.1)), \
g(x)-0.1, \
g(x)+0.1, \
h(x)