Integrate a Discontinuous Piecewise Linear Function

조회 수: 11 (최근 30일)
Jacob
Jacob 2014년 5월 3일
댓글: Jacob 2014년 5월 3일
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
Jacob
Jacob 2014년 5월 3일
I ended up defining y the same way I showed in my question (y(1:15)=600...), but cumsum did the trick!

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

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Numerical Integration and Differentiation에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by