"for" loops and branching help

I'm having trouble solving this question: Write the MATLAB statements required to calculate y(t) from the equation y(t) = -3*t^2 + 5 when t>=0
y(t) = 3*t^2 + 5 when t<0
for the values of t between -9 and 9 in steps of .5. Use loops and branches to solve
Heres what i have;
for t = -9:.5:9
if t<0
y=(3*t.^2)+5;
else if t>=0
y=(-3*t.^2)+5;
end
end
end
plot(y,t)
I know Im missing something, like maybe count=0; and count = count + 1 but I've tried it still was unsuccessful

 채택된 답변

Matt Fig
Matt Fig 2011년 3월 2일

1 개 추천

You were close. Here is one way to do what you are trying to do, keeping with the FOR loop and IF statement use.
cnt = 0;
t = -9:.5:9
for ii = t
cnt = cnt + 1;
if ii<0
y(cnt)=(3*ii.^2)+5;
else if ii>=0
y(cnt)=(-3*ii.^2)+5;
end
end
end
plot(y,t)
Here is another way, without the cnt variable.
t = -9:.5:9;
for ii = 1:length(t)
if t(ii)<0
y(ii)=(3*t(ii).^2)+5;
else if t(ii)>=0
y(ii)=(-3*t(ii).^2)+5;
end
end
end
plot(y,t)
Also, here is a more MATLABish way of doing this, for future reference:
t2 = -9:.5:9
idx = t2>=0;
y2(idx) = (-3*t2(idx).^2)+5;
y2(~idx) = (3*t2(~idx).^2)+5;
plot(y2,t2)

추가 답변 (1개)

Paulo Silva
Paulo Silva 2011년 3월 2일

1 개 추천

t=-9:0.5:9;
y=0*t;
y(t<0)=3*t(t<0).^2+5;
y(t>=0)=-3*t(t>=0).^2+5;
Here's another way
t=-9:0.5:9;
y=sign(t).*3.*t.^2+5;
PS: I know the OP wants loops but I couldn't resist :)

댓글 수: 2

Matt Tearle
Matt Tearle 2011년 3월 3일
Yes. Logical indexing > loops + branching. All bow before the logical index!!!
Paulo Silva
Paulo Silva 2011년 3월 3일
Yeah, baby, yeah!

댓글을 달려면 로그인하십시오.

카테고리

도움말 센터File Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

질문:

2011년 3월 2일

Community Treasure Hunt

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

Start Hunting!

Translated by