Hi,
I want to calculate the area of this curve. y = [0 1 3 -1 -2 -3 -1 0];
I know a portion of the curve has negative value, so my solution is make all the y values absolute. But then the area of absolute y will be higher. Can anyone help me?
Thanks.

답변 (3개)

Star Strider
Star Strider 2016년 7월 4일

0 개 추천

The problem wasn’t immediately obvious to me. You need to find the zero-crossing, and then add the two separate areas:
y = [0 1 3 -1 -2 -3 -1 0];
x = 1:length(y);
zci = @(v) find(v(:).*circshift(v(:), [-1 0]) < 0); % Returns Approximate Zero-Crossing Indices Of Argument Vector
yzxi = zci(y); % Zero-Crossing Index
x0 = interp1(y(yzxi:yzxi+1), x(yzxi:yzxi+1), 0); % Interpolate To Find Zero-Crossing
AUC = polyarea([x(1:yzxi) x0], [y(1:yzxi) 0]) + polyarea([x0 x(yzxi+1:end)], [0 y(yzxi+1:end)]);
INT = trapz(x, abs(y)) % Compare (Optional)
AUC =
10.2500
INT =
11.0000
I used the polyarea function rather than the integration functions. If you have a more complicated function, this will work as well, but you will have to make the appropriate changes to the code. (I included the trapz function integration of the absolute value for comparison.)

댓글 수: 2

Q TRAN
Q TRAN 2016년 7월 5일
Thank you.
Do you think if this works for the case we have more than one zero crossing?
Star Strider
Star Strider 2016년 7월 5일
Yes.
You simply have to find each one, calculate the zero-crossing, and do polyarea for each segment.

댓글을 달려면 로그인하십시오.

Piyush  Madame
Piyush Madame 2016년 7월 5일
편집: Walter Roberson 2016년 7월 5일

0 개 추천

just by some codding

댓글 수: 1

Q TRAN
Q TRAN 2016년 7월 5일
Would you please share your code?

댓글을 달려면 로그인하십시오.

카테고리

도움말 센터File Exchange에서 Numerical Integration and Differentiation에 대해 자세히 알아보기

태그

질문:

2016년 7월 4일

댓글:

2016년 7월 5일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by