bvode
bvode —  boundary value problems for ODE  
Calling sequence
   [z]=bvode(points,ncomp,m,aleft,aright,zeta,ipar,ltol,tol,fixpnt,...  
 fsub1,dfsub1,gsub1,dgsub1,guess1)  
Parameters
| z   | The solution of the ode evaluated on the mesh given by points | 
| points   | an array which gives the points for which we want the solution | 
| ncomp   | number of differential equations   (ncomp <= 20) | 
| m   | a vector of size ncomp. m(j) gives the  order of the j-th differential equation | 
| aleft   | left end of interval | 
| aright   | right end of interval | 
| zeta   | zeta(j) gives j-th side condition point (boundary point). must have zeta(j) <= zeta(j+1) 
    all side condition points must be mesh points in all meshes used, see description of ipar(11) and fixpnt below.
    | 
| ipar   | an integer array dimensioned at least 11. a list of the parameters in ipar and their meaning follows some parameters are renamed in bvode; these new names are given in parentheses. | ipar(1)   | 0  if the problem is linear, 1 if the problem is nonlinear |  | ipar(2)   | = number of collocation points per subinterval  (= k ) where max m(i) <=  k <= 7 . 
    if ipar(2)=0 then bvode sets  
   k = max ( max m(i)+1, 5-max m(i) )  |  | ipar(3)   | = number of subintervals in the initial mesh  ( = n ). if ipar(3) = 0 then bvode arbitrarily sets n = 5. |  | ipar(4)   | = number of solution and derivative tolerances.  ( = ntol ) we require 0 < ntol <= mstar.  |  | ipar(5)   | = dimension of fspace ( = ndimf ) a real work array. its size provides a constraint on nmax. choose ipar(5) according to the formula |  | ipar(6)   | = dimension of ispace ( = ndimi )an integer work array. its size
  provides a constraint on nmax, the maximum number of
  subintervals. choose ipar(6) according to the formula |  | ipar(7)   | output control ( = iprint ) | = -1   | for full diagnostic printout |  | = 0   | for selected printout |  | = 1   | for no printout |  
  |  | ipar(8)   | ( = iread ) | = 0   | causes bvode to generate a uniform initial mesh. |  | = xx   | Other values are not implemented yet in Scilab | = 1   | if the initial mesh is provided by the user.  it is defined in fspace as follows:  the mesh 
    will occupy  fspace(1), ..., fspace(n+1). the user needs to supply only the interior mesh points  fspace(j) = x(j), j = 2, ..., n.  |  | = 2 if the initial mesh is supplied by the user   | as with ipar(8)=1, and in addition no adaptive mesh selection is to be done. |  
  |  
  |  | ipar(9)   | ( = iguess ) | = 0   | if no initial guess for the solution is provided. |  | = 1   | if an initial guess is provided by the user in subroutine  guess. |  | = 2   | if an initial mesh and approximate solution coefficients are provided by the user in fspace. (the former and new mesh are the same). |  | = 3   | if a former mesh and approximate solution coefficients are provided by the user in fspace, and the new mesh is to be taken twice as coarse; i.e.,every second point from the former mesh. |  | = 4   | if in addition to a former initial mesh and approximate solution coefficients, a new mesh is provided in fspace as well. (see description of output for further details on iguess = 2, 3, and 4.) |  
  |  | ipar(10)   | | = 0   | if the problem is regular |  | = 1   | if the first relax factor is =rstart, and the nonlinear iteration does not rely on past covergence (use for an extra sensitive nonlinear problem only). |  | = 2   | if we are to return immediately upon  (a) two successive nonconvergences, or  (b) after obtaining error estimate for the first time. |  
  |  | ipar(11)   | = number of fixed points in the mesh other than aleft
  and aright. ( = nfxpnt , the dimension of
  fixpnt) the code requires that all side condition
  points other than aleft and aright (see
  description of zeta ) be included as fixed points in
  fixpnt. |  
  | 
| ltol   | an array of dimension ipar(4). ltol(j) =
  l  specifies that the j-th tolerance in  tol  controls the
  error in the l-th component of z(u).   also require
  that | 
| tol   | an array of dimension ipar(4). tol(j) is the error tolerance on the ltol(j) -th component of z(u). thus, the code attempts to satisfy for j=1,...,ntol  on each subinterval 
    if v(x) is the approximate solution vector.
    | 
