Integrate a Discontinuous Piecewise Linear Function
9 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
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?
1 Kommentar
Akzeptierte Antwort
dpb
am 3 Mai 2014
Bearbeitet: dpb
am 3 Mai 2014
...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
>>
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Numerical Integration and Differentiation finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!