9 views (last 30 days)

Hello,

I am trying to plot a function of a function, f(x(t)) with piecewise limits, however I keep getting an error that "Subscript indices must either be real positive integers or logicals."

Im wondeirng if I need to adjust my limits im using in my piecewise function so they are in terms of t or if I can leave it in the current form and am missing something else.

t =[0:0.1:2*pi];

x = 2*sin(t);

%% Plot 1

f_1 = piecewise(x<-1, 1.5*x+1.5, 0, -1<x<1, 1.5*x(t)-1.5, x>1);

plot (f_1, t);

Thank you

Dana
on 25 Sep 2020

Dana
on 26 Sep 2020

No, it shouldn't be x(t), because x(t) doesn't make sense as a MATLAB expression, and that's why you're getting the error you're getting.

For a vector y, the syntax y(j) means the j-th element of y if j is a scalar, and if j is a vector then y(j) = [y(j(1)) y(j(2)) ... ], where j(k) is the k-th element of j.

In your case, t is a vector, so x(t) would put you in the second case above. But t(k) is not typically a positive integer in your case, so there's no such thing as the t(k)-th element of x.

In addition, the use of the symbolic function piecewise is probably not the best way to go about this, not to mention you've messed up the order of your input arguments. Ignoring the x(t) issue, I think you wanted

f_1 = piecewise(x<-1, 1.5*x+1.5, -1<x<1, 0, x>1, 1.5*x(t)-1.5);

I suspect the following will do what you actually want:

t =[0:0.1:2*pi];

x = 2*sin(t);

% The following function returns 1.5*z+1.5 if z<-1,

% 1.5*z-1.5 if z>1, and 0 otherwise

f_1 = @(z) (z<-1).*(1.5*z+1.5) + (z>1).*(1.5*z-1.5);

plot (t,f_1(x));

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

Start Hunting!
## 1 Comment

## Direct link to this comment

https://au.mathworks.com/matlabcentral/answers/599959-plotting-a-function-of-a-function-with-piecewise-limits#comment_1025209

⋮## Direct link to this comment

https://au.mathworks.com/matlabcentral/answers/599959-plotting-a-function-of-a-function-with-piecewise-limits#comment_1025209

Sign in to comment.