Mercurial > octave
comparison src/corefcn/colloc.cc @ 15039:e753177cde93
maint: Move non-dynamically linked functions from DLD-FUNCTIONS/ to corefcn/ directory
* __contourc__.cc, __dispatch__.cc, __lin_interpn__.cc, __pchip_deriv__.cc,
__qp__.cc, balance.cc, besselj.cc, betainc.cc, bsxfun.cc, cellfun.cc,
colloc.cc, conv2.cc, daspk.cc, dasrt.cc, dassl.cc, det.cc, dlmread.cc, dot.cc,
eig.cc, fft.cc, fft2.cc, fftn.cc, filter.cc, find.cc, gammainc.cc, gcd.cc,
getgrent.cc, getpwent.cc, getrusage.cc, givens.cc, hess.cc, hex2num.cc, inv.cc,
kron.cc, lookup.cc, lsode.cc, lu.cc, luinc.cc, matrix_type.cc, max.cc,
md5sum.cc, mgorth.cc, nproc.cc, pinv.cc, quad.cc, quadcc.cc, qz.cc,
rand.cc, rcond.cc, regexp.cc, schur.cc, spparms.cc, sqrtm.cc, str2double.cc,
strfind.cc, sub2ind.cc, svd.cc, syl.cc, time.cc, tril.cc, typecast.cc:
Move functions from DLD-FUNCTIONS/ to corefcn/ directory. Include "defun.h",
not "defun-dld.h". Change docstring to refer to these as "Built-in Functions".
* build-aux/mk-opts.pl: Generate options code with '#include "defun.h"'. Change
option docstrings to refer to these as "Built-in Functions".
* corefcn/module.mk: List of functions to build in corefcn/ dir.
* DLD-FUNCTIONS/config-module.awk: Update to new build system.
* DLD-FUNCTIONS/module-files: Remove functions which are now in corefcn/ directory.
* src/Makefile.am: Update to build "convenience library" in corefcn/. Octave
program now links against all other libraries + corefcn libary.
* src/find-defun-files.sh: Strip $srcdir from filename.
* src/link-deps.mk: Add REGEX and FFTW link dependencies for liboctinterp.
* type.m, which.m: Change failing tests to use 'amd', still a dynamic function,
rather than 'dot', which isn't.
author | Rik <rik@octave.org> |
---|---|
date | Fri, 27 Jul 2012 15:35:00 -0700 |
parents | src/DLD-FUNCTIONS/colloc.cc@72c96de7a403 |
children |
comparison
equal
deleted
inserted
replaced
15038:ab18578c2ade | 15039:e753177cde93 |
---|---|
1 /* | |
2 | |
3 Copyright (C) 1996-2012 John W. Eaton | |
4 | |
5 This file is part of Octave. | |
6 | |
7 Octave is free software; you can redistribute it and/or modify it | |
8 under the terms of the GNU General Public License as published by the | |
9 Free Software Foundation; either version 3 of the License, or (at your | |
10 option) any later version. | |
11 | |
12 Octave is distributed in the hope that it will be useful, but WITHOUT | |
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
15 for more details. | |
16 | |
17 You should have received a copy of the GNU General Public License | |
18 along with Octave; see the file COPYING. If not, see | |
19 <http://www.gnu.org/licenses/>. | |
20 | |
21 */ | |
22 | |
23 #ifdef HAVE_CONFIG_H | |
24 #include <config.h> | |
25 #endif | |
26 | |
27 #include <string> | |
28 | |
29 #include "CollocWt.h" | |
30 #include "lo-mappers.h" | |
31 | |
32 #include "defun.h" | |
33 #include "error.h" | |
34 #include "oct-obj.h" | |
35 #include "utils.h" | |
36 | |
37 DEFUN (colloc, args, , | |
38 "-*- texinfo -*-\n\ | |
39 @deftypefn {Built-in Function} {[@var{r}, @var{amat}, @var{bmat}, @var{q}] =} colloc (@var{n}, \"left\", \"right\")\n\ | |
40 Compute derivative and integral weight matrices for orthogonal\n\ | |
41 collocation using the subroutines given in J. Villadsen and\n\ | |
42 M. L. Michelsen, @cite{Solution of Differential Equation Models by\n\ | |
43 Polynomial Approximation}.\n\ | |
44 @end deftypefn") | |
45 { | |
46 octave_value_list retval; | |
47 | |
48 int nargin = args.length (); | |
49 | |
50 if (nargin < 1 || nargin > 3) | |
51 { | |
52 print_usage (); | |
53 return retval; | |
54 } | |
55 | |
56 if (! args(0).is_scalar_type ()) | |
57 { | |
58 error ("colloc: N must be a scalar"); | |
59 return retval; | |
60 } | |
61 | |
62 double tmp = args(0).double_value (); | |
63 | |
64 if (error_state) | |
65 return retval; | |
66 | |
67 if (xisnan (tmp)) | |
68 { | |
69 error ("colloc: N cannot be NaN"); | |
70 return retval; | |
71 } | |
72 | |
73 octave_idx_type ncol = NINTbig (tmp); | |
74 if (ncol < 0) | |
75 { | |
76 error ("colloc: N must be positive"); | |
77 return retval; | |
78 } | |
79 | |
80 octave_idx_type ntot = ncol; | |
81 octave_idx_type left = 0; | |
82 octave_idx_type right = 0; | |
83 | |
84 for (int i = 1; i < nargin; i++) | |
85 { | |
86 if (args(i).is_defined ()) | |
87 { | |
88 if (! args(i).is_string ()) | |
89 { | |
90 error ("colloc: expecting string argument \"left\" or \"right\""); | |
91 return retval; | |
92 } | |
93 | |
94 std::string s = args(i).string_value (); | |
95 | |
96 if ((s.length () == 1 && (s[0] == 'R' || s[0] == 'r')) | |
97 || s == "right") | |
98 { | |
99 right = 1; | |
100 } | |
101 else if ((s.length () == 1 && (s[0] == 'L' || s[0] == 'l')) | |
102 || s == "left") | |
103 { | |
104 left = 1; | |
105 } | |
106 else | |
107 { | |
108 error ("colloc: unrecognized argument"); | |
109 return retval; | |
110 } | |
111 } | |
112 else | |
113 { | |
114 error ("colloc: unexpected empty argument"); | |
115 return retval; | |
116 } | |
117 } | |
118 | |
119 ntot += left + right; | |
120 if (ntot < 1) | |
121 { | |
122 error ("colloc: the total number of roots must be positive"); | |
123 return retval; | |
124 } | |
125 | |
126 CollocWt wts (ncol, left, right); | |
127 | |
128 ColumnVector r = wts.roots (); | |
129 Matrix A = wts.first (); | |
130 Matrix B = wts.second (); | |
131 ColumnVector q = wts.quad_weights (); | |
132 | |
133 retval(3) = q; | |
134 retval(2) = B; | |
135 retval(1) = A; | |
136 retval(0) = r; | |
137 | |
138 return retval; | |
139 } |