2016-07-26 17 views
0

現在、私は一連の関数をプロットし、それらの間の領域を塗り潰す必要があるプロジェクトに取り組んでいます。gnuplotで複数の関数を持つ塗りつぶし

私はさまざまなことを試みましたが、実際には動作させることはできません。ここで

は、gnuplotのスクリプトの簡易版である:

f(x) = 80 
g(x) = 0.35*x - 7.5 
h(x) = -1.96629*x + 710 
i(x) = -80 
j(x) = -0.35*x + 7.5 
k(x) = 1.96629*x -710 

set xzeroaxis 
set xtics axis 
set xrange [0:500] 

set yzeroaxis 
set ytics axis 
set yrange [-200:200] 

set border 0 
plot f(x) with lines ls 1 lt rgb "red", \ 
g(x) with lines ls 1 lt rgb "red", \ 
h(x) with lines ls 1 lt rgb "red", \ 
i(x) with lines ls 1 lt rgb "blue", \ 
j(x) with lines ls 1 lt rgb "blue", \ 
k(x) with lines ls 1 lt rgb "blue" 

これは、次のプロット生成します

Plot of multiple functions を、私は別のものを試してみましたし、thisリンクは私に道の一部を得たが、I私はアイディアを使い果たしている。

私の質問は次のとおりです:赤と青の線の間の領域を埋めることは可能ですか(つまり、関数が形成する凸面の空間)?

答えて

1

max(a,b)=(a>b)?a:b 
min(a,b)=(a<b)?a:b 
lowerb(x)=max(max(i(x),j(x)),k(x)) 
upperb(x)=min(min(f(x),g(x)),h(x)) 
plot "+" using 1:((lowerb($1)<upperb($1))?lowerb($1):1/0):(upperb($1)) with filledcurves 

plotコマンド内の三項演算子のみ{ lowerb(x)< y <upperb(x)}なく{ lowerb(x) > y > upperb(x)}

をプロットすることができます機能のリストが非常に長い場合は、マクロを使用してlowerbupperbの構築を自動化することが可能でなければなりません。

+0

それはトリックでした。どうもありがとう! –

0

三項演算子を使用して、赤い関数を賢明に定義します。それをf1と呼ぶ。充填曲線でf1と-f1をプロットします。私はアプローチがそれをしなければならないと思います。すでに曲線が下限であり、上限であるかを知る場合は、簡単にそれを行うことができます

関連する問題