bvode - boundary value problems for ODE
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.
max m(i) <= k <= 7 .
if ipar(2)=0 then bvode sets
k = max ( max m(i)+1, 5-max m(i) )
0 < ntol <= mstar.
ipar(5)>=nmax*nsizef
where
nsizef=4+3*mstar+(5+kd)*kdm+(2*mstar-nrec)*2*mstar .
ipar(6)>=nmax*nsizei
where
nsizei=3 + kdm with kdm=kd+mstar ; kd=k*ncomp ; nrec =number of right end boundary conditions.
will occupy fspace(1), ..., fspace(n+1) . the user needs to supply only the interior mesh points fspace(j) = x(j), j = 2, ..., n.
1 <= ltol(1) < ltol(2) < ... < ltol(ntol) <= mstar
abs(z(v)-z(u)) <= tol(j)*abs(z(u)) +tol(j)
ltol(j) ltol(j)
if v(x) is the approximate solution vector.
t
f(x,z(u(x))) = (f ,...,f )
1 ncomp
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
t
z(u(x))=(z(1),...,z(mstar))
is defined as above under purpose .
df(i,j) = dfi / dzj, i=1,...,ncomp
j=1,...,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 .
aleft <= x <= aright .
this package solves a multi-point boundary value problem for a mixed order system of ode-s given by
(m(i))
u = f ( x; z(u(x)) ) i = 1, ... ,ncomp
i i aleft < x < aright,
g ( zeta(j); z(u(zeta(j))) ) = 0 j = 1, ... ,mstar
j
mstar = m(1)+m(2)+...+m(ncomp),
where
t
u = (u , u , ... ,u )
1 2 ncomp
is the exact solution vector
(mi)
u is the mi=m(i) th derivative of u
i i
(1) (m1-1) (mncomp-1)
z(u(x)) = ( u (x),u (x),...,u (x),...,u (x) )
1 1 1 ncomp
f (x,z(u))
i
is a (generally) nonlinear function of z(u)=z(u(x)) .
g (zeta(j);z(u))
j
is a (generally) nonlinear function used to represent a boundary condition.
the boundary points satisfy
aleft <= zeta(1) <= .. <= zeta(mstar) <= aright .
the orders mi of the differential equations satisfy
1<=m(i)<=4 .
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
fort , link , external , ode , dassl ,
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