2017-01-12 6 views
2

曲線の陰影部分の面積を探しています。青はしきい値を上回り、下はグレーです。スクリプトでは、レベル値を調整して青とグレーの比率を変更できます。 levelが2(pic 1)に設定されている場合、面積は等しくなければなりません。レベルが1.6(pic 2)に設定されている場合、青色は灰色などよりも大きな面積を持つ必要があります...曲線の下の領域をしきい値以下で見つける方法について考えていますか?trapzとMATLABを使用して、上下の曲線下の陰影付き領域を計算します。

PIC 1: pic 1

PIC 2: pic 2

マイコード:一般的な意味で

%% Example 
x = 0:.01:4*pi;% x data 
y = sin(x)+2;% y data 
level = 2;% level 
plot(x, y) 
hold on 
x_interest = 0:.01:x(length(y)); 
y_interest = sin(x_interest)+2; 
xlim ([0 x(length(y))]) 

% Shaded area above level 
area(x_interest, max(y_interest, level), level, ... 
    'EdgeColor', 'none', 'FaceColor', [.6 .7 .8], ... 
    'ShowBaseLine', 'off'); 

% Shaded area below level 
area(x_interest, min(y_interest, level), level, ... 
    'EdgeColor', 'none', 'FaceColor', [.5 .5 .5], ... 
    'ShowBaseLine', 'off'); 

%%== This did not work ==%% 
above = find(y_interest >= level); 
below = find(y_interest <= level); 
A_above = trapz(above) 
A_below = trapz(below) 

%% Integrate 
plot(x, sin(x)+2) 
fun = @(x) sin(x)+2; 
integral(fun, 0, x(length(y))) 

A = trapz(x,y) 
+3

それはすべてあなたの欠落がされているようだ 'A_above = trapz(x_interest(上記)、y_interest(上記))'と同様のため'A_below'。 – Florian

+0

@ user7411032:ありがとうございました。私たちの多くは、あなたの例に従ってください。 :) – aksadv

答えて

1

、機能xyは、同じ長さのベクトルであるtrapz(x,y)( )は曲線下の面積を推定するf(x) = y。この領域は、関数f(x)とx軸で挟まれています。

A_aboveについては、曲線f1(x_interest) = max(y_interest, level)f2(x_interest) = levelの間の領域を見積もりたいとします。これは、曲線f1(x_interest)の下の領域がlevelだけシフトダウンされたのと同じです。 A_belowため、

A_above = trapz(x_interest, max(y_interest, level)-level) 

同様に:これはで評価することができる

A_below = -trapz(x_interest, min(y_interest, level)-level) 
+0

@ aksadv:助けてくれてありがとう、トリックでした!私は本当にそれを感謝し、またtrapzがどのように曲線を評価しているのかについての説明に感謝します。非常に有用な情報。時間をとっていただきありがとうございます。 – user7411032

+0

昨日、私はこれを使ってMATLABの積分関数と比較したいと思っていました。レベルが1に設定されているときに半分の値しか得られませんでした。しかし、私がsin(x)+2の積分をとるとき、私は25.12を得る。だから、私はtrapz(x、y)を試して、積分と同じように25.12を得ました。これは意味があります。あなたの提案した方法を使用して値の半分を失う理由はわかりません。何かご意見は?編集したセクションにコードを追加しました。 – user7411032

+0

@ user7411032: 'integral'と' trapz'は関数( 'y = sin(x)+ 2')とx軸の間の領域を計算しますが、もともと、関数と 'y = level'行です。注意深くそれらを描くと、陰影を付けられた領域の下端が2つの場合で異なっていることがわかります。 – aksadv

関連する問題