Mercurial > hg > octave-nkf
annotate scripts/polynomial/polyaffine.m @ 15063:36cbcc37fdb8
Refactor configure.ac to make it more understandable.
Use common syntax for messages in config.h
Correct typos, refer to libraries in all caps, use two spaces after period.
Follow Autoconf guidelines and place general tests before specific tests.
* configure.ac, m4/acinclude.m4: Use common syntax for messages in config.h
Correct typos, refer to libraries in all caps, use two spaces after period.
Follow Autoconf guidelines and place general tests before specific tests.
author | Rik <rik@octave.org> |
---|---|
date | Tue, 31 Jul 2012 10:28:51 -0700 |
parents | 5d3a684236b0 |
children | d63878346099 |
rev | line source |
---|---|
14138
72c96de7a403
maint: update copyright notices for 2012
John W. Eaton <jwe@octave.org>
parents:
14104
diff
changeset
|
1 ## Copyright (C) 2009-2012 Tony Richardson, Jaroslav Hajek |
9114
79e90381b402
merge polytrans & polyscale -> polyaffine, make compatible with polyval
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
2 ## |
11104 | 3 ## This file is part of Octave. |
9114
79e90381b402
merge polytrans & polyscale -> polyaffine, make compatible with polyval
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
4 ## |
11104 | 5 ## Octave is free software; you can redistribute it and/or modify it |
6 ## under the terms of the GNU General Public License as published by | |
7 ## the Free Software Foundation; either version 3 of the License, or (at | |
8 ## your option) any later version. | |
9 ## | |
10 ## Octave is distributed in the hope that it will be useful, but | |
11 ## WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
13 ## General Public License for more details. | |
9114
79e90381b402
merge polytrans & polyscale -> polyaffine, make compatible with polyval
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
14 ## |
79e90381b402
merge polytrans & polyscale -> polyaffine, make compatible with polyval
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
15 ## You should have received a copy of the GNU General Public License |
11104 | 16 ## along with Octave; see the file COPYING. If not, see |
17 ## <http://www.gnu.org/licenses/>. | |
9114
79e90381b402
merge polytrans & polyscale -> polyaffine, make compatible with polyval
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
18 |
79e90381b402
merge polytrans & polyscale -> polyaffine, make compatible with polyval
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
19 ## -*- texinfo -*- |
79e90381b402
merge polytrans & polyscale -> polyaffine, make compatible with polyval
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
20 ## @deftypefn {Function File} {} polyaffine (@var{f}, @var{mu}) |
11538
6eded7561d9d
Add undocumented polyaffine function to documentation.
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
21 ## Return the coefficients of the polynomial vector @var{f} after an affine |
11575
d6619410e79c
Spellcheck documentation before 3.4 release.
Rik <octave@nomad.inbox5.com>
parents:
11538
diff
changeset
|
22 ## transformation. If @var{f} is the vector representing the polynomial f(x), |
11538
6eded7561d9d
Add undocumented polyaffine function to documentation.
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
23 ## then @code{@var{g} = polyaffine (@var{f}, @var{mu})} is the vector |
6eded7561d9d
Add undocumented polyaffine function to documentation.
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
24 ## representing: |
10821
693e22af08ae
Grammarcheck documentation of m-files
Rik <octave@nomad.inbox5.com>
parents:
9758
diff
changeset
|
25 ## |
9116
a8be2f7c81ee
improve docs for polyaffine, fix bugs
Jaroslav Hajek <highegg@gmail.com>
parents:
9114
diff
changeset
|
26 ## @example |
14327
4d917a6a858b
doc: Use Octave coding conventions in @example blocks of docstrings.
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
27 ## g(x) = f( (x - @var{mu}(1)) / @var{mu}(2) ) |
9116
a8be2f7c81ee
improve docs for polyaffine, fix bugs
Jaroslav Hajek <highegg@gmail.com>
parents:
9114
diff
changeset
|
28 ## @end example |
11587
c792872f8942
all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents:
11575
diff
changeset
|
29 ## |
14104
614505385171
doc: Overhaul docstrings for polynomial functions.
Rik <octave@nomad.inbox5.com>
parents:
11588
diff
changeset
|
30 ## @seealso{polyval, polyfit} |
9114
79e90381b402
merge polytrans & polyscale -> polyaffine, make compatible with polyval
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
31 ## @end deftypefn |
79e90381b402
merge polytrans & polyscale -> polyaffine, make compatible with polyval
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
32 |
79e90381b402
merge polytrans & polyscale -> polyaffine, make compatible with polyval
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
33 function g = polyaffine (f, mu) |
79e90381b402
merge polytrans & polyscale -> polyaffine, make compatible with polyval
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
34 |
79e90381b402
merge polytrans & polyscale -> polyaffine, make compatible with polyval
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
35 if (nargin != 2) |
79e90381b402
merge polytrans & polyscale -> polyaffine, make compatible with polyval
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
36 print_usage (); |
79e90381b402
merge polytrans & polyscale -> polyaffine, make compatible with polyval
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
37 endif |
79e90381b402
merge polytrans & polyscale -> polyaffine, make compatible with polyval
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
38 |
79e90381b402
merge polytrans & polyscale -> polyaffine, make compatible with polyval
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
39 if (! isvector (f)) |
11588
d5bd2766c640
style fixes for warning and error messages in script files
John W. Eaton <jwe@octave.org>
parents:
11587
diff
changeset
|
40 error ("polyaffine: F must be a vector"); |
9114
79e90381b402
merge polytrans & polyscale -> polyaffine, make compatible with polyval
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
41 endif |
79e90381b402
merge polytrans & polyscale -> polyaffine, make compatible with polyval
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
42 |
79e90381b402
merge polytrans & polyscale -> polyaffine, make compatible with polyval
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
43 if (! isvector (mu) || length (mu) != 2) |
11588
d5bd2766c640
style fixes for warning and error messages in script files
John W. Eaton <jwe@octave.org>
parents:
11587
diff
changeset
|
44 error ("polyaffine: MU must be a two-element vector"); |
9114
79e90381b402
merge polytrans & polyscale -> polyaffine, make compatible with polyval
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
45 endif |
79e90381b402
merge polytrans & polyscale -> polyaffine, make compatible with polyval
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
46 |
79e90381b402
merge polytrans & polyscale -> polyaffine, make compatible with polyval
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
47 lf = length (f); |
79e90381b402
merge polytrans & polyscale -> polyaffine, make compatible with polyval
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
48 |
79e90381b402
merge polytrans & polyscale -> polyaffine, make compatible with polyval
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
49 ## Ensure that f is a row vector |
79e90381b402
merge polytrans & polyscale -> polyaffine, make compatible with polyval
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
50 if (rows (f) > 1) |
79e90381b402
merge polytrans & polyscale -> polyaffine, make compatible with polyval
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
51 f = f.'; |
79e90381b402
merge polytrans & polyscale -> polyaffine, make compatible with polyval
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
52 endif |
79e90381b402
merge polytrans & polyscale -> polyaffine, make compatible with polyval
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
53 |
9116
a8be2f7c81ee
improve docs for polyaffine, fix bugs
Jaroslav Hajek <highegg@gmail.com>
parents:
9114
diff
changeset
|
54 g = f; |
9114
79e90381b402
merge polytrans & polyscale -> polyaffine, make compatible with polyval
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
55 |
79e90381b402
merge polytrans & polyscale -> polyaffine, make compatible with polyval
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
56 ## Scale. |
79e90381b402
merge polytrans & polyscale -> polyaffine, make compatible with polyval
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
57 if (mu(2) != 1) |
79e90381b402
merge polytrans & polyscale -> polyaffine, make compatible with polyval
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
58 g = g ./ (mu(2) .^ (lf-1:-1:0)); |
79e90381b402
merge polytrans & polyscale -> polyaffine, make compatible with polyval
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
59 endif |
79e90381b402
merge polytrans & polyscale -> polyaffine, make compatible with polyval
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
60 |
9116
a8be2f7c81ee
improve docs for polyaffine, fix bugs
Jaroslav Hajek <highegg@gmail.com>
parents:
9114
diff
changeset
|
61 ## Translate. |
a8be2f7c81ee
improve docs for polyaffine, fix bugs
Jaroslav Hajek <highegg@gmail.com>
parents:
9114
diff
changeset
|
62 if (mu(1) != 0) |
a8be2f7c81ee
improve docs for polyaffine, fix bugs
Jaroslav Hajek <highegg@gmail.com>
parents:
9114
diff
changeset
|
63 w = (-mu(1)) .^ (0:lf-1); |
a8be2f7c81ee
improve docs for polyaffine, fix bugs
Jaroslav Hajek <highegg@gmail.com>
parents:
9114
diff
changeset
|
64 ii = lf:-1:1; |
a8be2f7c81ee
improve docs for polyaffine, fix bugs
Jaroslav Hajek <highegg@gmail.com>
parents:
9114
diff
changeset
|
65 g = g(ii) * (toeplitz (w) .* pascal (lf, -1)); |
a8be2f7c81ee
improve docs for polyaffine, fix bugs
Jaroslav Hajek <highegg@gmail.com>
parents:
9114
diff
changeset
|
66 g = g(ii); |
a8be2f7c81ee
improve docs for polyaffine, fix bugs
Jaroslav Hajek <highegg@gmail.com>
parents:
9114
diff
changeset
|
67 endif |
a8be2f7c81ee
improve docs for polyaffine, fix bugs
Jaroslav Hajek <highegg@gmail.com>
parents:
9114
diff
changeset
|
68 |
9114
79e90381b402
merge polytrans & polyscale -> polyaffine, make compatible with polyval
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
69 endfunction |
9116
a8be2f7c81ee
improve docs for polyaffine, fix bugs
Jaroslav Hajek <highegg@gmail.com>
parents:
9114
diff
changeset
|
70 |
11538
6eded7561d9d
Add undocumented polyaffine function to documentation.
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
71 |
14104
614505385171
doc: Overhaul docstrings for polynomial functions.
Rik <octave@nomad.inbox5.com>
parents:
11588
diff
changeset
|
72 %!demo |
614505385171
doc: Overhaul docstrings for polynomial functions.
Rik <octave@nomad.inbox5.com>
parents:
11588
diff
changeset
|
73 %! f = [1/5 4/5 -7/5 -2]; |
614505385171
doc: Overhaul docstrings for polynomial functions.
Rik <octave@nomad.inbox5.com>
parents:
11588
diff
changeset
|
74 %! g = polyaffine (f, [1, 1.2]); |
14237
11949c9795a0
Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
75 %! x = linspace (-4,4,100); |
14868
5d3a684236b0
maint: Use Octave coding conventions for cuddling parentheses in scripts directory
Rik <octave@nomad.inbox5.com>
parents:
14363
diff
changeset
|
76 %! plot (x,polyval (f, x), x,polyval (g, x)); |
14104
614505385171
doc: Overhaul docstrings for polynomial functions.
Rik <octave@nomad.inbox5.com>
parents:
11588
diff
changeset
|
77 %! legend ("original", "affine"); |
614505385171
doc: Overhaul docstrings for polynomial functions.
Rik <octave@nomad.inbox5.com>
parents:
11588
diff
changeset
|
78 %! axis ([-4 4 -3 5]); |
14237
11949c9795a0
Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
79 %! grid on; |
14104
614505385171
doc: Overhaul docstrings for polynomial functions.
Rik <octave@nomad.inbox5.com>
parents:
11588
diff
changeset
|
80 |
9116
a8be2f7c81ee
improve docs for polyaffine, fix bugs
Jaroslav Hajek <highegg@gmail.com>
parents:
9114
diff
changeset
|
81 %!test |
a8be2f7c81ee
improve docs for polyaffine, fix bugs
Jaroslav Hajek <highegg@gmail.com>
parents:
9114
diff
changeset
|
82 %! f = [1/5 4/5 -7/5 -2]; |
a8be2f7c81ee
improve docs for polyaffine, fix bugs
Jaroslav Hajek <highegg@gmail.com>
parents:
9114
diff
changeset
|
83 %! mu = [1, 1.2]; |
a8be2f7c81ee
improve docs for polyaffine, fix bugs
Jaroslav Hajek <highegg@gmail.com>
parents:
9114
diff
changeset
|
84 %! g = polyaffine (f, mu); |
14237
11949c9795a0
Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
85 %! x = linspace (-4,4,100); |
14104
614505385171
doc: Overhaul docstrings for polynomial functions.
Rik <octave@nomad.inbox5.com>
parents:
11588
diff
changeset
|
86 %! assert (polyval (f, x, [], mu), polyval (g, x), 1e-10); |
11538
6eded7561d9d
Add undocumented polyaffine function to documentation.
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
87 |