How to give if...then condition ?

How can I give a condition statement for the following case:
for A1<=A,
e=0
for A1>A,
e=5e-03
Now, I want to use this e value (after A1>A) to calculate a new value of e at the next time instant. Say, the formula for e is,
e = v/[u/e - 2] (e on the RHS is the value of e at the previous time step and the e on LHS is the new value which I want)
How can I form a condition for the above case??
Thanks!!

1 Comment

Matt Fig
Matt Fig on 18 Oct 2012
Edited: Matt Fig on 18 Oct 2012
You need to learn the difference between FOR and IF:
doc for
doc if
Once you have this difference clear in your mind, you should be able to formulate your question more clearly.

Sign in to comment.

Answers (2)

e=5e-03
if A1<=A,
e=0
else
e = v/[u/e - 2]
end

15 Comments

It isn't working for my code! Thanks a lot anyway!
show your code
I can't thats the problem! it is so frustrating! is it okay if i provide a similar code?
Azzi Abdelmalek
Azzi Abdelmalek on 19 Oct 2012
Edited: Azzi Abdelmalek on 19 Oct 2012
Maybe you should reformulate your question and make it clear.
function H = newmain
global b1 b2 b3 c
b1=0;
b2=2.0;
b3=0.33;
options=odeset('InitialStep', 0.01, 'MaxStep', 0.01, 'RelTol', 10., 'AbsTol',10.);
[t2,y2]=ode45(@equation,[0:0.05:0.1],[1 2 0], options);
H = [t2 y2]
end
function dy=equation(t,y)
global b1 b2 b3 c
dy=zeros(3,1);
b1=b1+1-exp(-b3)
b2=b1-y(1)
b3=b1+b2+y(2)
dy(1)=-b1*y(1);
dy(2)=b3*y(1)+b2*y(2);
dy(3)=sqrt(b1)+y(1)+y(3);
c=[c;t b1 b2 b3]
end
In the above I want to induce a condition say,
if y(1)<100 && b1<0.0001 %(initially b is zero)
b1=0.01
end
Now I want to use this new value of to calculate a new value b1 from the formula of b1. Again return a new value for the same...how can I do that? Thanks!
try this
function dy=equation(t,y)
global b1 b2 b3 c
dy=zeros(3,1);
b1=b1+1-exp(-b3)
b2=b1-y(1)
b3=b1+b2+y(2)
if y(1)<100 & b1<0.0001 %(initially b is zero)
b1=0.01
end
dy(1)=-b1*y(1);
dy(2)=b3*y(1)+b2*y(2);
dy(3)=sqrt(b1)+y(1)+y(3);
c=[c;t b1 b2 b3]
end
I used this same logic for my code but it isn't calculating a new value for "b1".
Because the condition b1<0.0001 is always false
look at the result
find(c(:,2)<0.0001) % c(:,2) is b1,
the result is
b1 =
Empty matrix: 0-by-1
Initially b is zero so b1<0.0001. So should I try b1>=0 ?
Azzi Abdelmalek
Azzi Abdelmalek on 19 Oct 2012
Edited: Azzi Abdelmalek on 19 Oct 2012
No, when the function is called, first you have b1=b1+1-exp(-b3), before the test. b1 is not zero
Urvi
Urvi on 19 Oct 2012
Edited: Urvi on 19 Oct 2012
So, now how should I formulate my condition?
b1 is less than zero. I just calculated it. Maybe in the later time steps, it does not abide by the condition i gave.
function dy=equation(t,y)
global b1 b2 b3 c
dy=zeros(3,1);
if y(1)<100 & b1<0.0001
b1=0.01
else
b1=b1+1-exp(-b3)
end
b2=b1-y(1)
b3=b1+b2+y(2)
dy(1)=-b1*y(1);
dy(2)=b3*y(1)+b2*y(2);
dy(3)=sqrt(b1)+y(1)+y(3);
c=[c;t b1 b2 b3]
end
I shall try this as well. I have one more question related to the above code only.
Initially b1=0. so now i want to have a condition as follows:
if y(1)>b2 %(b2 is also changing with time)
b1=1e-03.
(Now use this new value of b1 in the following formula for y(1)>b2)
b1=b1+1-exp(-b3)
end
(There is no 'else' part in this condition)
function dy=equation(t,y)
global b1 b2 b3 c y1 yy
dy=zeros(3,1);
if y(1)>b2
b1=0.001;
end
b1=b1+1-exp(-b3);
b2=b1-y(1);
b3=b1+b2+y(2);
dy(1)=-b1*y(1);
dy(2)=b3*y(1)+b2*y(2);
dy(3)=sqrt(b1)+y(1)+y(3);
c=[c;t b1 b2 b3] ;
Thank you.

Sign in to comment.

if A1<=A
e= 0;
elseif A1>A
e = 5e-3;
end
e= v/(u/e_prev - 2);
e_prev = e;
Hope it helps!!!

6 Comments

Its not working :(
Can you describe the error?
there is no error msg as such....it just uses 5e-03 as the value of e. it isnt calculating a new value of e.
Can you show your code, if possible a pseudo code, to help understand the problem.
Urvi, Can you post your code?
ya I just did..thank you.

Sign in to comment.

Categories

Asked:

on 17 Oct 2012

Community Treasure Hunt

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

Start Hunting!