annotate scripts/plot/__ezplot__.m @ 8046:c4482fc30c7f

Add the ezplot function
author David Bateman <dbateman@free.fr>
date Thu, 21 Aug 2008 11:29:06 -0400
parents 3422f39573b1
children 7d48766c21a5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7337
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
1 ## Copyright (C) 2007 David Bateman
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
2 ##
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
3 ## This file is part of Octave.
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
4 ##
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
5 ## Octave is free software; you can redistribute it and/or modify it
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
6 ## under the terms of the GNU General Public License as published by
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
7 ## the Free Software Foundation; either version 3 of the License, or (at
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
8 ## your option) any later version.
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
9 ##
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
10 ## Octave is distributed in the hope that it will be useful, but
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
11 ## WITHOUT ANY WARRANTY; without even the implied warranty of
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
13 ## General Public License for more details.
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
14 ##
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
15 ## You should have received a copy of the GNU General Public License
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
16 ## along with Octave; see the file COPYING. If not, see
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
17 ## <http://www.gnu.org/licenses/>.
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
18
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
19 ## Undocumented internal function
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
20
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
21 function [h, needusage] = __ezplot__ (pfunc, varargin)
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
22
7540
3422f39573b1 strcat.m: Matlab compatibility, with cstrcat.m replacing conventional strcat.m.
Ben Abbott <bpabbott@mac.com>
parents: 7337
diff changeset
23 func = cstrcat ("ez", pfunc);
7337
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
24 if (strncmp (pfunc, "contour", 7))
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
25 iscontour = true;
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
26 else
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
27 iscontour = false;
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
28 endif
8046
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
29 if (strcmp (pfunc, "plot"))
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
30 isplot = true;
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
31 isplot3 = false;
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
32 ispolar = false;
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
33 nargs = 1;
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
34 elseif (strcmp (pfunc, "plot3"))
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
35 isplot = false;
7337
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
36 isplot3 = true;
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
37 ispolar = false;
8046
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
38 nargs = 1;
7337
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
39 elseif (strcmp (pfunc, "polar"))
8046
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
40 isplot = false;
7337
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
41 isplot3 = false;
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
42 ispolar = true;
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
43 nargs = 1;
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
44 else
8046
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
45 isplot = false;
7337
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
46 isplot3 = false;
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
47 ispolar = false;
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
48 nargs = 2;
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
49 endif
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
50
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
51 [ax, varargin, nargin] = __plt_get_axis_arg__ (func, varargin{:});
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
52
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
53 needusage = false;
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
54 if (nargin < 1)
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
55 needusage = true;
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
56 return;
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
57 endif
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
58
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
59 parametric = false;
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
60 fun = varargin {1};
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
61 if (ischar (fun))
8046
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
62 if (exist (fun, "file") || exist (fun, "builtin"))
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
63 fun = vectorize (inline (cstrcat (fun, "(t)")));
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
64 else
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
65 fun = vectorize (inline (fun));
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
66 endif
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
67 if (isplot && length (argnames (fun)) == 2)
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
68 nargs = 2;
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
69 elseif (length (argnames (fun)) != nargs)
7337
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
70 error ("%s: excepting a function of %d arguments", func, nargs);
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
71 endif
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
72 fstr = formula (fun);
8046
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
73 if (isplot)
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
74 xarg = argnames(fun){1};
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
75 if (nargs == 2)
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
76 yarg = argnames(fun){2};
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
77 else
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
78 yarg = "";
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
79 endif
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
80 elseif (isplot3)
7337
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
81 xarg = "x";
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
82 yarg = "y";
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
83 elseif (ispolar)
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
84 xarg = "";
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
85 yarg = "";
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
86 else
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
87 xarg = argnames(fun){1};
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
88 yarg = argnames(fun){2};
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
89 endif
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
90 elseif (strcmp (typeinfo (fun), "inline function"))
8046
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
91 if (isplot && length (argnames (fun)) == 2)
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
92 nargs = 2;
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
93 elseif (length (argnames (fun)) != nargs)
7337
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
94 error ("%s: excepting a function of %d arguments", func, nargs);
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
95 endif
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
96 fun = vectorize (fun);
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
97 fstr = formula (fun);
8046
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
98 if (isplot)
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
99 xarg = argnames(fun){1};
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
100 if (nargs == 2)
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
101 yarg = argnames(fun){2};
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
102 else
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
103 yarg = "";
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
104 endif
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
105 elseif (isplot3)
7337
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
106 xarg = "x";
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
107 yarg = "y";
8046
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
108 elseif (isplot || ispolar)
7337
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
109 xarg = "";
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
110 yarg = "";
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
111 else
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
112 xarg = argnames(fun)(1);
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
113 yarg = argnames(fun)(2);
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
114 endif
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
115 elseif (isa (fun, "function_handle"))
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
116 fstr = func2str (fun);
8046
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
117 if (length (findstr (fstr, ")")) != 0)
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
118 args = regexp (substr (fstr, 3, findstr (fstr, ")")(1) - 3),
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
119 '(\w[\w\d]*)', 'tokens');
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
120 fstr = substr (fstr, findstr (fstr, ")")(1) + 1);
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
121 else
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
122 args = {{"x"}};
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
123 endif
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
124 if (isplot && length (args) == 2)
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
125 nargs = 2;
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
126 elseif (length (args) != nargs)
7337
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
127 error ("%s: excepting a function of %d arguments", func, nargs);
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
128 endif
8046
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
129 if (isplot)
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
130 xarg = args{1}{1};
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
131 if (nargs == 2)
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
132 yarg = args{2}{1};
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
133 else
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
134 yarg = "";
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
135 endif
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
136 elseif (isplot3)
7337
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
137 xarg = "x";
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
138 yarg = "y";
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
139 elseif (ispolar)
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
140 xarg = "";
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
141 yarg = "";
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
142 else
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
143 xarg = args{1}{1};
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
144 yarg = args{2}{1};
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
145 endif
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
146 else
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
147 error ("%s: expecting string, inline function or function handle", func);
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
148 endif
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
149
8046
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
150 if (nargin > 2 || (nargin == 2 && isplot))
7337
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
151 funx = fun;
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
152 fstrx = fstr;
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
153 funy = varargin {2};
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
154 if (ischar (funy) && ! strcmp (funy, "circ") && ! strcmp (funy, "animate"))
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
155 parametric = true;
8046
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
156 if (exist (funy, "file") || exist (funy, "builtin"))
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
157 funy = vectorize (inline (cstrcat (funy, "(t)")));
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
158 else
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
159 funy = vectorize (inline (funy));
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
160 endif
7337
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
161 if (length (argnames (funy)) != nargs)
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
162 error ("%s: excepting a function of %d arguments", func, nargs);
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
163 endif
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
164 fstry = formula (funy);
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
165 elseif (strcmp (typeinfo (funy), "inline function"))
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
166 parametric = true;
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
167 if (length (argnames (funy)) != nargs)
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
168 error ("%s: excepting a function of %d arguments", func, nargs);
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
169 endif
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
170 funy = vectorize (funy);
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
171 fstry = formula (funy);
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
172 elseif (isa (funy, "function_handle"))
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
173 parametric = true;
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
174 fstry = func2str (funy);
8046
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
175 if (length (findstr (fstry, ")")) != 0)
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
176 args = regexp (substr (fstry, 3, findstr (fstry, ")")(1) - 3),
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
177 '(\w[\w\d]*)', 'tokens');
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
178 fstry = substr (fstry, findstr (fstry, ")")(1) + 1);
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
179 else
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
180 args = {{"y"}};
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
181 endif
7337
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
182 if (length (args) != nargs)
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
183 error ("%s: excepting a function of %d arguments", func, nargs);
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
184 endif
8046
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
185 endif
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
186
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
187 if (parametric && isplot)
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
188 xarg = "x";
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
189 yarg = "y";
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
190 if (nargs == 2)
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
191 error ("%s: can not define a parametric function in this manner");
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
192 endif
7337
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
193 endif
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
194
8046
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
195 if (!isplot && parametric)
7337
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
196 funz = varargin {3};
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
197 if (ischar (funz) && ! strcmp (funz, "circ") &&
8046
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
198 ! strcmp (funz, "animate"))
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
199 if (exist (funz, "file") || exist (funz, "builtin"))
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
200 funz = vectorize (inline (cstrcat (funz, "(t)")));
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
201 else
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
202 funz = vectorize (inline (funz));
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
203 endif
7337
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
204 if (length (argnames (funz)) != nargs)
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
205 error ("%s: excepting a function of %d arguments", func, nargs);
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
206 endif
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
207 fstrz = formula (funz);
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
208 elseif (strcmp (typeinfo (funz), "inline function"))
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
209 if (length (argnames (funz)) != nargs)
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
210 error ("%s: excepting a function of %d arguments", func, nargs);
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
211 endif
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
212 funz = vectorize (funz);
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
213 fstrz = formula (funz);
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
214 elseif (isa (funz, "function_handle"))
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
215 fstrz = func2str (funz);
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
216 args = regexp (substr (fstrz, 3, findstr (fstrz, ")")(1) - 3),
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
217 '(\w[\w\d]*)', 'tokens');
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
218 if (length (args) != nargs)
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
219 error ("%s: excepting a function of %d arguments", func, nargs);
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
220 endif
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
221 fstrz = substr (fstrz, findstr (fstrz, ")")(1) + 1);
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
222 else
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
223 error ("%s: parametric plots expect 3 functions", func);
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
224 endif
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
225 endif
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
226 endif
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
227
8046
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
228 if (isplot && nargs != 2)
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
229 n = 500;
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
230 else
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
231 n = 60;
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
232 endif
7337
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
233 domain = [];
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
234 circ = false;
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
235 animate = false;
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
236 if (parametric)
8046
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
237 if (isplot)
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
238 iarg = 3;
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
239 else
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
240 iarg = 4;
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
241 endif
7337
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
242 else
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
243 iarg = 2;
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
244 endif
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
245 while (iarg <= nargin)
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
246 arg = varargin{iarg++};
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
247 if (ischar (arg) && strcmp (arg, "circ"))
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
248 circ = true;
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
249 elseif (ischar (arg) && strcmp (arg, "animate"))
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
250 animate = true;
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
251 elseif (isscalar (arg))
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
252 n = arg;
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
253 elseif (numel (arg) == 2)
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
254 domain = [arg(:).' arg(:).'];
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
255 elseif (numel (arg) == 4)
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
256 domain = arg(:).';
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
257 else
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
258 error ("%s: expecting scalar, 2 or 4 element vector", func);
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
259 endif
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
260 endwhile
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
261
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
262 if (isempty (domain))
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
263 if (isplot3 || ispolar)
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
264 domain = [0, 2*pi, 0, 2*pi];
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
265 else
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
266 domain = [-2*pi, 2*pi, -2*pi, 2*pi];
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
267 endif
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
268 endif
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
269
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
270 if (circ)
8046
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
271 if (iscontour || isplot3 || isplot)
7337
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
272 needusage = true;
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
273 return;
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
274 endif
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
275 if (parametric)
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
276 error ("%s: can not have both circular domain and parametric function",
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
277 func);
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
278 endif
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
279 cent = [domain(1) + domain(2), domain(3) + domain(4)] / 2;
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
280 funx = @(r,t) r .* cos (t) + cent (1);
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
281 funy = @(r,t) r .* sin (t) + cent (2);
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
282 domain = [0, sqrt((domain(2) - cent(1))^2 + (domain(4) - cent(2))^2), ...
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
283 -pi, pi];
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
284 funz = fun;
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
285 parametric = true;
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
286 endif
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
287
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
288 if (animate)
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
289 if (!isplot3)
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
290 error ("%s: animated graphs only valid with plot3", func);
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
291 endif
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
292 error ("%s: animated graphs not implemented", func);
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
293 endif
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
294
8046
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
295 if (isplot3 || ispolar || (isplot && nargs == 1))
7337
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
296 X = linspace (domain (1), domain (2), n);
8046
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
297 elseif (isplot && numel (domain) == 2)
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
298 x = linspace (domain (1), domain (2), n);
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
299 [X, Y] = meshgrid (x, x);
7337
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
300 else
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
301 x = linspace (domain (1), domain (2), n);
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
302 y = linspace (domain (3), domain (4), n);
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
303 [X, Y] = meshgrid (x, y);
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
304 endif
8046
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
305
7337
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
306 if (parametric)
8046
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
307 if (isplot)
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
308 XX = feval (funx, X);
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
309 Z = feval (funy, X);
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
310 X = XX;
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
311 elseif (isplot3)
7337
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
312 Z = feval (funz, X);
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
313 XX = feval (funx, X);
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
314 YY = feval (funy, X);
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
315 X = XX;
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
316 Y = YY;
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
317 else
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
318 Z = feval (funz, X, Y);
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
319 XX = feval (funx, X, Y);
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
320 YY = feval (funy, X, Y);
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
321 X = XX;
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
322 Y = YY;
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
323
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
324 ## Eliminate the singularities
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
325 X = __eliminate_sing__ (X);
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
326 Y = __eliminate_sing__ (Y);
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
327 Z = __eliminate_sing__ (Z);
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
328 endif
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
329
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
330 fstrx = regexprep (regexprep (regexprep (fstrx,'\.\^\s*','^'),
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
331 '\./', '/'), '[\.]*\*', '');
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
332 fstry = regexprep (regexprep (regexprep (fstry,'\.\^\s*','^'),
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
333 '\./', '/'), '[\.]*\*', '');
8046
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
334 if (isplot)
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
335 fstr = cstrcat ("x = ",fstrx,", y = ",fstry);
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
336 else
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
337 fstrz = regexprep (regexprep (regexprep (fstrz,'\.\^\s*','^'),
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
338 '\./', '/'), '[\.]*\*', '');
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
339 fstr = cstrcat ("x = ",fstrx,",y = ",fstry,", z = ",fstrz);
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
340 endif
7337
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
341 else
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
342 if (isplot3)
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
343 needusage = true;
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
344 return;
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
345 endif
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
346
8046
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
347 fstr = regexprep (regexprep (regexprep (fstr,'\.\^\s*','^'), '\./', '/'),
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
348 '[\.]*\*', '');
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
349 if (isplot && nargs == 2)
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
350 if (strcmp (typeinfo (fun), "inline function") &&
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
351 !isempty (strfind (formula (fun) , "=")))
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
352 fun = inline (cstrcat (strrep (formula (fun), "=", "- ("), ")"));
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
353 else
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
354 fstr = cstrcat (fstr, " = 0");
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
355 endif
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
356
7337
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
357 Z = feval (fun, X, Y);
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
358
8046
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
359 ## Matlab returns line objects for this case and so can't call
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
360 ## contour directly as it returns patch objects to allow colormaps
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
361 ## to work with contours. Therefore recreate the lines from the
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
362 ## output for contourc, and store in cell arrays.
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
363 [c, lev] = contourc (X, Y, Z, [0, 0]);
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
364
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
365 i1 = 1;
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
366 XX = {};
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
367 YY = {};
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
368 while (i1 < length (c))
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
369 clev = c(1,i1);
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
370 clen = c(2,i1);
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
371 XX = [XX, {c(1, i1+1:i1+clen)}];
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
372 YY = [YY, {c(2, i1+1:i1+clen)}];
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
373 i1 += clen+1;
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
374 endwhile
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
375 else
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
376 if (ispolar)
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
377 Z = feval (fun, X);
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
378 elseif (isplot)
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
379 Z = real (feval (fun, X));
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
380
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
381 ## Eliminate the singularities. This seems to be what matlab
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
382 ## does, but can't be sure.
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
383 XX = sort (Z (isfinite (Z)));
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
384 if (length (X) > 4)
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
385 d = XX(fix (7 * length (XX) / 8)) - XX(fix (length (XX) / 8));
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
386 yrange = [max(XX(1) - d/8, XX(fix (length (XX) / 8)) - d), ...
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
387 min(XX(end) + d/8, XX(fix (7 * length (XX) / 8)) + d)];
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
388 else
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
389 yrange = [XX(1), XX(end)];
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
390 endif
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
391
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
392 idx = 2 : length(Z);
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
393 idx = find (((Z(idx) > yrange(2) / 2) & (Z(idx-1) < yrange(1) / 2)) |
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
394 ((Z(idx) < yrange(1) / 2) & (Z(idx-1) > yrange (2) / 2)));
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
395 if (any(idx))
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
396 Z(idx) = NaN;
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
397 endif
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
398 else
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
399 Z = feval (fun, X, Y);
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
400
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
401 ## Eliminate the singularities
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
402 Z = __eliminate_sing__ (Z);
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
403 endif
7337
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
404 endif
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
405 endif
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
406
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
407 oldax = gca ();
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
408 unwind_protect
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
409 axes (ax);
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
410 if (iscontour)
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
411 [clev, h] = feval (pfunc, X, Y, Z);
8046
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
412 elseif (isplot && nargs == 2)
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
413 h = [];
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
414 hold_state = get (ax, "nextplot");
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
415 for i = 1 : length (XX)
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
416 h = [h; plot(XX{i}, YY{i})];
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
417 if (i == 1)
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
418 set (ax, "nextplot", "add")
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
419 endif
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
420 endfor
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
421 set (ax, "nextplot", hold_state)
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
422 elseif (ispolar || isplot)
7337
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
423 h = feval (pfunc, X, Z);
8046
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
424 if (isplot && !parametric)
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
425 axis ([X(1), X(end), yrange]);
c4482fc30c7f Add the ezplot function
David Bateman <dbateman@free.fr>
parents: 7540
diff changeset
426 endif
7337
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
427 else
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
428 h = feval (pfunc, X, Y, Z);
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
429 endif
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
430 xlabel (xarg);
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
431 ylabel (yarg);
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
432 title (fstr);
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
433 unwind_protect_cleanup
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
434 axes (oldax);
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
435 end_unwind_protect
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
436
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
437 endfunction
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
438
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
439 function x = __eliminate_sing__ (x)
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
440 x (isinf (x)) = NaN;
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
441 x (abs (del2 (x)) > 0.2 * (max(x(:)) - min(x(:)))) = NaN;
e70789e0cd92 [project @ 2007-12-28 21:04:44 by jwe]
jwe
parents:
diff changeset
442 endfunction