Solutions using ODE with different initial conditions

2 vues (au cours des 30 derniers jours)
Charles
Charles le 29 Sep 2011
I wish to take the difference between two solutions with different initial conditions to a driven nonlinear oscillator. It is of interest to examine the sensitivity to initial conditions. The solutions to ODE are vectors of different lengths. To take the difference they need to be vectors of the same size, hence the issue. How does one do this? Thanks for any help. Chuck

Réponses (2)

Matt Tearle
Matt Tearle le 29 Sep 2011
As well as Walter's solution, you can also simply specify fixed timesteps for ode45 to use:
tvals = % make a vector of time points here
[t,y] = ode45(@odefun,tvals,y0);
Note that ode45 will still use a variable timestep, but it will just return solution values at the requested time points.
  1 commentaire
Jan
Jan le 29 Sep 2011
+1: Actually ODE45 is a interpolator on steroids, so it is efficient to let it perform the interpolation implicitely.

Connectez-vous pour commenter.


Walter Roberson
Walter Roberson le 29 Sep 2011
If you know the time range for each, you could interp() the solution vector of each on to a constant time range.
For example,
[T1,Y1] = ode45(....); %first run
[T2,Y2] = ode45(....); %second run
gridpoints = 50; %regrid to 50 points (say)
allT = [T1(:),T2(:)];
minT = min(allT);
maxT = max(allT);
uniformT = linspace(minT,maxT,gridpoints);
newY1 = interp(T1, Y1, uniformT);
newY2 = interp(T2, Y2, uniformT);
You may need to do a minor amount more work if Y1 or Y2 has multiple columns.

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by