Integrate a Discontinuous Piecewise Linear Function

I have the following equation:
y={600 0<=x<15
1200 15<=x<30
2400 30<=x<45
1200 45<=x<60
600 60<=x<75
I need the cumulative integral as a function of x, both to plot the result and to perform an additional integration. I originally tried defining y as a vector and integrating with trapz:
y(1:15) =600
y(16:30)=1200
...
for j=1:length(y)
int_y=trapz(y(1:j))
end
This obviously gives the incorrect answer, because of the way I defined the intervals, but I'm pretty sure I can't integrate the discontinuities accurately with the trapezoidal rule.
I've switched to integrating each interval individually:
y(1,1:16)=600
y(2,1:16)=1200
...
I haven't worked out the details of a similar loop to integrate each row of the vector and deal with the endpoints yet, but I'm pretty sure I can get the right answer this way.
However, this is messy and awkward.
Am I missing a more straightforward way of performing this integration, either by some better way of defining my intervals or with a more suitable function?

 채택된 답변

dpb
dpb 2014년 5월 3일
편집: dpb 2014년 5월 3일
...Am I missing a more straightforward way of performing this integration...
Since the intervals are constants, just define the breakpoints and y values...
>> y=[600 1200 2400 1200 600];
>> dx=16*ones(size(y));
>> cumsum(dx.*y)
ans =
9600 28800 67200 86400 96000
>>

댓글 수: 1

I ended up defining y the same way I showed in my question (y(1:15)=600...), but cumsum did the trick!

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

추가 답변 (0개)

카테고리

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

질문:

2014년 5월 3일

댓글:

2014년 5월 3일

Community Treasure Hunt

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

Start Hunting!

Translated by