File: bvode.cat

package info (click to toggle)
scilab 2.6-4
  • links: PTS
  • area: non-free
  • in suites: woody
  • size: 54,632 kB
  • ctags: 40,267
  • sloc: ansic: 267,851; fortran: 166,549; sh: 10,005; makefile: 4,119; tcl: 1,070; cpp: 233; csh: 143; asm: 135; perl: 130; java: 39
file content (300 lines) | stat: -rw-r--r-- 13,549 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
bvode            Scilab Group            Scilab Function              bvode
NAME
   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
            
           ( mstar = m(1) + ... + m(ncomp) <= 40 )
 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)    ( = nonlin )
                      
                     = 0  if the problem is linear
                          
           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(5)  >=  nmax*nsizef
                               where
                                     nsizef = 4 + 3 * mstar + (5+kd) * kdm +
                                             (2*mstar-nrec) * 2*mstar.
           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(6)  >=  nmax*nsizei
                               where
                                     nsizei = 3 + kdm
                               with
                                     kdm = kd + mstar  ;  kd = k * ncomp ;
                                     nrec = number of right end boundary conditions.
           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
                              
                             aleft=x(1)<x(2)< ... <x(n)<x(n+1)=aright
                             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.)
                          
                     = 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
            
           1<=ltol(1)<ltol(2)< ... <ltol(ntol)<=mstar
 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
            
                   abs(z(v)-z(u))       \le tol(j)*abs(z(u))       +tol(j)
                                 ltol(j)                     ltol(j)
           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 
                
                                                 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 .
                
           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
                
                     df(i,j) = dfi / dzj, i=1,...,ncomp
                                          j=1,...,mstar.
           gsub name of subroutine for evaluating the i-th component of
                
                         g(x,z(u(x))) = g (zeta(i),z(u(zeta(i)))) 
                                         i
               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
                
                     dg(i,j) = dgi / dzj,  j=1,...,mstar.
           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
  
        (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     )   is the exact solution vector
                   1   2        ncomp
              (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))   is a (generally) nonlinear function of
               i
                           z(u)=z(u(x)).
              g (zeta(j);z(u))  is a (generally) nonlinear function
               j
                             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.
  
EXAMPLE
 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
 
     
  
AUTHOR
   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   Fotran subroutine colnew.f
  
SEE ALSO
   fort, link, external, ode, dassl