Asked by mike
on 10 Apr 2013

Ok so I had to plot a graph that fulfills those conditions in the function.. But when I plot the graph version using fplot(@qtsolver,[0 6*pi]) it plots out a diagonal line with a kink at pi and 2 pi, but shouldnt it print a sinusoid or at least something curvy? I feel like my codes all correct but I dont feel like the graph is :(

function qt = qtsolver(t)

if (0<=t) && (t<pi) qt= 2*t - 0.8*sin(2.5)*t;

else if (pi<=t) && (t<2*pi) qt = 4*pi - 2*t -0.8*sin(2.5)*t-1.6*cos(2.5)*t;

else if (t>= 2*pi) qt = -1.6*cos(2.5)*t;

end

end

end

*No products are associated with this question.*

Answer by Jan Simon
on 10 Apr 2013

Edited by Jan Simon
on 10 Apr 2013

Your function calculates the points separately. But as far as I can see, `fplot` expects a vector output for a vector input:

function qt = qtsolver(t) qt = zeros(size(t)); % Pre-allocate index = (0<=t) && (t<pi); qt(index) = 2*t(index) - 0.8*sin(2.5)*t(index); index = (pi<=t) && (t<2*pi); qt(index) = 4*pi - 2*t(index) -0.8*sin(2.5)*t(index)-1.6*cos(2.5)*t(index); index = (t>= 2*pi) qt(index) = -1.6*cos(2.5)*t(index);

[EDITED], t -> t(index)

Answer by Andrei Bobrov
on 10 Apr 2013

function out = qtsolver(x) f = {@(t)2*t-.8*sin(2.5*t),... @(t)4*pi-2*t-0.8*sin(2.5*t)-1.6*cos(2.5*t),... @(t)-1.6*cos(2.5*t)}; [~,iii] = histc(x,[0 pi 2*pi inf]); out = arrayfun(@(y,z)y{:}(z),f(iii),x); end

Opportunities for recent engineering grads.

## 2 Comments

## Jan Simon (view profile)

Direct link to this comment:http://www.mathworks.com/matlabcentral/answers/71453#comment_142332

Of course the graph looks exactly as the code forces it to do. As long as we see the code only, how could we suggest modifications?

Please learn how to format code in the forum. Follow the "? Help" link.

## Andrei Bobrov (view profile)

Direct link to this comment:http://www.mathworks.com/matlabcentral/answers/71453#comment_142337

sin(2.5*t)instead ofsin(2.5)*t