Solving ODE in Matlab with If Statements

  • MATLAB
  • Thread starter sristi89
  • Start date
  • Tags
    Matlab
  • #1
8
0
Hi everyone,

So I have to solve a ODE (for dy/dt = K*(y-s) ) numerically in Matlab.

This is how I set it up:
K = 1;
s = 20;
y0 = 100;
npoints = 50;
dt = 0.1;
y = zeros(npoints,1); % this initializes the vector y to being all zeros
t = zeros(npoints,1);
y(1) = y0; % the initial condition
t(1) = 0.0;
for step=1:npoints-1 % loop over the timesteps
y(step+1) = y(step) + dt*K*(y(step)-s);
t(step+1) = t(step) + dt;
end
plot(t,y,'r'); %plots the numerical solution in red
hold on; %keep the previously plotted lines


My problem is that I have to "reset" the initial condition if the value of V(step+1)>150 with the initial condition (100). Then I have to let the loop continue with the new value.

I tried a bunch of combinations of the if statement in the for loop, but I can't make it work.
Any help would be really appreciated. Thanks!
 
  • #2
I'm not sure I understand exactly, but if y(step+1) has to be recalculated with the reset value when it goes over 150:

Code:
for step=1:npoints-1 % loop over the timesteps 
  y(step+1) = y(step) + dt*K*(y(step)-s); 
  if(y(step+1)>150)
    y(step+1) = y0 + dt*K*(y0-s); 
  end
  t(step+1) = t(step) + dt; 
end

If y(step+1) is to be unchanged and only the next datapoint has to be calculated with the reset value, then
Code:
for step=1:npoints-1 % loop over the timesteps 
  if(y(step)>150)
    y(step+1) = y0 + dt*K*(y0-s); 
  else
    y(step+1) = y(step) + dt*K*(y(step)-s); 
  end
  t(step+1) = t(step) + dt; 
end
 
Last edited:

Suggested for: Solving ODE in Matlab with If Statements

Replies
4
Views
463
Replies
4
Views
882
Replies
2
Views
1K
Replies
6
Views
709
Replies
2
Views
958
Replies
3
Views
2K
Replies
5
Views
1K
Replies
2
Views
851
Replies
1
Views
650
Back
Top