Differenciation and Integration of piecewise functions

조회 수: 5 (최근 30일)
Joao Maldonado
Joao Maldonado 2017년 10월 6일
답변: Walter Roberson 2017년 10월 7일
Hello, I'm using matlab R2016a, and I cannot find a way to differentiate or integrate piecewise functions like the following:
f(x) = x if x<=1 and 2x if x>1
Can anyone help me? I need to do this both numerically and improperly Thanks Joao

답변 (1개)

Walter Roberson
Walter Roberson 2017년 10월 7일
You mention you are using R2016a. For MATLAB R2008b to R2016a, the only way to do that symbolically is to dodge into MuPAD in order to create a piecewise expression inside the symbolic engine. This situation changed with R2016b, which added a piecewise() function call.
G = evalin(symengine, 'piecewise([x < 1, x], [x > 1, 2*x])');
You can then test with a few different values:
>> subs(G,x,[-1 0 1 2])
ans =
[ -1, 0, NaN, 4]
Notice the NaN: that is there because your expression does not define the result for x of exactly 1. Boundary conditions are important for integration!
You can then
>> int(G)
ans =
piecewise(1 < x, x^2, x < 1, x^2/2)
For numeric work, create a function:
function y = f(x)
y = nan(size(x));
mask = x < 1;
y(mask) = x(mask);
mask = x > 1;
y(mask) = 2 * x(mask);
You can then do
integral(@f,-5,5,'waypoints',1)
You need the 'waypoints' option because of the discontinuity.
You can cross-check with a numeric approximation:
x = linspace(-5,5,101);
y = f(x);
cumtrapz(x, y)
Why does this end in NaN? It's that pesky boundary condition again! If only some definite value had been assigned for the point at x = 1 ...

카테고리

Help CenterFile Exchange에서 Assumptions에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by