%systems_driver.m % Solving systems of first order differential equations % and multiple plots - using MATLAB and ODE23. % By Andy Ruina (2/2/2000) global C1 C2 % This allows information to be passed to a function % without a direct pass. C1 = 1; C2 = -5; % assign a value to the constants tzero = 0; % define the start value of t as 0 tfinal = 5; % final value of t as 5 % Hint: make tfinal close to tzero when debugging, % then make it what you want when things work. tspan = [tzero tfinal]; %this list will be given to ODE23 xzero = 2; % The initial values for the integration vzero = 3; zzero = [xzero vzero]; %this list will be given to ODE23 tol= 1e-4; % a measure of the desired integration accuaracy. % a small number here will give a more accurate % solution but will take longer to run on the % computer. 1e-4 is a decent start. But you can % use 1e-12 if you want a very accurate solution. % To get the computer to know this tolerance you % need the following line of code. options = odeset('RelTol',tol,'AbsTol',tol); % The actual solution is done in the line that follows. % The result of this command is two arrays: t and z, where % t contains a list of times (chosen by the computer but with % the first element tzero and the last tfinal) and z an array % of values of z at those times. Each row of z corresponds to % a given time. Each element in the row the value of z1 or z2. % For example z(8,2) is the value of z2 at the eighth time step. % type >help ode23 at the MATLAB prompt, % or see Pratap pgs 82-83. [t z] = ode23 ('systems_rhs', tspan, zzero, options); % the key line %To get multiple plots on one page, each with its own label and %axis, use sublot (type >help subplot or see Pratap pages 160, 162, 163) subplot(3,1,1) plot( t, z(:,1)) ; % xlabel('time') % this adds the text 'time' under the x axis ylabel('x') title('Andy''s x vs t, v vs t, and state space v vs x: 2/2/2000') subplot(3,1,2) plot( t, z(:,2)) ; % xlabel('time') ylabel('v') subplot(3,1,3) plot( z(:,1) , z(:,2) ) ; %State space plot xlabel('x') ylabel('v')