Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

New to MATLAB?

Matlab graph doesnt look right...not a sinusoid...

Asked by mike

mike (view profile)

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

2 Comments

Jan Simon

Jan Simon (view profile)

on 10 Apr 2013

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

Andrei Bobrov (view profile)

on 10 Apr 2013

sin(2.5*t) instead of sin(2.5)*t

mike

mike (view profile)

Tags

Products

No products are associated with this question.

2 Answers

Answer by Jan Simon

Jan Simon (view profile)

on 10 Apr 2013
Edited by Jan Simon

Jan Simon (view profile)

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)

0 Comments

Jan Simon

Jan Simon (view profile)

Answer by Andrei Bobrov

Andrei Bobrov (view profile)

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

0 Comments

Andrei Bobrov

Andrei Bobrov (view profile)

Contact us