# Produce the same result but without using a for-loop.

2 views (last 30 days)

Show older comments

% Produce the same result but without using a for-loop.

% Increment

dx = 35/300;

% Independent variable

x = -5:dx:30; % x = linspace(-5,30,300)

for n = 1:length(x)

if x(n) >= 9

y(n) = 15*sqrt(4*x(n)) + 10;

elseif (x(n) >= 0) && (x(n) <= 9)

y(n) = 10*x(n) + 10;

else

y(n) = 10;

end

end

plot(x,y), xlabel('x'), ylabel('y'), grid on

##### 1 Comment

Rik
on 6 Apr 2021

### Answers (2)

Cris LaPierre
on 6 Apr 2021

Edited: Cris LaPierre
on 6 Apr 2021

If your assignment doesn't allow that, then create 3 vectors, one for each equation, and solve each for all values of x. Then multiply each by a logical array created from x and the corresponding conditional statement(s). Finally, add all three vectors together.

See Ch 12 of MATLAB Onramp if you need help creating the logical array, and Ch 6 if you need help on elementwise multiplication.

Walter Roberson
on 6 Apr 2021

syms y(x)

y(x) = piecewise(x>=9, 15*sqrt(4*x)+10, 0>=x=<9, 10*x+10,10)

^^

MATLAB does not have an =< operator; it has a <= operator.

dx = 35/300;

xvalue = -5:dx:30;

fplot(y)

fplot() by default plots from -5 to +5 . Your assignment to xvalue does not affect that. To have it plot over a different interval, the interval would have to be passed as the second parameter, such as

fplot(y, [-5, 30])

Only the endpoints of the interval would be passed.

fplot() always chooses its own points to plot at. If you only want to plot at particular points, you should not use fplot(); you should use plot() instead.

plot() does not accept formulas, so you would need to

plot(xvalue, y(xvalue))

### See Also

### Community Treasure Hunt

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

Start Hunting!