annotate doc/interpreter/splineimages.m @ 19717:606b05352351

Backout cset 59ad278cfb98, use gnuplot for building doc images. Until OpenGL supports TeX we need to keep using gnuplot.
author Rik <rik@octave.org>
date Sun, 15 Feb 2015 07:13:09 -0800
parents 1170c849952b
children c3c1fb44f9b5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
19697
4197fc428c7d maint: Update copyright notices for 2015.
John W. Eaton <jwe@octave.org>
parents: 19593
diff changeset
1 ## Copyright (C) 2012-2015 Ben Abbott, Jonas Lundgren
14509
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
2 ##
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
3 ## This file is part of Octave.
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
4 ##
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
5 ## Octave is free software; you can redistribute it and/or modify it
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
6 ## under the terms of the GNU General Public License as published by
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
7 ## the Free Software Foundation; either version 3 of the License, or (at
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
8 ## your option) any later version.
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
9 ##
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
10 ## Octave is distributed in the hope that it will be useful, but
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
11 ## WITHOUT ANY WARRANTY; without even the implied warranty of
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
13 ## General Public License for more details.
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
14 ##
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
15 ## You should have received a copy of the GNU General Public License
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
16 ## along with Octave; see the file COPYING. If not, see
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
17 ## <http://www.gnu.org/licenses/>.
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
18
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
19 function splineimages (nm, typ)
19717
606b05352351 Backout cset 59ad278cfb98, use gnuplot for building doc images.
Rik <rik@octave.org>
parents: 19708
diff changeset
20 graphics_toolkit ("gnuplot");
14509
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
21 set_print_size ();
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
22 hide_output ();
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
23 if (strcmp (typ, "png"))
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
24 set (0, "defaulttextfontname", "*");
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
25 endif
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
26 if (strcmp (typ, "eps"))
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
27 d_typ = "-depsc2";
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
28 else
16994
333243133364 Use matrix concatenation for strings, rather than cstrcat(), for clarity and performance.
Rik <rik@octave.org>
parents: 14526
diff changeset
29 d_typ = ["-d" typ];
14509
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
30 endif
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
31
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
32 if (strcmp (typ, "txt"))
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
33 image_as_txt (nm);
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
34 elseif (strcmp (nm, "splinefit1")) ## Breaks and Pieces
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
35 x = 2 * pi * rand (1, 200);
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
36 y = sin (x) + sin (2 * x) + 0.2 * randn (size (x));
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
37 ## Uniform breaks
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
38 breaks = linspace (0, 2 * pi, 41); ## 41 breaks, 40 pieces
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
39 pp1 = splinefit (x, y, breaks);
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
40 ## Breaks interpolated from data
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
41 pp2 = splinefit (x, y, 10); ## 11 breaks, 10 pieces
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
42 ## Plot
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
43 xx = linspace (0, 2 * pi, 400);
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
44 y1 = ppval (pp1, xx);
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
45 y2 = ppval (pp2, xx);
17504
8b692d9ea54e Use Octave coding conventions for m-files which generate images for manual.
Rik <rik@octave.org>
parents: 16994
diff changeset
46 plot (x, y, ".", xx, [y1; y2]);
8b692d9ea54e Use Octave coding conventions for m-files which generate images for manual.
Rik <rik@octave.org>
parents: 16994
diff changeset
47 axis tight;
8b692d9ea54e Use Octave coding conventions for m-files which generate images for manual.
Rik <rik@octave.org>
parents: 16994
diff changeset
48 ylim ([-2.5 2.5]);
8b692d9ea54e Use Octave coding conventions for m-files which generate images for manual.
Rik <rik@octave.org>
parents: 16994
diff changeset
49 legend ("data", "41 breaks, 40 pieces", "11 breaks, 10 pieces");
16994
333243133364 Use matrix concatenation for strings, rather than cstrcat(), for clarity and performance.
Rik <rik@octave.org>
parents: 14526
diff changeset
50 print ([nm "." typ], d_typ);
14509
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
51 elseif (strcmp (nm, "splinefit2")) ## Spline orders
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
52 ## Data (200 points)
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
53 x = 2 * pi * rand (1, 200);
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
54 y = sin (x) + sin (2 * x) + 0.1 * randn (size (x));
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
55 ## Splines
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
56 pp1 = splinefit (x, y, 8, "order", 0); ## Piecewise constant
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
57 pp2 = splinefit (x, y, 8, "order", 1); ## Piecewise linear
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
58 pp3 = splinefit (x, y, 8, "order", 2); ## Piecewise quadratic
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
59 pp4 = splinefit (x, y, 8, "order", 3); ## Piecewise cubic
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
60 pp5 = splinefit (x, y, 8, "order", 4); ## Etc.
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
61 ## Plot
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
62 xx = linspace (0, 2 * pi, 400);
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
63 y1 = ppval (pp1, xx);
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
64 y2 = ppval (pp2, xx);
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
65 y3 = ppval (pp3, xx);
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
66 y4 = ppval (pp4, xx);
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
67 y5 = ppval (pp5, xx);
17504
8b692d9ea54e Use Octave coding conventions for m-files which generate images for manual.
Rik <rik@octave.org>
parents: 16994
diff changeset
68 plot (x, y, ".", xx, [y1; y2; y3; y4; y5]);
8b692d9ea54e Use Octave coding conventions for m-files which generate images for manual.
Rik <rik@octave.org>
parents: 16994
diff changeset
69 axis tight;
8b692d9ea54e Use Octave coding conventions for m-files which generate images for manual.
Rik <rik@octave.org>
parents: 16994
diff changeset
70 ylim ([-2.5 2.5]);
8b692d9ea54e Use Octave coding conventions for m-files which generate images for manual.
Rik <rik@octave.org>
parents: 16994
diff changeset
71 legend ({"data", "order 0", "order 1", "order 2", "order 3", "order 4"});
16994
333243133364 Use matrix concatenation for strings, rather than cstrcat(), for clarity and performance.
Rik <rik@octave.org>
parents: 14526
diff changeset
72 print ([nm, "." typ], d_typ);
14509
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
73 elseif (strcmp (nm, "splinefit3"))
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
74 ## Data (100 points)
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
75 x = 2 * pi * [0, (rand (1, 98)), 1];
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
76 y = sin (x) - cos (2 * x) + 0.2 * randn (size (x));
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
77 ## No constraints
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
78 pp1 = splinefit (x, y, 10, "order", 5);
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
79 ## Periodic boundaries
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
80 pp2 = splinefit (x, y, 10, "order", 5, "periodic", true);
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
81 ## Plot
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
82 xx = linspace (0, 2 * pi, 400);
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
83 y1 = ppval (pp1, xx);
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
84 y2 = ppval (pp2, xx);
17504
8b692d9ea54e Use Octave coding conventions for m-files which generate images for manual.
Rik <rik@octave.org>
parents: 16994
diff changeset
85 plot (x, y, ".", xx, [y1; y2]);
8b692d9ea54e Use Octave coding conventions for m-files which generate images for manual.
Rik <rik@octave.org>
parents: 16994
diff changeset
86 axis tight;
8b692d9ea54e Use Octave coding conventions for m-files which generate images for manual.
Rik <rik@octave.org>
parents: 16994
diff changeset
87 ylim ([-2 3]);
8b692d9ea54e Use Octave coding conventions for m-files which generate images for manual.
Rik <rik@octave.org>
parents: 16994
diff changeset
88 legend ({"data", "no constraints", "periodic"});
16994
333243133364 Use matrix concatenation for strings, rather than cstrcat(), for clarity and performance.
Rik <rik@octave.org>
parents: 14526
diff changeset
89 print ([nm "." typ], d_typ);
14509
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
90 elseif (strcmp (nm, "splinefit4"))
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
91 ## Data (200 points)
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
92 x = 2 * pi * rand (1, 200);
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
93 y = sin (2 * x) + 0.1 * randn (size (x));
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
94 ## Breaks
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
95 breaks = linspace (0, 2 * pi, 10);
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
96 ## Clamped endpoints, y = y" = 0
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
97 xc = [0, 0, 2*pi, 2*pi];
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
98 cc = [(eye (2)), (eye (2))];
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
99 con = struct ("xc", xc, "cc", cc);
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
100 pp1 = splinefit (x, y, breaks, "constraints", con);
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
101 ## Hinged periodic endpoints, y = 0
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
102 con = struct ("xc", 0);
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
103 pp2 = splinefit (x, y, breaks, "constraints", con, "periodic", true);
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
104 ## Plot
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
105 xx = linspace (0, 2 * pi, 400);
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
106 y1 = ppval (pp1, xx);
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
107 y2 = ppval (pp2, xx);
17504
8b692d9ea54e Use Octave coding conventions for m-files which generate images for manual.
Rik <rik@octave.org>
parents: 16994
diff changeset
108 plot (x, y, ".", xx, [y1; y2]);
8b692d9ea54e Use Octave coding conventions for m-files which generate images for manual.
Rik <rik@octave.org>
parents: 16994
diff changeset
109 axis tight;
8b692d9ea54e Use Octave coding conventions for m-files which generate images for manual.
Rik <rik@octave.org>
parents: 16994
diff changeset
110 ylim ([-1.5 1.5]);
8b692d9ea54e Use Octave coding conventions for m-files which generate images for manual.
Rik <rik@octave.org>
parents: 16994
diff changeset
111 legend({"data", "clamped", "hinged periodic"});
16994
333243133364 Use matrix concatenation for strings, rather than cstrcat(), for clarity and performance.
Rik <rik@octave.org>
parents: 14526
diff changeset
112 print ([nm "." typ], d_typ);
14509
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
113 elseif (strcmp (nm, "splinefit5"))
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
114 ## Truncated data
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
115 x = [0, 1, 2, 4, 8, 16, 24, 40, 56, 72, 80] / 80;
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
116 y = [0, 28, 39, 53, 70, 86, 90, 79, 55, 22, 2] / 1000;
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
117 xy = [x; y];
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
118 ## Curve length parameter
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
119 ds = sqrt (diff (x).^2 + diff (y).^2);
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
120 s = [0, cumsum(ds)];
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
121 ## Constraints at s = 0: (x,y) = (0,0), (dx/ds,dy/ds) = (0,1)
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
122 con = struct ("xc", [0 0], "yc", [0 0; 0 1], "cc", eye (2));
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
123 ## Fit a spline with 4 pieces
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
124 pp = splinefit (s, xy, 4, "constraints", con);
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
125 ## Plot
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
126 ss = linspace (0, s(end), 400);
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
127 xyfit = ppval (pp, ss);
17504
8b692d9ea54e Use Octave coding conventions for m-files which generate images for manual.
Rik <rik@octave.org>
parents: 16994
diff changeset
128 xyb = ppval (pp, pp.breaks);
8b692d9ea54e Use Octave coding conventions for m-files which generate images for manual.
Rik <rik@octave.org>
parents: 16994
diff changeset
129 plot (x, y, ".", xyfit(1,:), xyfit(2,:), "r", xyb(1,:), xyb(2,:), "ro");
8b692d9ea54e Use Octave coding conventions for m-files which generate images for manual.
Rik <rik@octave.org>
parents: 16994
diff changeset
130 legend ({"data", "spline", "breaks"});
8b692d9ea54e Use Octave coding conventions for m-files which generate images for manual.
Rik <rik@octave.org>
parents: 16994
diff changeset
131 axis tight;
8b692d9ea54e Use Octave coding conventions for m-files which generate images for manual.
Rik <rik@octave.org>
parents: 16994
diff changeset
132 ylim ([0 0.1]);
16994
333243133364 Use matrix concatenation for strings, rather than cstrcat(), for clarity and performance.
Rik <rik@octave.org>
parents: 14526
diff changeset
133 print ([nm "." typ], d_typ);
14509
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
134 elseif (strcmp (nm, "splinefit6"))
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
135 ## Data
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
136 x = linspace (0, 2*pi, 200);
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
137 y = sin (x) + sin (2 * x) + 0.05 * randn (size (x));
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
138 ## Add outliers
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
139 x = [x, linspace(0,2*pi,60)];
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
140 y = [y, -ones(1,60)];
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
141 ## Fit splines with hinged conditions
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
142 con = struct ("xc", [0, 2*pi]);
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
143 pp1 = splinefit (x, y, 8, "constraints", con, "beta", 0.25); ## Robust fitting
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
144 pp2 = splinefit (x, y, 8, "constraints", con, "beta", 0.75); ## Robust fitting
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
145 pp3 = splinefit (x, y, 8, "constraints", con); ## No robust fitting
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
146 ## Plot
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
147 xx = linspace (0, 2*pi, 400);
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
148 y1 = ppval (pp1, xx);
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
149 y2 = ppval (pp2, xx);
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
150 y3 = ppval (pp3, xx);
17504
8b692d9ea54e Use Octave coding conventions for m-files which generate images for manual.
Rik <rik@octave.org>
parents: 16994
diff changeset
151 plot (x, y, ".", xx, [y1; y2; y3]);
8b692d9ea54e Use Octave coding conventions for m-files which generate images for manual.
Rik <rik@octave.org>
parents: 16994
diff changeset
152 legend ({"data with outliers","robust, beta = 0.25", ...
8b692d9ea54e Use Octave coding conventions for m-files which generate images for manual.
Rik <rik@octave.org>
parents: 16994
diff changeset
153 "robust, beta = 0.75", "no robust fitting"});
8b692d9ea54e Use Octave coding conventions for m-files which generate images for manual.
Rik <rik@octave.org>
parents: 16994
diff changeset
154 axis tight;
8b692d9ea54e Use Octave coding conventions for m-files which generate images for manual.
Rik <rik@octave.org>
parents: 16994
diff changeset
155 ylim ([-2 2]);
16994
333243133364 Use matrix concatenation for strings, rather than cstrcat(), for clarity and performance.
Rik <rik@octave.org>
parents: 14526
diff changeset
156 print ([nm "." typ], d_typ);
14509
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
157 endif
19593
446c46af4b42 strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents: 17744
diff changeset
158 hide_output ();
14509
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
159 endfunction
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
160
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
161 function set_print_size ()
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
162 image_size = [5.0, 3.5]; # in inches, 16:9 format
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
163 border = 0; # For postscript use 50/72
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
164 set (0, "defaultfigurepapertype", "<custom>");
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
165 set (0, "defaultfigurepaperorientation", "landscape");
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
166 set (0, "defaultfigurepapersize", image_size + 2*border);
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
167 set (0, "defaultfigurepaperposition", [border, border, image_size]);
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
168 endfunction
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
169
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
170 ## Use this function before plotting commands and after every call to
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
171 ## print since print() resets output to stdout (unfortunately, gnpulot
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
172 ## can't pop output as it can the terminal type).
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
173 function hide_output ()
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
174 f = figure (1);
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
175 set (f, "visible", "off");
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
176 endfunction
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
177
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
178 ## generate something for the texinfo @image command to process
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
179 function image_as_txt(nm)
14526
e12945668746 doc: Stop constant rebuild of spline images in txt format.
Rik <octave@nomad.inbox5.com>
parents: 14509
diff changeset
180 fid = fopen (sprintf ("%s.txt", nm), "wt");
14509
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
181 fputs (fid, "\n");
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
182 fputs (fid, "+---------------------------------+\n");
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
183 fputs (fid, "| Image unavailable in text mode. |\n");
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
184 fputs (fid, "+---------------------------------+\n");
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
185 fclose (fid);
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
186 endfunction
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
187
17504
8b692d9ea54e Use Octave coding conventions for m-files which generate images for manual.
Rik <rik@octave.org>
parents: 16994
diff changeset
188
14509
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
189 %!demo
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
190 %! for s = 1:6
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
191 %! splineimages (sprintf ("splinefit##d", s), "pdf")
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
192 %! endfor
a88f8e4fae56 New Function, splinefit.m
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
193