| fixpnt   | an array of dimension ipar(11). it contains the points, other than aleft and aright, which are to be included in every mesh. | 
| externals   | The function fsub,dfsub,gsub,dgsub,guess are Scilab
  externals i.e. functions (see syntax below) or the name of a Fortran
  subroutine (character string) with specified calling sequence or a
  list. An external as a  character string refers to the name of a
  Fortran subroutine. The Fortran coded function interface to bvode
  are specified in the file fcol.f. | fsub   | name of subroutine for evaluating 
    at a point x in (aleft,aright). it should have the heading  [f]=fsub(x,z)  where f is the vector containing the value of fi(x,z(u)) in the i-th component and 
   
    is defined as above under  purpose .
    |  | dfsub   | name of subroutine for evaluating the Jacobian of f(x,z(u)) at a point x.  it should have the heading [df]=dfsub (x , z ) where z(u(x)) is defined as for fsub and the (ncomp) by (mstar) array df should be filled by the partial derivatives of  f, viz, for a particular call one calculates |  | gsub   | name of subroutine for evaluating the i-th component of 
    at a point x = zeta(i)  where 
   1<=i<=mstar. 
    it should have the heading[g]=gsub (i , z) where z(u) is as for fsub, and i and g=gi  are as above. note that in contrast to f in  fsub , here only one value per call is returned in g.
    |  | dgsub   | name of subroutine for evaluating the i-th row of the Jacobian of
  g(x,u(x)).  it should have the heading [dg]=dgsub
  (i , z ) where z(u) is as for fsub, i as for
  gsub and the mstar-vector  dg should be filled with the
  partial derivatives of g, viz, for a particular call one calculates |  | guess   | name of subroutine to evaluate the initial approximation for
  z(u(x)) and for dmval(u(x))= vector of the
  mj-th derivatives of u(x). it should have the heading
  [z,dmval]= guess (x ) note that this subroutine is used
  only if  ipar(9) = 1, and then all  mstar
  components of z and  ncomp  components of  dmval  should be
  specified for any x, aleft <= x <= aright .  |  
  | 
Description
    this package solves a multi-point boundary value
    problem for a mixed order system of ode-s given by
    the boundary points satisfy
    the orders mi of the differential equations satisfy
1<=m(i)<=4.
Examples
deff('df=dfsub(x,z)','df=[0,0,-6/x**2,-6/x]')
deff('f=fsub(x,z)','f=(1 -6*x**2*z(4)-6*x*z(3))/x**3')
deff('g=gsub(i,z)','g=[z(1),z(3),z(1),z(3)];g=g(i)')
deff('dg=dgsub(i,z)',['dg=[1,0,0,0;0,0,1,0;1,0,0,0;0,0,1,0]';
                      'dg=dg(i,:)'])
deff('[z,mpar]=guess(x)','z=0;mpar=0')// unused here
deff('u=trusol(x)',[   //for testing purposes
   'u=0*ones(4,1)';
   'u(1) =  0.25*(10*log(2)-3)*(1-x) + 0.5 *( 1/x   + (3+x)*log(x) - x)'
   'u(2) = -0.25*(10*log(2)-3)       + 0.5 *(-1/x^2 + (3+x)/x      + log(x) - 1)'
   'u(3) = 0.5*( 2/x^3 + 1/x   - 3/x^2)'
   'u(4) = 0.5*(-6/x^4 - 1/x/x + 6/x^3)'])
fixpnt=0;m=4;
ncomp=1;aleft=1;aright=2;
zeta=[1,1,2,2];
ipar=zeros(1,11);
ipar(3)=1;ipar(4)=2;ipar(5)=2000;ipar(6)=200;ipar(7)=1;
ltol=[1,3];tol=[1.e-11,1.e-11];
res=aleft:0.1:aright;
z=bvode(res,ncomp,m,aleft,aright,zeta,ipar,ltol,tol,fixpnt,...
 fsub,dfsub,gsub,dgsub,guess)
z1=[];for x=res,z1=[z1,trusol(x)]; end;  
z-z1
 
  See also
fort, link, external, ode, dasslAuthor
u. ascher, department of computer science, university of british; columbia, vancouver, b. c., canada   v6t 1w5; g. bader, institut f. angewandte mathematik university of heidelberg; im neuenheimer feld 294d-6900 heidelberg 1 ; ; Fortran subroutine colnew.f