Solutions using ODE with different initial conditions
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
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
0 Kommentare
Antworten (2)
Matt Tearle
am 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 Kommentar
Jan
am 29 Sep. 2011
+1: Actually ODE45 is a interpolator on steroids, so it is efficient to let it perform the interpolation implicitely.
Walter Roberson
am 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.
0 Kommentare
Siehe auch
Kategorien
Mehr zu Ordinary Differential Equations finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!