Mercurial > hg > octave-lyh
view doc/interpreter/quad.txi @ 5457:c6dc1ccd83a9
[project @ 2005-09-19 19:23:35 by jwe]
author | jwe |
---|---|
date | Mon, 19 Sep 2005 19:26:00 +0000 |
parents | aae05d51353c |
children | 6ab0a8767780 |
line wrap: on
line source
@c Copyright (C) 1996, 1997 John W. Eaton @c This is part of the Octave manual. @c For copying conditions, see the file gpl.texi. @node Quadrature @chapter Quadrature @menu * Functions of One Variable:: * Orthogonal Collocation:: @end menu @node Functions of One Variable @section Functions of One Variable @DOCSTRING(quad) @DOCSTRING(quad_options) Here is an example of using @code{quad} to integrate the function @iftex @tex $$ f(x) = x \sin (1/x) \sqrt {|1 - x|} $$ from $x = 0$ to $x = 3$. @end tex @end iftex @ifinfo @example @var{f}(@var{x}) = @var{x} * sin (1/@var{x}) * sqrt (abs (1 - @var{x})) @end example @noindent from @var{x} = 0 to @var{x} = 3. @end ifinfo This is a fairly difficult integration (plot the function over the range of integration to see why). The first step is to define the function: @example @group function y = f (x) y = x .* sin (1 ./ x) .* sqrt (abs (1 - x)); endfunction @end group @end example Note the use of the `dot' forms of the operators. This is not necessary for the call to @code{quad}, but it makes it much easier to generate a set of points for plotting (because it makes it possible to call the function with a vector argument to produce a vector result). Then we simply call quad: @example @group [v, ier, nfun, err] = quad ("f", 0, 3) @result{} 1.9819 @result{} 1 @result{} 5061 @result{} 1.1522e-07 @end group @end example Although @code{quad} returns a nonzero value for @var{ier}, the result is reasonably accurate (to see why, examine what happens to the result if you move the lower bound to 0.1, then 0.01, then 0.001, etc.). @node Orthogonal Collocation @section Orthogonal Collocation @DOCSTRING(colloc) Here is an example of using @code{colloc} to generate weight matrices for solving the second order differential equation @iftex @tex $u^\prime - \alpha u^{\prime\prime} = 0$ with the boundary conditions $u(0) = 0$ and $u(1) = 1$. @end tex @end iftex @ifinfo @var{u}' - @var{alpha} * @var{u}'' = 0 with the boundary conditions @var{u}(0) = 0 and @var{u}(1) = 1. @end ifinfo First, we can generate the weight matrices for @var{n} points (including the endpoints of the interval), and incorporate the boundary conditions in the right hand side (for a specific value of @iftex @tex $\alpha$). @end tex @end iftex @ifinfo @var{alpha}). @end ifinfo @example @group n = 7; alpha = 0.1; [r, a, b] = colloc (n-2, "left", "right"); at = a(2:n-1,2:n-1); bt = b(2:n-1,2:n-1); rhs = alpha * b(2:n-1,n) - a(2:n-1,n); @end group @end example Then the solution at the roots @var{r} is @example u = [ 0; (at - alpha * bt) \ rhs; 1] @result{} [ 0.00; 0.004; 0.01 0.00; 0.12; 0.62; 1.00 ] @end example