-
3Solution of a 2 x 2 ODE System
We now consider the programming of the 2x2 ODE problem of
Equations1.6, 1.16, and 1.17 using the general-purpose ODE library
integrators fromChapter 2. Since these integrators were listed and
discussed in some detailin Chapter 2, they are not discussed here,
except as they are called in a mainprogram for the solution of the
2x2 ODE problem. The order in which the sixlanguages are considered
is the same as in Chapter 2.
3.1 Programming in MATLAB
A main program for the solution of the 2x2 ODE problem is listed
below:
%% Main program ode2x2 computes the numerical% solution to the 2
x 2 ODE system by six% integrators%% Step through six
integrators
for int=1:6%% Integration parameters
[neqn,nout,nsteps,t0,tf,abserr,relerr]=intpar;%% Initial
condition vector
[u0]=inital(neqn,t0);%% Output interval
tp=tf-t0;
Copyright 2004 by Chapman & Hall/CRCCopyright 2004 by
Chapman & Hall/CRC
-
%% Compute solution at nout output points
for j=1:nout%% Print current solution
[out]=fprint(int,neqn,t0,u0);%% Fixed step modified Euler
integrator
if int == 1[u]=euler2a(neqn,t0,tf,u0,nsteps);
end%% Variable step modified Euler integrator
if int == 2[u]=euler2b(neqn,t0,tf,u0,nsteps,abserr,relerr);
end%% Fixed step classical fourth order RK integrator
if int == 3[u]=rkc4a(neqn,t0,tf,u0,nsteps);
end%% Variable step classical fourth order RK integrator
if int == 4[u]=rkc4b(neqn,t0,tf,u0,nsteps,abserr,relerr);
end%
% Fixed step RK Fehlberg (RKF45) integratorif int == 5
[u]=rkf45a(neqn,t0,tf,u0,nsteps);end
%% Variable step RK Fehlberg (RKF45) integrator
if int == 6[u]=rkf45b(neqn,t0,tf,u0,nsteps,abserr,relerr);
end%% Advance solution
t0=tf;tf=tf+tp;u0=u;
%% Next output
end
Copyright 2004 by Chapman & Hall/CRCCopyright 2004 by
Chapman & Hall/CRC
-
%% Next integrator
end%% End of ode2x2
Program 3.1.1MATLAB main program for the numerical integration
of Equations 1.6, 1.16,with analytical solution Equation 1.17
The only essential difference between Program 3.1.1 and 2.1.1 is
the use ofa loop in the latter to cycle through all six
integrators:
%% Step through six integrators
for int=1:6
Thus, int, which was set for a particular integrator by a call
to intpar in Program2.1.1, is now set by this for loop.
Routines intpar, inital, derv, and fprint are listed below:
function [neqn,nout,nsteps,t0,tf,abserr,relerr]=intpar%%
Function intpar sets the parameters to control the% integration of
the 2 x 2 ODE system%% Number of first order ODEs
neqn=2;%% Number of output points
nout=6;%% Maximum number of steps in the interval t0 to tf
nsteps=100;%% Initial, final values of independent variable
t0=0.0;tf=1.0;
%% Error tolerances
abserr=1.0e-05;relerr=1.0e-05;
%% End of intpar
Copyright 2004 by Chapman & Hall/CRCCopyright 2004 by
Chapman & Hall/CRC
-
function [u0]=inital(neqn,t)%% Function inital sets the initial
condition vector% for the 2 x 2 ODE problem%
u0(1)=0;u0(2)=2;
%% End of inital
function [ut]=derv(neqn,t,u)%% Function derv computes the
derivative vector% of the 2 x 2 ODE problem%% Problem
parameters
a=5.5;b=4.5;
%% Derivative vector
ut(1)=-a*u(1)+b*u(2);ut(2)= b*u(1)-a*u(2);
%% End of derv
function [out]=fprint(ncase,neqn,t,u)%% Function fprint displays
the numerical and% exact solutions to the 2 x 2 ODE problem%%
Return current value of independent variable% (MATLAB requires at
least one return argument)
out=t;%% Problem parameters
a=5.5;b=4.5;
%% Print a heading for the solution at t = 0
if(t
-
% Label for ODE integrator%% Fixed step modified Euler
if(ncase==1)fprintf('\n\n euler2a integrator\n\n');
%% Variable step modified Euler
elseif(ncase==2)fprintf('\n\n euler2b integrator\n\n');
%% Fixed step classical fourth order RK
elseif(ncase==3)fprintf('\n\n rkc4a integrator\n\n');
%% Variable step classical fourth order RK
elseif(ncase==4)fprintf('\n\n rkc4b integrator\n\n');
%% Fixed step RK Fehlberg 45
elseif(ncase==5)fprintf('\n\n rkf45a integrator\n\n');
%% Variable step RK Fehlberg 45
elseif(ncase==6)fprintf('\n\n rkf45b integrator\n\n');
end%% Heading
fprintf(' t u1 u2 u1-ue1 u2-ue2\n');%% End of t = 0 heading
end%% Numerical and analytical solution output
% Exact solution eigenvaluese1=-(a-b);e2=-(a+b);
%% Analytical solution
ue(1)=exp(e1*t)-exp(e2*t);ue(2)=exp(e1*t)+exp(e2*t);
%% Difference between exact and numerical solutions
diff=u-ue;
Copyright 2004 by Chapman & Hall/CRCCopyright 2004 by
Chapman & Hall/CRC
-
%% Display the numerical and exact solutions,% and their
difference
fprintf('%10.2f %10.5f %10.5f %10.5f %10.5f \n',t,u,diff);
%% End of fprint
Program 3.1.2intpar, inital, derv, and fprint for the solution
of Equations 1.6 and 1.16
We can note the following points about these routines:
The initial conditions of Equations 1.6 are set in inital as
y1(0) = y10 = 0,y2(0) = y20 = 2:%
u0(1)=0;u0(2)=2;
The RHS of Equations 1.6 are programmed in derv as%% Problem
parameters
a=5.5;b=4.5;
%% Derivative vector
ut(1)=-a*u(1)+b*u(2);ut(2)= b*u(1)-a*u(2);
The analytical solution, Equation 1.17, is programmed in fprint
as%% Exact solution eigenvalues
e1=-(a-b);e2=-(a+b);
%% Analytical solution
ue(1)=exp(e1*t)-exp(e2*t);ue(2)=exp(e1*t)+exp(e2*t);
The numerical and analytical solutions, and their difference,
are thendisplayed in fprint:
%% Difference between exact and numerical solutions
diff=u-ue;%
Copyright 2004 by Chapman & Hall/CRCCopyright 2004 by
Chapman & Hall/CRC
-
% Display the numerical and exact solutions,% and their
difference
fprintf('%10.2f %10.5f %10.5f %10.5f %10.5f \n',t,u,diff);
Since the library integration routines called by Program 3.1.1,
euler2a , euler2b,sseuler, rkc4a , rkc4b, ssrkc4, rkf45a , rkf45ba
, and ssrkf45, are considered in detailin Chapter 2, they will not
be discussed here.
The output from Programs 3.1.1 and 3.1.2 is listed below:
euler2a integrator
t u1 u2 u1-ue1 u2-ue20.00 0.00000 2.00000 0.00000 0.000001.00
0.36784 0.36793 0.00001 0.000012.00 0.13534 0.13534 0.00000
0.000003.00 0.04979 0.04979 0.00000 0.000004.00 0.01832 0.01832
0.00000 0.000005.00 0.00674 0.00674 0.00000 0.00000
euler2b integrator
t u1 u2 u1-ue1 u2-ue20.00 0.00000 2.00000 0.00000 0.000001.00
0.36784 0.36793 0.00001 0.000012.00 0.13534 0.13534 0.00000
0.000003.00 0.04979 0.04979 0.00000 0.000004.00 0.01832 0.01832
0.00000 0.000005.00 0.00674 0.00674 0.00000 0.00000
rkc4a integrator
t u1 u2 u1-ue1 u2-ue20.00 0.00000 2.00000 0.00000 0.000001.00
0.36783 0.36792 0.00000 0.000002.00 0.13534 0.13534 0.00000
0.000003.00 0.04979 0.04979 0.00000 0.000004.00 0.01832 0.01832
0.00000 0.000005.00 0.00674 0.00674 0.00000 0.00000
Copyright 2004 by Chapman & Hall/CRCCopyright 2004 by
Chapman & Hall/CRC
-
rkc4b integrator
t u1 u2 u1-ue1 u2-ue20.00 0.00000 2.00000 0.00000 0.000001.00
0.36783 0.36792 0.00000 0.000002.00 0.13534 0.13534 0.00000
0.000003.00 0.04979 0.04979 0.00000 0.000004.00 0.01832 0.01832
0.00000 0.000005.00 0.00674 0.00674 0.00000 0.00000
rkf45a integrator
t u1 u2 u1-ue1 u2-ue20.00 0.00000 2.00000 0.00000 0.000001.00
0.36783 0.36792 0.00000 0.000002.00 0.13534 0.13534 0.00000
0.000003.00 0.04979 0.04979 0.00000 0.000004.00 0.01832 0.01832
0.00000 0.000005.00 0.00674 0.00674 0.00000 0.00000
rkf45b integrator
t u1 u2 u1-ue1 u2-ue20.00 0.00000 2.00000 0.00000 0.000001.00
0.36783 0.36792 0.00000 0.000002.00 0.13534 0.13534 0.00000
0.000003.00 0.04978 0.04978 0.00000 0.000004.00 0.01831 0.01831
0.00000 0.000005.00 0.00673 0.00674 0.00000 0.00000
We conclude from this output that the error tolerances set in
intpar (1.0105)are observed by all six integrators.
3.2 Programming in C
Since main Program 2.2.1 and the associated header file Program
2.2.2 areunchanged in the 2x2 ODE problem, they are not listed
here. intpar, par, inital,derv, and fprint are listed below:
Copyright 2004 by Chapman & Hall/CRCCopyright 2004 by
Chapman & Hall/CRC
-
#include "ode2x2.h"
/* Type global variables */
int neqn, nout, nsteps;
double t0, tf, abserr, relerr;
/* Define file ID */FILE *fid;
void intpar()
/* Function intpar sets the parameters to control theintegration
of the 2 x 2 ODE system */{
/* Number of ODEs */neqn=2;
/* Number of output points */nout=6;
/* Maximum number of steps in the interval t0 to tf
*/nsteps=100;
/* Initial, final values of independent variable
*/t0=0.0;tf=1.0;
/* Error tolerances */abserr=pow(10,-5);relerr=pow(10,-5);
/* End of intpar */}
void par(double a[])
/* Function par sets the parameters for the 2 x 2 ODEproblem
*/{
a[1]=5.5;a[2]=4.5;
Copyright 2004 by Chapman & Hall/CRCCopyright 2004 by
Chapman & Hall/CRC
-
/* End of par */}
void inital(double u0[],double t0)
/* Function inital sets the initial condition vector forthe 2 x
2 ODE problem */{
/* Initial condition */u0[1]=0.0;u0[2]=2.0;
/* End of inital */}
void derv(double ut[], double t, double u[])
/* Function derv computes the derivative vector of the2 x 2 ODE
problem */{
/* Type variables */double a[3];
/* Problem parameters */par(a);
/* Derivative vector */ut[1]=-a[1]*u[1]+a[2]*u[2];ut[2]=
a[2]*u[1]-a[1]*u[2];
/* End of derv */}
void fprint(int ncase, double t, double u[])
/* Function fprint displays the numerical and exactsolutions to
the 2 x 2 ODE problem */{
/* Type variables */double a[3], ue[3], diff[3], e1, e2;
Copyright 2004 by Chapman & Hall/CRCCopyright 2004 by
Chapman & Hall/CRC
-
/* Problem parameters */par(a);
/* Print a heading for the solution at t = 0 */if(t
-
/* Analytical solution vector
*/ue[1]=exp(e1*t)-exp(e2*t);ue[2]=exp(e1*t)+exp(e2*t);
/* Difference between exact and numerical solutionvectors
*/diff[1]=u[1]-ue[1];diff[2]=u[2]-ue[2];
/* Display the numerical and exact solutions, andtheir
difference */
fprintf(fid,"%10.2f %10.5f %10.5f %13.4e
\n",t,u[1],ue[1],diff[1]);
fprintf(fid," %10.5f %10.5f %13.4e
\n\n",u[2],ue[2],diff[2]);
/* End of fprint */}
Program 3.2.1intpar, par, inital, derv, and fprint for the
solution of Equations 1.6 and 1.16
The only new feature of these routines is the addition of par,
which sets theproblem parameters a = 5.5, b = 4.5. These parameters
are then used in dervand fprint by a call to par:
/* Type variables */double a[3];
/* Problem parameters */par(a);
Of course, these parameters could be set directly in derv and
fprint as inProgram 3.1.2. The use of par is just an alternative,
which would be moreattractive as the number of parameters becomes
large (so that the code for theassignment statements is programmed
once in par, then used in more thanone place, such as in derv and
fprint, by calls to par).
The output from the preceding routines is as follows:
euler2a integrator
t u1(num) u1(ex) diff1u2(num) u2(ex) diff2
0.00 0.00000 0.00000 0.0000e+002.00000 2.00000 0.0000e+00
Copyright 2004 by Chapman & Hall/CRCCopyright 2004 by
Chapman & Hall/CRC
-
1.00 0.36784 0.36783 5.3545e-060.36793 0.36792 7.0006e-06
2.00 0.13534 0.13534 4.5451e-060.13534 0.13534 4.5453e-06
3.00 0.04979 0.04979 2.5082e-060.04979 0.04979 2.5082e-06
4.00 0.01832 0.01832 1.2303e-060.01832 0.01832 1.2303e-06
5.00 0.00674 0.00674 5.6575e-070.00674 0.00674 5.6575e-07
euler2b integrator
t u1(num) u1(ex) diff1u2(num) u2(ex) diff2
0.00 0.00000 0.00000 0.0000e+002.00000 2.00000 0.0000e+00
1.00 0.36784 0.36783 5.4556e-060.36793 0.36792 7.1360e-06
2.00 0.13534 0.13534 4.6322e-060.13534 0.13534 4.6323e-06
3.00 0.04979 0.04979 2.6575e-060.04979 0.04979 2.6575e-06
4.00 0.01832 0.01832 1.9472e-060.01832 0.01832 1.9472e-06
5.00 0.00674 0.00674 1.8392e-060.00674 0.00674 1.8392e-06
rkc4a integrator
t u1(num) u1(ex) diff1u2(num) u2(ex) diff2
0.00 0.00000 0.00000 0.0000e+002.00000 2.00000 0.0000e+00
Copyright 2004 by Chapman & Hall/CRCCopyright 2004 by
Chapman & Hall/CRC
-
1.00 0.36783 0.36783 -3.8034e-100.36792 0.36792 4.4217e-10
2.00 0.13534 0.13534 2.2707e-110.13534 0.13534 2.2782e-11
3.00 0.04979 0.04979 1.2551e-110.04979 0.04979 1.2551e-11
4.00 0.01832 0.01832 6.1563e-120.01832 0.01832 6.1563e-12
5.00 0.00674 0.00674 2.8310e-120.00674 0.00674 2.8310e-12
rkc4b integrator
t u1(num) u1(ex) diff1u2(num) u2(ex) diff2
0.00 0.00000 0.00000 0.0000e+002.00000 2.00000 0.0000e+00
1.00 0.36783 0.36783 -1.8012e-080.36792 0.36792 2.0370e-08
2.00 0.13534 0.13534 1.5347e-090.13534 0.13534 1.5407e-09
3.00 0.04979 0.04979 7.2352e-090.04979 0.04979 7.2352e-09
4.00 0.01832 0.01832 5.1152e-090.01832 0.01832 5.1152e-09
5.00 0.00674 0.00674 1.7098e-080.00674 0.00674 1.7098e-08
rkf45a integrator
t u1(num) u1(ex) diff1u2(num) u2(ex) diff2
0.00 0.00000 0.00000 0.0000e+002.00000 2.00000 0.0000e+00
Copyright 2004 by Chapman & Hall/CRCCopyright 2004 by
Chapman & Hall/CRC
-
1.00 0.36783 0.36783 4.4252e-120.36792 0.36792 -4.4910e-12
2.00 0.13534 0.13534 -2.4120e-140.13534 0.13534 -2.4869e-14
3.00 0.04979 0.04979 -1.3572e-140.04979 0.04979 -1.3593e-14
4.00 0.01832 0.01832 -6.6648e-150.01832 0.01832 -6.6648e-15
5.00 0.00674 0.00674 -3.0739e-150.00674 0.00674 -3.0739e-15
rkf45b integrator
t u1(num) u1(ex) diff1u2(num) u2(ex) diff2
0.00 0.00000 0.00000 0.0000e+002.00000 2.00000 0.0000e+00
1.00 0.36783 0.36783 8.6412e-070.36792 0.36792 -8.7008e-07
2.00 0.13534 0.13534 -1.4522e-070.13534 0.13534 -1.4887e-07
3.00 0.04978 0.04979 -2.1496e-060.04978 0.04979 -2.1386e-06
4.00 0.01831 0.01832 -1.6852e-060.01831 0.01832 -1.4300e-06
5.00 0.00673 0.00674 -3.8224e-060.00674 0.00674 2.1107e-06
Generally, the accuracy of the numerical solution meets or
exceeds the toler-ances set in intpar.
Copyright 2004 by Chapman & Hall/CRCCopyright 2004 by
Chapman & Hall/CRC
-
3.3 Programming in C++
Again, since main Program 2.3.1 and the associated header file
Program 2.3.2are unchanged in the 2x2 ODE problem, they are not
listed here. intpar, par,inital, derv, and fprint are listed
below:
#include "DEF.h"#include
/* Define file ID */FILE *fid;
void DEF::intpar()
/* Function intpar sets the parameters to control theintegration
of the 2 x 2 ODE system */{
/* Number of ODEs */neqn=2;
/* Number of output points */nout=6;
/* Maximum number of steps in the interval t0 to tf
*/nsteps=100;
/* Initial, final values of independent variable
*/t0=0.0;tf=1.0;
/* Error tolerances
*/abserr=pow(10.0,-5.0);relerr=pow(10.0,-5.0);
/* End of intpar */}
void DEF::inital()
/* Function inital sets the initial condition vector forthe 2 x
2 ODE problem */
Copyright 2004 by Chapman & Hall/CRCCopyright 2004 by
Chapman & Hall/CRC
-
{/* Initial condition */u0[1]=0.0;u0[2]=2.0;
/* End of inital */}
void DEF::derv(double ut[], double t, double u[])
/* Function derv computes the derivative vector of the2 x 2 ODE
problem */{
/* Type variables */double a, b;
/* Problem parameters */a=5.5;b=4.5;
/* Derivative vector */ut[1]=-a*u[1]+b*u[2];ut[2]=
b*u[1]-a*u[2];
/* End of derv */}
void DEF::fprint(int ncase, int neqn, double t, double u[])
/* Function fprint displays the numerical and exactsolutions to
the 2 x 2 ODE problem; this function hastwo override-defined
functions */{
/* Type variables */double ue[3], diff[3];double a, b, e1,
e2;
/* Problem parameters */a=5.5;b=4.5;
Copyright 2004 by Chapman & Hall/CRCCopyright 2004 by
Chapman & Hall/CRC
- /* Print a heading for the solution at t = 0 */if(t
-
/* Analytical solution eigenvalues*/e1=-(a-b);e2=-(a+b);
/* Analytical solution vector
*/ue[1]=exp(e1*t)-exp(e2*t);ue[2]=exp(e1*t)+exp(e2*t);
/* Difference between exact and numerical solutions
*/diff[1]=u[1]-ue[1];diff[2]=u[2]-ue[2];
/* Display the numerical and exact solutions, and
theirdifference */fprintf(fid,"%10.2f %10.5f %10.5f
%13.4e\n",t,u[1],ue[1],
diff[1]);fprintf(fid,"%10.2f %10.5f %10.5f
%13.4e\n",t,u[2],ue[2],
diff[2]);
/* End of fprint */}
void DEF::fprint(ofstream &fout, int ncase, int neqn,double
t, double u[])
/* Function fprint displays the numerical and exactsolutions to
the 2 x 2 ODE problem; this function hastwo override-defined
functions */{
/* Type variables */double ue[3], diff[3];double a, b, e1,
e2;
/* Problem parameters */a=5.5;b=4.5;
/* Set printing format */fout
-
/* Label for ODE integrator */switch(ncase)
{/* Fixed step modified Euler */case 1:fout
-
/* Analytical solution eigenvalues*/e1=-(a-b);e2=-(a+b);
/* Analytical solution vector
*/ue[1]=exp(e1*t)-exp(e2*t);ue[2]=exp(e1*t)+exp(e2*t);
/* Difference between exact and numerical solutions
*/diff[1]=u[1]-ue[1];diff[2]=u[2]-ue[2];fout
-
4.0000000 0.0183169 0.0183156 0.00000120.0183169 0.0183156
0.0000012
5.0000000 0.0067385 0.0067379 0.00000060.0067385 0.0067379
0.0000006
euler2b integrator
t u1(num) u1(ex) diff1u2(num) u2(ex) diff2
0.0000000 0.0000000 0.0000000 0.00000002.0000000 2.0000000
0.0000000
1.0000000 0.3678395 0.3678340 0.00000550.3679320 0.3679248
0.0000071
2.0000000 0.1353399 0.1353353 0.00000460.1353399 0.1353353
0.0000046
3.0000000 0.0497897 0.0497871 0.00000270.0497897 0.0497871
0.0000027
4.0000000 0.0183176 0.0183156 0.00000190.0183176 0.0183156
0.0000019
5.0000000 0.0067398 0.0067379 0.00000180.0067398 0.0067379
0.0000018
rkc4a integrator
t u1(num) u1(ex) diff1u2(num) u2(ex) diff2
0.0000000 0.0000000 0.0000000 0.00000002.0000000 2.0000000
0.0000000
1.0000000 0.3678340 0.3678340 0.00000000.3679248 0.3679248
0.0000000
2.0000000 0.1353353 0.1353353 0.00000000.1353353 0.1353353
0.0000000
Copyright 2004 by Chapman & Hall/CRCCopyright 2004 by
Chapman & Hall/CRC
-
3.0000000 0.0497871 0.0497871 0.00000000.0497871 0.0497871
0.0000000
4.0000000 0.0183156 0.0183156 0.00000000.0183156 0.0183156
0.0000000
5.0000000 0.0067379 0.0067379 0.00000000.0067379 0.0067379
0.0000000
rkc4b integrator
t u1(num) u1(ex) diff1u2(num) u2(ex) diff2
0.0000000 0.0000000 0.0000000 0.00000002.0000000 2.0000000
0.0000000
1.0000000 0.3678340 0.3678340 0.00000000.3679249 0.3679248
0.0000000
2.0000000 0.1353353 0.1353353 0.00000000.1353353 0.1353353
0.0000000
3.0000000 0.0497871 0.0497871 0.00000000.0497871 0.0497871
0.0000000
4.0000000 0.0183156 0.0183156 0.00000000.0183156 0.0183156
0.0000000
5.0000000 0.0067380 0.0067379 0.00000000.0067380 0.0067379
0.0000000
rkf45a integrator
t u1(num) u1(ex) diff1u2(num) u2(ex) diff2
0.0000000 0.0000000 0.0000000 0.00000002.0000000 2.0000000
0.0000000
1.0000000 0.3678340 0.3678340 0.00000000.3679248 0.3679248
0.0000000
Copyright 2004 by Chapman & Hall/CRCCopyright 2004 by
Chapman & Hall/CRC
-
2.0000000 0.1353353 0.1353353 0.00000000.1353353 0.1353353
0.0000000
3.0000000 0.0497871 0.0497871 0.00000000.0497871 0.0497871
0.0000000
4.0000000 0.0183156 0.0183156 0.00000000.0183156 0.0183156
0.0000000
5.0000000 0.0067379 0.0067379 0.00000000.0067379 0.0067379
0.0000000
rkf45b integrator
t u1(num) u1(ex) diff1u2(num) u2(ex) diff2
0.0000000 0.0000000 0.0000000 0.00000002.0000000 2.0000000
0.0000000
1.0000000 0.3678340 0.3678340 0.00000000.3679248 0.3679248
0.0000000
2.0000000 0.1353353 0.1353353 0.00000000.1353353 0.1353353
0.0000000
3.0000000 0.0497871 0.0497871 0.00000000.0497871 0.0497871
0.0000000
4.0000000 0.0183156 0.0183156 0.00000000.0183156 0.0183156
0.0000000
5.0000000 0.0067380 0.0067379 0.00000000.0067380 0.0067379
0.0000000
Generally, the accuracy of the numerical solution meets or
exceeds the toler-ances set in intpar.
3.4 Programming in Fortran
Again, since main Program 2.4.1 is unchanged in the 2x2 ODE
problem, it isnot listed here. intpar, par, inital, derv, and
fprint are listed below:
Copyright 2004 by Chapman & Hall/CRCCopyright 2004 by
Chapman & Hall/CRC
-
subroutine intpar(neqn,nout,nsteps,t0,tf,abserr,relerr)CC
Subroutine intpar sets the parameters to control theC integration
of the 2 x 2 ODE systemCC Double precision coding is used
implicit double precision(a-h,o-z)CC Number of ODEs
neqn=2CC Number of output points
nout=6CC Maximum number of steps in the interval t0 to tf
nsteps=100CC Initial, final values of the independent
variable
t0=0.0d0tf=0.2d0
CC Error tolerances
abserr=1.0d-05relerr=1.0d-05return
CC End of intpar
end
subroutine inital(neqn,t,u0)CC Subroutine inital sets the
initial condition vectorC for the 2 x 2 ODE problemCC Double
precision coding is used
implicit double precision(a-h,o-z)CC Size the arrays
dimension u0(neqn)CC Initial condition
u0(1)=0.0d0u0(2)=2.0d0return
Copyright 2004 by Chapman & Hall/CRCCopyright 2004 by
Chapman & Hall/CRC
-
CC End of inital
end
subroutine par(a,b)CC Subroutine par sets the parameters for the
2 x 2 ODEC problemCC Double precision coding is used
implicit double precision(a-h,o-z)CC Problem parameters
a=5.5d0b=4.5d0return
CC End of par
end
subroutine derv(neqn,t,u,ut)CC Subroutine derv computes the
derivative vectorC of the 2 x 2 ODE problemCC Double precision
coding is used
implicit double precision(a-h,o-z)CC Size the arrays
dimension u(neqn), ut(neqn)CC Problem parameters
call par(a,b)CC Derivative vector
ut(1)=-a*u(1)+b*u(2)ut(2)= b*u(1)-a*u(2)return
CC End of derv
end
Copyright 2004 by Chapman & Hall/CRCCopyright 2004 by
Chapman & Hall/CRC
-
subroutine fprint(no,ncase,neqn,t,u)CCC Subroutine fprint
displays the numerical andC analytical solutions to the 2 x 2 ODE
problemCC Double precision coding is used
implicit double precision(a-h,o-z)CC Size the arrays
dimension u(neqn)CC Problem parameters
call par(a,b)CC Print a heading for the solution at t = 0
if(t.le.0.0d0)thenCC Label for ODE integratorCC Fixed step
modfied Euler
if(ncase.eq.1)thenwrite(no,11)
11 format(/,6x,'euler2a integrator')CC Variable step modified
Euler
else if(ncase.eq.2)thenwrite(no,12)
12 format(/,6x,'euler2b integrator')CC Fixed step classical
fourth order RK
else if(ncase.eq.3)thenwrite(no,13)
13 format(/,6x,'rkc4a integrator')CC Variable step classical
fourth order RK
else if(ncase.eq.4)thenwrite(no,14)
14 format(/,6x,'rkc4b integrator')CC Fixed step RK Fehlberg
45
else if(ncase.eq.5)thenwrite(no,15)
15 format(/,6x,'rkf45a integrator')C
Copyright 2004 by Chapman & Hall/CRCCopyright 2004 by
Chapman & Hall/CRC
-
C Variable step RK Fehlberg 45else if(ncase.eq.6)then
write(no,16)16 format(/,6x,'rkf45b integrator')
end ifCC Heading
write(no,2)2
format(/,9x,'t',3x,'u1(num)',4x,'u1(ex)',8x,'diff1',/,
1 10x, 3x,'u2(num)',4x,'u2(ex)',8x,'diff2',/)CC End of t = 0
heading
end ifCC Analytical solution
u1exact=dexp(-(a-b)*t)-dexp(-(a+b)*t)u2exact=dexp(-(a-b)*t)+dexp(-(a+b)*t)
CC Difference between exact and numerical solution vectors
diff1=u(1)-u1exactdiff2=u(2)-u2exact
CC Display the numerical and exact solutions,C and their
difference
write(no,3)t,u(1),u1exact,diff1,u(2),u2exact,diff23
format(f10.2,2f10.5,e13.4,/,10x,2f10.5,e13.4,/)
returnCC End of fprint
end
Program 3.4.1intpar, inital, par, derv, and fprint for the
solution of Equations 1.6 and 1.16
The output from the preceding routines is as follows:
euler2a integrator
t u1(num) u1(ex) diff1u2(num) u2(ex) diff2
0.00 0.00000 0.00000 0.0000E+002.00000 2.00000 0.0000E+00
1.00 0.36784 0.36783 0.5354E-050.36793 0.36792 0.7001E-05
Copyright 2004 by Chapman & Hall/CRCCopyright 2004 by
Chapman & Hall/CRC
-
2.00 0.13534 0.13534 0.4545E-050.13534 0.13534 0.4545E-05
3.00 0.04979 0.04979 0.2508E-050.04979 0.04979 0.2508E-05
4.00 0.01832 0.01832 0.1230E-050.01832 0.01832 0.1230E-05
5.00 0.00674 0.00674 0.5657E-060.00674 0.00674 0.5657E-06
euler2b integrator
t u1(num) u1(ex) diff1u2(num) u2(ex) diff2
0.00 0.00000 0.00000 0.0000E+002.00000 2.00000 0.0000E+00
1.00 0.36784 0.36783 0.5456E-050.36793 0.36792 0.7136E-05
2.00 0.13534 0.13534 0.4632E-050.13534 0.13534 0.4632E-05
3.00 0.04979 0.04979 0.2658E-050.04979 0.04979 0.2658E-05
4.00 0.01832 0.01832 0.1947E-050.01832 0.01832 0.1947E-05
5.00 0.00674 0.00674 0.1839E-050.00674 0.00674 0.1839E-05
rkc4a integrator
t u1(num) u1(ex) diff1u2(num) u2(ex) diff2
0.00 0.00000 0.00000 0.0000E+002.00000 2.00000 0.0000E+00
1.00 0.36783 0.36783 -0.3803E-090.36792 0.36792 0.4422E-09
Copyright 2004 by Chapman & Hall/CRCCopyright 2004 by
Chapman & Hall/CRC
-
2.00 0.13534 0.13534 0.2271E-100.13534 0.13534 0.2278E-10
3.00 0.04979 0.04979 0.1255E-100.04979 0.04979 0.1255E-10
4.00 0.01832 0.01832 0.6156E-110.01832 0.01832 0.6156E-11
5.00 0.00674 0.00674 0.2831E-110.00674 0.00674 0.2831E-11
rkc4b integrator
t u1(num) u1(ex) diff1u2(num) u2(ex) diff2
0.00 0.00000 0.00000 0.0000E+002.00000 2.00000 0.0000E+00
1.00 0.36783 0.36783 -0.1801E-070.36792 0.36792 0.2037E-07
2.00 0.13534 0.13534 0.1535E-080.13534 0.13534 0.1541E-08
3.00 0.04979 0.04979 0.7235E-080.04979 0.04979 0.7235E-08
4.00 0.01832 0.01832 0.5115E-080.01832 0.01832 0.5115E-08
5.00 0.00674 0.00674 0.1710E-070.00674 0.00674 0.1710E-07
rkf45a integrator
t u1(num) u1(ex) diff1u2(num) u2(ex) diff2
0.00 0.00000 0.00000 0.0000E+002.00000 2.00000 0.0000E+00
1.00 0.36783 0.36783 0.4425E-110.36792 0.36792 -0.4491E-11
Copyright 2004 by Chapman & Hall/CRCCopyright 2004 by
Chapman & Hall/CRC
-
2.00 0.13534 0.13534 -0.2412E-130.13534 0.13534 -0.2487E-13
3.00 0.04979 0.04979 -0.1357E-130.04979 0.04979 -0.1359E-13
4.00 0.01832 0.01832 -0.6665E-140.01832 0.01832 -0.6665E-14
5.00 0.00674 0.00674 -0.3074E-140.00674 0.00674 -0.3074E-14
rkf45b integrator
t u1(num) u1(ex) diff1u2(num) u2(ex) diff2
0.00 0.00000 0.00000 0.0000E+002.00000 2.00000 0.0000E+00
1.00 0.36783 0.36783 0.8641E-060.36792 0.36792 -0.8701E-06
2.00 0.13534 0.13534 -0.1452E-060.13534 0.13534 -0.1489E-06
3.00 0.04978 0.04979 -0.2150E-050.04978 0.04979 -0.2139E-05
4.00 0.01831 0.01832 -0.1685E-050.01831 0.01832 -0.1430E-05
5.00 0.00673 0.00674 -0.3822E-050.00674 0.00674 0.2111E-05
Generally, the accuracy of the numerical solution meets or
exceeds the toler-ances set in intpar.
3.5 Programming in Java
Again, since main Program 2.5.1 and interface routines 2.5.2 are
unchangedin the 2x2 ODE problem, they are not listed here. intpar,
par, inital, derv, andfprint are listed below:
Copyright 2004 by Chapman & Hall/CRCCopyright 2004 by
Chapman & Hall/CRC
-
/* This file is a member of the package mol */package mol;
import mol.MOL;import java.math.*;import java.io.*;import
java.text.*;
public class DEF extends MOL implements ode2x2interface{
public DEF(){
/* Integration parameters */this.intpar();
/* Declare arrays */u0=new double[SIZE];u=new double[SIZE];e=new
double[SIZE];
/* Problem parameters */this.par();
/* Initial condition vector */this.inital();
}
public void intpar()
/* Function intpar sets the parameters to control theintegration
of the 2 x 2 ODE system */{
/* Number of ODEs */neqn=2;
/* Size of arrays in MOL library */SIZE=neqn+1;
/* Number of output points */nout=6;
/* Maximum number of steps in the interval t0 to tf */
Copyright 2004 by Chapman & Hall/CRCCopyright 2004 by
Chapman & Hall/CRC
-
nsteps=100;
/* Initial, final values of the independent variable
*/t0=0.0;tf=1.0;
/* Error tolerances
*/abserr=Math.pow(10.0,-5.0);relerr=Math.pow(10.0,-5.0);
/* End of inpar */}
public void inital()
/* Function inital sets the initial condition vector forthe 2 x
2 ODE problem */{
u0[1]=0.0E0;u0[2]=2.0E0;
/* End of inital */}
public void par()
/* Function par sets the parameters for the 2 x 2 ODEproblem
*/{
a=5.5;b=4.5;
/* End of par */}
public void derv(double ut[], double t, double u[])
/* Function derv computes the derivative vector of the2 x 2 ODE
problem */{
/* Problem parameters */par();
Copyright 2004 by Chapman & Hall/CRCCopyright 2004 by
Chapman & Hall/CRC
-
/* Derivative vector */ut[1]=-a*u[1] + b*u[2];ut[2]= b*u[1] -
a*u[2];
/* End of derv */}
public void fprint(PrintWriter f, int ncase, int neqn,double t,
double u[])
/* Function fprint displays the numerical and exactsolutions to
the 2 x 2 ODE problem */{
/* Type variables */double ue1, ue2;double diff1, diff2;double
e1, e2;
/* Print a heading for the solution at t = 0 */if(t
-
/* Fixed step RK Fehlberg 45 */case 5:f.println("\n rkf45a
integrator\n");break;
/* Variable step RK Fehlberg 45 */case 6:f.println("\n rkf45b
integrator\n");break;
}
/* Heading */f.println(" t u1(num) u1(ex) diff1");f.println("
u2(num) u2(ex) diff2");
/* End of t = 0 heading */}
/* Analytical solution
*/ue1=Math.exp(-(a-b)*t)-Math.exp(-(a+b)*t);ue2=Math.exp(-(a-b)*t)+Math.exp(-(a+b)*t);
/* Difference between exact and numerical solutionvectors
*/diff1=u[1]-ue1;diff2=u[2]-ue2;
/* Display format for floating numbers */DecimalFormat df1 = new
DecimalFormat(" 0.00");DecimalFormat df2 = new
DecimalFormat("0.0000000");
/* Display the numerical and exact solutions, and
theirdifference
*/f.println("\n"+df1.format(t)+"\t"+df2.format(u[1])
+"\t"+df2.format(ue1)+"\t"+df2.format(diff1));f.println("
\t"+df2.format(u[2])
+"\t"+df2.format(ue2)+"\t"+df2.format(diff2));/* End of fprint
*/}
/* End of DEF */}
Program 3.5.1intpar, inital, par, derv, and fprint for the
solution of Equations 1.6 and 1.16
Copyright 2004 by Chapman & Hall/CRCCopyright 2004 by
Chapman & Hall/CRC
-
The output from the preceding routines is as follows:
euler2a integrator
t u1(num) u1(ex) diff1u2(num) u2(ex) diff2
0.00 0.0000000 0.0000000 0.00000002.0000000 2.0000000
0.0000000
1.00 0.3678394 0.3678340 0.00000540.3679318 0.3679248
0.0000070
2.00 0.1353398 0.1353353 0.00000450.1353398 0.1353353
0.0000045
3.00 0.0497896 0.0497871 0.00000250.0497896 0.0497871
0.0000025
4.00 0.0183169 0.0183156 0.00000120.0183169 0.0183156
0.0000012
5.00 0.0067385 0.0067379 0.00000060.0067385 0.0067379
0.0000006
euler2b integrator
t u1(num) u1(ex) diff1u2(num) u2(ex) diff2
0.00 0.0000000 0.0000000 0.00000002.0000000 2.0000000
0.0000000
1.00 0.3678395 0.3678340 0.00000550.3679320 0.3679248
0.0000071
2.00 0.1353399 0.1353353 0.00000460.1353399 0.1353353
0.0000046
3.00 0.0497897 0.0497871 0.00000270.0497897 0.0497871
0.0000027
Copyright 2004 by Chapman & Hall/CRCCopyright 2004 by
Chapman & Hall/CRC
-
4.00 0.0183176 0.0183156 0.00000190.0183176 0.0183156
0.0000019
5.00 0.0067398 0.0067379 0.00000180.0067398 0.0067379
0.0000018
rkc4a integrator
t u1(num) u1(ex) diff1u2(num) u2(ex) diff2
0.00 0.0000000 0.0000000 0.00000002.0000000 2.0000000
0.0000000
1.00 0.3678340 0.3678340 -0.00000000.3679248 0.3679248
0.0000000
2.00 0.1353353 0.1353353 0.00000000.1353353 0.1353353
0.0000000
3.00 0.0497871 0.0497871 0.00000000.0497871 0.0497871
0.0000000
4.00 0.0183156 0.0183156 0.00000000.0183156 0.0183156
0.0000000
5.00 0.0067379 0.0067379 0.00000000.0067379 0.0067379
0.0000000
rkc4b integrator
t u1(num) u1(ex) diff1u2(num) u2(ex) diff2
0.00 0.0000000 0.0000000 0.00000002.0000000 2.0000000
0.0000000
1.00 0.3678340 0.3678340 -0.00000000.3679249 0.3679248
0.0000000
2.00 0.1353353 0.1353353 0.00000000.1353353 0.1353353
0.0000000
Copyright 2004 by Chapman & Hall/CRCCopyright 2004 by
Chapman & Hall/CRC
-
3.00 0.0497871 0.0497871 0.00000000.0497871 0.0497871
0.0000000
4.00 0.0183156 0.0183156 0.00000000.0183156 0.0183156
0.0000000
5.00 0.0067380 0.0067379 0.00000000.0067380 0.0067379
0.0000000
rkf45a integrator
t u1(num) u1(ex) diff1u2(num) u2(ex) diff2
0.00 0.0000000 0.0000000 0.00000002.0000000 2.0000000
0.0000000
1.00 0.3678340 0.3678340 0.00000000.3679248 0.3679248
-0.0000000
2.00 0.1353353 0.1353353 -0.00000000.1353353 0.1353353
-0.0000000
3.00 0.0497871 0.0497871 -0.00000000.0497871 0.0497871
-0.0000000
4.00 0.0183156 0.0183156 -0.00000000.0183156 0.0183156
-0.0000000
5.00 0.0067379 0.0067379 -0.00000000.0067379 0.0067379
-0.0000000
rkf45b integrator
t u1(num) u1(ex) diff1u2(num) u2(ex) diff2
0.00 0.0000000 0.0000000 0.00000002.0000000 2.0000000
0.0000000
1.00 0.3678349 0.3678340 0.00000090.3679240 0.3679248
-0.0000009
Copyright 2004 by Chapman & Hall/CRCCopyright 2004 by
Chapman & Hall/CRC
-
2.00 0.1353351 0.1353353 -0.00000010.1353351 0.1353353
-0.0000001
3.00 0.0497849 0.0497871 -0.00000210.0497849 0.0497871
-0.0000021
4.00 0.0183140 0.0183156 -0.00000170.0183142 0.0183156
-0.0000014
5.00 0.0067341 0.0067379 -0.00000380.0067401 0.0067379
0.0000021
Generally, the accuracy of the numerical solution meets or
exceeds the toler-ances set in intpar.
3.6 Programming in Maple
Since main Program 3.6.1 (and subordinate routines) accesses
specific files byread statements, it is listed first:
> restart:
> read "c:\\odelib\\maple\\ode2x2\\ode2x2.txt";
> ode2x2();
Program 3.6.1Maple main program ode2x2.mws for the numerical
integration of Equations1.6 and 1.16
ode2x2:=proc()## Main program ode2x2 computes the numerical#
solution to the 2 x 2 ODE system by one of# six integrators## Type
variables
global neqn, nout, nsteps, t0, tf, abserr, relerr:local u0, u,
tp, ncase, i, j:
## Step through six integrators
for ncase from 1 to 6 do
Copyright 2004 by Chapman & Hall/CRCCopyright 2004 by
Chapman & Hall/CRC
-
## Integration parameters
read "c:\\odelib\\maple\\ode2x2\\intpar.txt":intpar():
## Size arrays
u0:=array(1..neqn): u:=array(1..neqn):## Initial condition
vector
read
"c:\\odelib\\maple\\ode2x2\\inital.txt":inital(n,t0,u0):
## Output interval
tp:=tf-t0:## Compute solution at nout output points
for j from 1 to nout do## Print current solution
read
"c:\\odelib\\maple\\ode2x2\\fprint.txt":fprint(ncase,neqn,t0,u0):
## Fixed step modified Euler integrator
if (ncase = 1) thenread
"c:\\odelib\\maple\\ode2x2\\euler2a.txt":euler2a(neqn,t0,tf,u0,nsteps,u):
end if:## Variable step modified Euler integrator
if (ncase = 2) thenread
"c:\\odelib\\maple\\ode2x2\\euler2b.txt":euler2b(neqn,t0,tf,u0,nsteps,abserr,relerr,u):
end if:## Fixed step classical fourth order RK integrator
if (ncase = 3) thenread
"c:\\odelib\\maple\\ode2x2\\rkc4a.txt":rkc4a(neqn,t0,tf,u0,nsteps,u):
end if:## Variable step classical fourth order RK integrator
if (ncase = 4) thenread
"c:\\odelib\\maple\\ode2x2\\rkc4b.txt":rkc4b(neqn,t0,tf,u0,nsteps,abserr,relerr,u):
end if:
Copyright 2004 by Chapman & Hall/CRCCopyright 2004 by
Chapman & Hall/CRC
-
## Fixed step RK Fehlberg (RKF45) integrator
if (ncase = 5) thenread
"c:\\odelib\\maple\\ode2x2\\rkf45a.txt":rkf45a(neqn,t0,tf,u0,nsteps,u):
end if:## Variable step RK Fehlberg (RKF45) integrator
if (ncase = 6) thenread
"c:\\odelib\\maple\\ode2x2\\rkf45b.txt":rkf45b(neqn,t0,tf,u0,nsteps,abserr,relerr,u):
end if:## Advance solution
t0:=tf:tf:=tf+tp:for i from 1 to neqn do
u0[i]:=u[i]:end do:
## Next output
end do:## Next integrator
end do:## End of ode2x2.txt
end:
Program 3.6.2Maple main program ode2x2.txt for the numerical
integration of Equations1.6 and 1.16
Note the reference to specific files by read statements,
e.g.,
## Initial condition vector
read
"c:\\odelib\\maple\\ode2x2\\inital.txt":inital(neqn,t0,u0):
intpar, inital, derv, and fprint are listed below:
intpar:=proc()## Function intpar sets the parameters to control
the# integration of the 2 x 2 ODE problem
Copyright 2004 by Chapman & Hall/CRCCopyright 2004 by
Chapman & Hall/CRC
-
## Type variables
global neqn, nout, nsteps, t0, tf, abserr, relerr:## Number of
first order ODEs
neqn:=2:## Number of output points
nout:=6:## Maximum number of steps in the interval t0 to tf
nsteps:=100:## Initial, final values of independent variable
t0:=0.0:tf:=1.0:
## Error tolerances
abserr:=1.0e-05:relerr:=1.0e-05:
## End of intpar
end:
inital:=proc(neqn,t,u0)## Procedure inital sets the initial
condition vector# for the 2 x 2 ODE problem#
u0[1]:=0:u0[2]:=2:
## End of inital
end:
derv:=proc(neqn,t,u,ut)## Procedure derv computes the derivative
vector# of the 2 x 2 ODE problem## Type variables
global a, b:#
Copyright 2004 by Chapman & Hall/CRCCopyright 2004 by
Chapman & Hall/CRC
-
# Problem parametersa:=5.5:b:=4.5:
## Derivative vector
ut[1]:=-a*u[1]+b*u[2]:ut[2]:= b*u[1]-a*u[2]:
## End of derv
end:
fprint:=proc(ncase,neqn,t,u)## Procedure fprint displays the
numerical and# exact solutions to the 2 x 2 ODE problem## Type
variables
global a, b:local e1, e2, ue, diff, i:
## Define arrays
ue:=array(1..neqn): diff:=array(1..neqn):## Print a heading for
the solution at t = 0
if (t
-
## Fixed step RK Fehlberg 45
elif (ncase = 5) thenprintf(`\n\n rkf45a integrator\n\n`);
## Variable step RK Fehlberg 45
elif (ncase = 6) thenprintf(`\n\n rkf45b integrator\n\n`);
end if:## Heading
printf(` t u1 u2 u1-ue1 u2-ue2\n`);## End of t = 0 heading
end if:## Numerical and analytical solution output## Exact
solution eigenvalues
e1:=-(a-b):e2:=-(a+b):
## Analytical solution
ue[1]:=exp(e1*t)-exp(e2*t):ue[2]:=exp(e1*t)+exp(e2*t):
## Difference between exact and numerical solutions
for i from 1 to neqn dodiff[i]:=u[i]-ue[i]:
end do:## Display the numerical and exact solutions,# and their
difference
printf(`%10.2f %10.5f %10.5f %10.5f %10.5f
\n`,t,u[1],u[2],diff[1],diff[2]);
## End of fprint
end:
Program 3.6.3intpar, inital, derv, and fprint for the solution
of Equations 1.6 and 1.16
The output from the preceding routines is as follows:
Copyright 2004 by Chapman & Hall/CRCCopyright 2004 by
Chapman & Hall/CRC
-
euler2a integrator
t u1 u2 u1-ue1 u2-ue20.00 0.00000 2.00000 0.00000 0.000001.00
.36784 .36793 .00001 .000012.00 .13534 .13534 .00000 .000003.00
.04979 .04979 .00000 .000004.00 .01832 .01832 .00000 .000005.00
.00674 .00674 .00000 .00000
euler2b integrator
t u1 u2 u1-ue1 u2-ue20.00 0.00000 2.00000 0.00000 0.000001.00
.36784 .36793 .00001 .000012.00 .13534 .13534 .00000 .000003.00
.04979 .04979 .00000 .000004.00 .01832 .01832 .00000 .000005.00
.00674 .00674 .00000 .00000
rkc4a integrator
t u1 u2 u1-ue1 u2-ue20.00 0.00000 2.00000 0.00000 0.000001.00
.36783 .36792 .00000 .000002.00 .13534 .13534 .00000 .000003.00
.04979 .04979 .00000 .000004.00 .01832 .01832 .00000 .000005.00
.00674 .00674 .00000 .00000
rkc4b integrator
t u1 u2 u1-ue1 u2-ue20.00 0.00000 2.00000 0.00000 0.000001.00
.36783 .36792 -.00000 .000002.00 .13534 .13534 .00000 .000003.00
.04979 .04979 .00000 .000004.00 .01832 .01832 .00000 .000005.00
.00674 .00674 .00000 .00000
Copyright 2004 by Chapman & Hall/CRCCopyright 2004 by
Chapman & Hall/CRC
-
rkf45a integrator
t u1 u2 u1-ue1 u2-ue20.00 0.00000 2.00000 0.00000 0.000001.00
.36783 .36792 -.00000 -.000002.00 .13534 .13534 -.00000 -.000003.00
.04979 .04979 0.00000 0.000004.00 .01832 .01832 .00000 .000005.00
.00674 .00674 .00000 .00000
rkf45b integrator
t u1 u2 u1-ue1 u2-ue20.00 0.00000 2.00000 0.00000 0.000001.00
.36783 .36792 .00000 -.000002.00 .13534 .13534 -.00000 -.000003.00
.04978 .04978 -.00000 -.000004.00 .01831 .01831 -.00000 -.000005.00
.00674 .00674 -.00000 -.00000
Generally, the accuracy of the numerical solution meets or
exceeds the toler-ances set in intpar.
This completes the discussion of the 2x2 ODE problem programmed
in thesix languages. Basically, what we have considered is the use
of the libraryintegrations for the solution of nxn systems of ODEs
(as illustrated by thesolution of the 2x2 system).
We again point out that the preceding numerical solutions are
for a = 5.5,b = 4.5 corresponding to the nonstiff case 1 = 1, 2 =
10. As expected,this problem can be handled efficiently and with
good accuracy by the sixnonstiff integrators (stability is not a
problem). However, for the stiff casea = 500, 000.5, b = 499, 999.5
listed after Equations 1.54, a stiff integratorshould be used to
efficiently handle the problem of stability. This require-ment (for
a stiff or implicit integrator) is discussed in some detail
inAppendix C.
Thus, we emphasize that the library integrators discussed
previously havelimitations (as do all numerical algorithms). They
are therefore intended toserve as a starting point, and to
demonstrate some basic concepts and ap-proaches. But success in
solving any particular problem cannot be guaranteedin advance, and
generally some experimentation with the choice of integra-tors and
parameters (such as error tolerances) is required to arrive at a
solutionwith acceptable accuracy and computational effort.
Copyright 2004 by Chapman & Hall/CRCCopyright 2004 by
Chapman & Hall/CRC
-
For example, we offer the suggestion that for a new ODE problem,
a nonstiff(explicit) integrator should be tried first. Our
experience has indicated that abroad spectrum of problems can be
handled in this way. If the calculationsappear to be excessive,
possibly signaling stiffness, then a switch to a stiffintegrator is
a logical next step.
We now consider two problems in PDEs in the next two chapters.
We shallsee that the preceding techniques for ODEs can also be
applied to PDEs.
Copyright 2004 by Chapman & Hall/CRCCopyright 2004 by
Chapman & Hall/CRC
Ordinary and Partial Differential Equation Routines in C, C++,
Fortran, Java, Maple, and MATLABContentsChapter 3: Solution of a 2
x 2 ODE System3.1 Programming in MATLAB3.2 Programming in C3.3
Programming in C++3.4 Programming in Fortran3.5 Programming in
Java3.6 Programming in Maple