Solving vectorized ODE (Solving same ODE with many initial conditions at once).
Show older comments
I am tring to apply 2nd newton law to many points, where m,r,v,f is a n-by-1, n-by-3, n-by-3, n-by-3, n-by-3, matrixes for mass, position,velocity, and force for n points. The 3 columns are the x,y,z components for those values.
options = odeset('Vectorized','on');
y0=[r,v];
[t,YSol]=ode45(@(t,y) MotionODE(t,y,m,f),[0,dt],y0,options);
r=YSol(t==dt,1:3)';
v=YSol(t==dt,4:5)';
function d2rdt2= MotionODE(t,Y,m,f)
%ODE function for motion
r=Y(:,1:3);
v=Y(:,4:5);
drdt=v;
dvdt=f./m;
d2rdt2=[drdt,dvdt];
end
However I got an error: "Index in position 2 exceeds array bounds (must not exceed 1).". Is the option "vectorized" designed for what I think it is for? How do I get this run correctly (other than a for loop)?
1 Comment
Yi-xiao Liu
on 21 Mar 2021
Accepted Answer
More Answers (1)
Jan
on 17 Mar 2021
1 vote
same ODE with many initial conditions at once
This is a bad idea. Remember that the step size control is triggered by the most susceptible component of the trajectory. This reduces the stepsize for all components and in consequence increases the accumulated rounding errors. The total number of calculations can be larger than running the integration for each initial value separately.
4 Comments
Yi-xiao Liu
on 17 Mar 2021
Jan
on 18 Mar 2021
The error can be small, if the trajectory is not very sensitive for a variation of the initial values. If you integrate a chaotic function like a double pendulum, the error will get much larger.
You can improve the performance by choosing another integrator or my modifying the tolerances. In your case the function to be uintegrated is tiny. Therefore saving function calls is not the standard way to improve the speed. If this function contains thousands of lines of code, the situation would be different.
Yi-xiao Liu
on 18 Mar 2021
Jan
on 18 Mar 2021
Do you have the Parallel Processing Toolbox? Then try to replace the FOR by PARFOR.
Categories
Find more on Programming in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!