Solving ODE in Matlab with If Statements

  • Context: MATLAB 
  • Thread starter Thread starter sristi89
  • Start date Start date
  • Tags Tags
    Matlab
Join the discussion
Ask a follow-up here, or get your own question answered by working scientists, mathematicians and engineers — people, not an autocomplete.
Real named experts · corrections over time · the nuance an AI answer skips
1 reply · 4K views
sristi89
Messages
8
Reaction score
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!
 
Physics news on Phys.org
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: