How can I generate a vectorized version of a piecewise-defined function for use in the QUAD or QUADL for functions?

3 Ansichten (letzte 30 Tage)
I have created the following function that represents a piecewise-defined function:
function y = pieces(x)
if (0<=x)&(x<=1)
y = 3*x - 2;
elseif (1<x)&(x<=2)
y = 2 - x;
else
y = 0;
end
However, when I specify this function to the QUAD function:
quad(@pieces,-5,5)
I get the following error:
??? Index exceeds matrix dimensions.
Error in ==> quad.m
On line 67 ==> if ~isfinite(y(7))

Akzeptierte Antwort

MathWorks Support Team
MathWorks Support Team am 27 Jun. 2009
The QUAD function expects the integrating function to input a vector and return a vector of the same size. The given function will accept a vector, but returns a scalar.
Update your function with the vectorized version of this piecewise-defined function which is:
function y = pieces(x)
I1 = (0 <= x) & (x < 1);
I2 = (1 <= x) & (x < 2);
I3 = ~I1 & ~I2;
y = x; % Create y same size as x
y(I1) = 3*x(I1) + 2;
y(I2) = 2 - x(I2);
y(I3) = 0;

Weitere Antworten (0)

Kategorien

Mehr zu Function Creation finden Sie in Help Center und File Exchange

Produkte

Community Treasure Hunt

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

Start Hunting!

Translated by