Mercurial > octave
annotate scripts/plot/draw/fplot.m @ 30564:796f54d4ddbf stable
update Octave Project Developers copyright for the new year
In files that have the "Octave Project Developers" copyright notice,
update for 2021.
In all .txi and .texi files except gpl.txi and gpl.texi in the
doc/liboctave and doc/interpreter directories, change the copyright
to "Octave Project Developers", the same as used for other source
files. Update copyright notices for 2022 (not done since 2019). For
gpl.txi and gpl.texi, change the copyright notice to be "Free Software
Foundation, Inc." and leave the date at 2007 only because this file
only contains the text of the GPL, not anything created by the Octave
Project Developers.
Add Paul Thomas to contributors.in.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Tue, 28 Dec 2021 18:22:40 -0500 |
parents | 7854d5752dd2 |
children | e1788b1a315f |
rev | line source |
---|---|
27923
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
1 ######################################################################## |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
2 ## |
30564
796f54d4ddbf
update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
3 ## Copyright (C) 2005-2022 The Octave Project Developers |
27918
b442ec6dda5c
use centralized file for copyright info for individual contributors
John W. Eaton <jwe@octave.org>
parents:
26617
diff
changeset
|
4 ## |
27923
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
5 ## See the file COPYRIGHT.md in the top-level directory of this |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
6 ## distribution or <https://octave.org/copyright/>. |
5820 | 7 ## |
8 ## This file is part of Octave. | |
9 ## | |
24534
194eb4bd202b
maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents:
24494
diff
changeset
|
10 ## Octave is free software: you can redistribute it and/or modify it |
5820 | 11 ## under the terms of the GNU General Public License as published by |
24534
194eb4bd202b
maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents:
24494
diff
changeset
|
12 ## the Free Software Foundation, either version 3 of the License, or |
22755
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
13 ## (at your option) any later version. |
5820 | 14 ## |
15 ## Octave is distributed in the hope that it will be useful, but | |
16 ## WITHOUT ANY WARRANTY; without even the implied warranty of | |
22755
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
17 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
18 ## GNU General Public License for more details. |
5820 | 19 ## |
20 ## You should have received a copy of the GNU General Public License | |
7016 | 21 ## along with Octave; see the file COPYING. If not, see |
24534
194eb4bd202b
maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents:
24494
diff
changeset
|
22 ## <https://www.gnu.org/licenses/>. |
27923
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
23 ## |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
24 ######################################################################## |
5820 | 25 |
26 ## -*- texinfo -*- | |
26154
af655eb15cdc
fplot.m: Add 1-input calling form, support for specifying PROP/VAL pairs.
Rik <rik@octave.org>
parents:
26150
diff
changeset
|
27 ## @deftypefn {} {} fplot (@var{fn}) |
af655eb15cdc
fplot.m: Add 1-input calling form, support for specifying PROP/VAL pairs.
Rik <rik@octave.org>
parents:
26150
diff
changeset
|
28 ## @deftypefnx {} {} fplot (@var{fn}, @var{limits}) |
20852
516bb87ea72e
2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents:
20715
diff
changeset
|
29 ## @deftypefnx {} {} fplot (@dots{}, @var{tol}) |
516bb87ea72e
2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents:
20715
diff
changeset
|
30 ## @deftypefnx {} {} fplot (@dots{}, @var{n}) |
516bb87ea72e
2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents:
20715
diff
changeset
|
31 ## @deftypefnx {} {} fplot (@dots{}, @var{fmt}) |
26154
af655eb15cdc
fplot.m: Add 1-input calling form, support for specifying PROP/VAL pairs.
Rik <rik@octave.org>
parents:
26150
diff
changeset
|
32 ## @deftypefnx {} {} fplot (@dots{}, @var{property}, @var{value}, @dots{}) |
af655eb15cdc
fplot.m: Add 1-input calling form, support for specifying PROP/VAL pairs.
Rik <rik@octave.org>
parents:
26150
diff
changeset
|
33 ## @deftypefnx {} {} fplot (@var{hax}, @dots{}) |
20852
516bb87ea72e
2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents:
20715
diff
changeset
|
34 ## @deftypefnx {} {[@var{x}, @var{y}] =} fplot (@dots{}) |
16950
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
35 ## Plot a function @var{fn} within the range defined by @var{limits}. |
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
36 ## |
17479 | 37 ## @var{fn} is a function handle, inline function, or string containing the |
38 ## name of the function to evaluate. | |
39 ## | |
40 ## The limits of the plot are of the form @w{@code{[@var{xlo}, @var{xhi}]}} or | |
26154
af655eb15cdc
fplot.m: Add 1-input calling form, support for specifying PROP/VAL pairs.
Rik <rik@octave.org>
parents:
26150
diff
changeset
|
41 ## @w{@code{[@var{xlo}, @var{xhi}, @var{ylo}, @var{yhi}]}}. If no limits |
af655eb15cdc
fplot.m: Add 1-input calling form, support for specifying PROP/VAL pairs.
Rik <rik@octave.org>
parents:
26150
diff
changeset
|
42 ## are specified the default is @code{[-5, 5]}. |
17479 | 43 ## |
16950
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
44 ## The next three arguments are all optional and any number of them may be |
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
45 ## given in any order. |
17479 | 46 ## |
16950
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
47 ## @var{tol} is the relative tolerance to use for the plot and defaults |
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
48 ## to 2e-3 (.2%). |
17479 | 49 ## |
50 ## @var{n} is the minimum number of points to use. When @var{n} is specified, | |
24493
dc6404ab6947
doc: Small tweaks to fplot and surfnorm docstrings (bug #52761).
Rik <rik@octave.org>
parents:
24431
diff
changeset
|
51 ## the maximum stepsize will be @code{(@var{xhi} - @var{xlo}) / @var{n}}. More |
17479 | 52 ## than @var{n} points may still be used in order to meet the relative |
53 ## tolerance requirement. | |
54 ## | |
16950
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
55 ## The @var{fmt} argument specifies the linestyle to be used by the plot |
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
56 ## command. |
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
57 ## |
26154
af655eb15cdc
fplot.m: Add 1-input calling form, support for specifying PROP/VAL pairs.
Rik <rik@octave.org>
parents:
26150
diff
changeset
|
58 ## Multiple property-value pairs may also be specified, but they must appear |
af655eb15cdc
fplot.m: Add 1-input calling form, support for specifying PROP/VAL pairs.
Rik <rik@octave.org>
parents:
26150
diff
changeset
|
59 ## in pairs. These arguments are applied to the line objects drawn by |
af655eb15cdc
fplot.m: Add 1-input calling form, support for specifying PROP/VAL pairs.
Rik <rik@octave.org>
parents:
26150
diff
changeset
|
60 ## @code{plot}. |
af655eb15cdc
fplot.m: Add 1-input calling form, support for specifying PROP/VAL pairs.
Rik <rik@octave.org>
parents:
26150
diff
changeset
|
61 ## |
28733
9342688e86b4
Updated property references for text and graphics functions (bug #50247)
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
28427
diff
changeset
|
62 ## The full list of line properties is documented at |
9342688e86b4
Updated property references for text and graphics functions (bug #50247)
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
28427
diff
changeset
|
63 ## @ref{Line Properties}. |
9342688e86b4
Updated property references for text and graphics functions (bug #50247)
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
28427
diff
changeset
|
64 ## |
24431
0c6cedafc71e
doc: Use 'axes' rather than 'axis' appropriately in docstrings.
Rik <rik@octave.org>
parents:
23219
diff
changeset
|
65 ## If the first argument @var{hax} is an axes handle, then plot into this axes, |
17159
d74e2b5bdeb5
fplot.m: Accept an axis handle as first input.
Rik <rik@octave.org>
parents:
17122
diff
changeset
|
66 ## rather than the current axes returned by @code{gca}. |
d74e2b5bdeb5
fplot.m: Accept an axis handle as first input.
Rik <rik@octave.org>
parents:
17122
diff
changeset
|
67 ## |
26154
af655eb15cdc
fplot.m: Add 1-input calling form, support for specifying PROP/VAL pairs.
Rik <rik@octave.org>
parents:
26150
diff
changeset
|
68 ## With no output arguments, the results are immediately plotted. With two |
af655eb15cdc
fplot.m: Add 1-input calling form, support for specifying PROP/VAL pairs.
Rik <rik@octave.org>
parents:
26150
diff
changeset
|
69 ## output arguments, the 2-D plot data is returned. The data can subsequently |
16951
a7c9be4a2c0f
fplot.m: Fix bad texinfo in docstring for changeset b34202b24212.
Rik <rik@octave.org>
parents:
16950
diff
changeset
|
70 ## be plotted manually with @code{plot (@var{x}, @var{y})}. |
16950
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
71 ## |
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
72 ## Example: |
5820 | 73 ## |
74 ## @example | |
9051
1bf0ce0930be
Grammar check TexInfo in all .m files
Rik <rdrider0-list@yahoo.com>
parents:
9040
diff
changeset
|
75 ## @group |
16951
a7c9be4a2c0f
fplot.m: Fix bad texinfo in docstring for changeset b34202b24212.
Rik <rik@octave.org>
parents:
16950
diff
changeset
|
76 ## fplot (@@cos, [0, 2*pi]) |
14327
4d917a6a858b
doc: Use Octave coding conventions in @example blocks of docstrings.
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
77 ## fplot ("[cos(x), sin(x)]", [0, 2*pi]) |
9051
1bf0ce0930be
Grammar check TexInfo in all .m files
Rik <rdrider0-list@yahoo.com>
parents:
9040
diff
changeset
|
78 ## @end group |
5820 | 79 ## @end example |
16950
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
80 ## |
20205
59911f536b07
fplot.m: Document requirement of accepting vector inputs (bug #42050).
Rik <rik@octave.org>
parents:
19833
diff
changeset
|
81 ## Programming Notes: |
59911f536b07
fplot.m: Document requirement of accepting vector inputs (bug #42050).
Rik <rik@octave.org>
parents:
19833
diff
changeset
|
82 ## |
59911f536b07
fplot.m: Document requirement of accepting vector inputs (bug #42050).
Rik <rik@octave.org>
parents:
19833
diff
changeset
|
83 ## @code{fplot} works best with continuous functions. Functions with |
17122
eaab03308c0b
doc: Rewrite docstrings for most plot functions.
Rik <rik@octave.org>
parents:
17026
diff
changeset
|
84 ## discontinuities are unlikely to plot well. This restriction may be removed |
eaab03308c0b
doc: Rewrite docstrings for most plot functions.
Rik <rik@octave.org>
parents:
17026
diff
changeset
|
85 ## in the future. |
20205
59911f536b07
fplot.m: Document requirement of accepting vector inputs (bug #42050).
Rik <rik@octave.org>
parents:
19833
diff
changeset
|
86 ## |
24415
3cd47be4fcbe
fplot.m: Fix handling of non-vectorized input functions (bug #52673).
Rik <rik@octave.org>
parents:
23220
diff
changeset
|
87 ## @code{fplot} performance is better when the function accepts and returns a |
3cd47be4fcbe
fplot.m: Fix handling of non-vectorized input functions (bug #52673).
Rik <rik@octave.org>
parents:
23220
diff
changeset
|
88 ## vector argument. Consider this when writing user-defined functions and use |
28427
7a8c69c4eb55
convert obsolete octave_fcn_inline object to @inline class
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
89 ## element-by-element operators such as @code{.*}, @code{./}, etc. |
20715
5b7643257978
Remove trailing whitespace at end of lines.
Rik <rik@octave.org>
parents:
20205
diff
changeset
|
90 ## |
28427
7a8c69c4eb55
convert obsolete octave_fcn_inline object to @inline class
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
91 ## @seealso{ezplot, plot} |
5820 | 92 ## @end deftypefn |
93 | |
17159
d74e2b5bdeb5
fplot.m: Accept an axis handle as first input.
Rik <rik@octave.org>
parents:
17122
diff
changeset
|
94 function [X, Y] = fplot (varargin) |
d74e2b5bdeb5
fplot.m: Accept an axis handle as first input.
Rik <rik@octave.org>
parents:
17122
diff
changeset
|
95 |
d74e2b5bdeb5
fplot.m: Accept an axis handle as first input.
Rik <rik@octave.org>
parents:
17122
diff
changeset
|
96 [hax, varargin, nargin] = __plt_get_axis_arg__ ("fplot", varargin{:}); |
5820 | 97 |
26154
af655eb15cdc
fplot.m: Add 1-input calling form, support for specifying PROP/VAL pairs.
Rik <rik@octave.org>
parents:
26150
diff
changeset
|
98 if (nargin < 1 || nargin > 5) |
16950
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
99 print_usage (); |
6781 | 100 endif |
101 | |
17159
d74e2b5bdeb5
fplot.m: Accept an axis handle as first input.
Rik <rik@octave.org>
parents:
17122
diff
changeset
|
102 fn = varargin{1}; |
28427
7a8c69c4eb55
convert obsolete octave_fcn_inline object to @inline class
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
103 if (isa (fn, "inline")) |
7a8c69c4eb55
convert obsolete octave_fcn_inline object to @inline class
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
104 fn = vectorize (inline (fn)); |
6699 | 105 nam = formula (fn); |
25803
23483673ba43
Use is_function_handle instead of isa (x, "function_handle").
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
106 elseif (is_function_handle (fn)) |
6699 | 107 nam = func2str (fn); |
5820 | 108 elseif (all (isalnum (fn))) |
6781 | 109 nam = fn; |
10400
b14fd5116c29
Ensure that 'limits' is a 2 or 4 vector, and that 'fn' is a function
Soren Hauberg <hauberg@gmail.com>
parents:
9051
diff
changeset
|
110 elseif (ischar (fn)) |
16338
8aeb5d5c3747
fplot.m: Overhaul code to use modern coding practices.
Rik <rik@octave.org>
parents:
14868
diff
changeset
|
111 fn = vectorize (inline (fn)); |
8aeb5d5c3747
fplot.m: Overhaul code to use modern coding practices.
Rik <rik@octave.org>
parents:
14868
diff
changeset
|
112 nam = formula (fn); |
5820 | 113 else |
16338
8aeb5d5c3747
fplot.m: Overhaul code to use modern coding practices.
Rik <rik@octave.org>
parents:
14868
diff
changeset
|
114 error ("fplot: FN must be a function handle, inline function, or string"); |
6781 | 115 endif |
116 | |
26154
af655eb15cdc
fplot.m: Add 1-input calling form, support for specifying PROP/VAL pairs.
Rik <rik@octave.org>
parents:
26150
diff
changeset
|
117 if (nargin > 1 && isnumeric (varargin{2})) |
af655eb15cdc
fplot.m: Add 1-input calling form, support for specifying PROP/VAL pairs.
Rik <rik@octave.org>
parents:
26150
diff
changeset
|
118 limits = varargin{2}; |
af655eb15cdc
fplot.m: Add 1-input calling form, support for specifying PROP/VAL pairs.
Rik <rik@octave.org>
parents:
26150
diff
changeset
|
119 if (iscomplex (limits) || (numel (limits) != 2 && numel (limits) != 4)) |
af655eb15cdc
fplot.m: Add 1-input calling form, support for specifying PROP/VAL pairs.
Rik <rik@octave.org>
parents:
26150
diff
changeset
|
120 error ("fplot: LIMITS must be a real vector with 2 or 4 elements"); |
af655eb15cdc
fplot.m: Add 1-input calling form, support for specifying PROP/VAL pairs.
Rik <rik@octave.org>
parents:
26150
diff
changeset
|
121 endif |
af655eb15cdc
fplot.m: Add 1-input calling form, support for specifying PROP/VAL pairs.
Rik <rik@octave.org>
parents:
26150
diff
changeset
|
122 i = 3; |
af655eb15cdc
fplot.m: Add 1-input calling form, support for specifying PROP/VAL pairs.
Rik <rik@octave.org>
parents:
26150
diff
changeset
|
123 else |
af655eb15cdc
fplot.m: Add 1-input calling form, support for specifying PROP/VAL pairs.
Rik <rik@octave.org>
parents:
26150
diff
changeset
|
124 limits = [-5, 5]; |
af655eb15cdc
fplot.m: Add 1-input calling form, support for specifying PROP/VAL pairs.
Rik <rik@octave.org>
parents:
26150
diff
changeset
|
125 i = 2; |
16950
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
126 endif |
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
127 |
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
128 n = 5; |
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
129 tol = 2e-3; |
26154
af655eb15cdc
fplot.m: Add 1-input calling form, support for specifying PROP/VAL pairs.
Rik <rik@octave.org>
parents:
26150
diff
changeset
|
130 fmt = {}; |
28940
914816dd2f1a
fplot.m: Allow setting displayname in function call (bug #59274).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28896
diff
changeset
|
131 prop_vals = {}; |
26154
af655eb15cdc
fplot.m: Add 1-input calling form, support for specifying PROP/VAL pairs.
Rik <rik@octave.org>
parents:
26150
diff
changeset
|
132 while (i <= numel (varargin)) |
16950
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
133 arg = varargin{i}; |
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
134 if (ischar (arg)) |
26617
98afb8bbd1f6
maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
135 [~, valid_fmt] = __pltopt__ ("fplot", arg, false); |
26154
af655eb15cdc
fplot.m: Add 1-input calling form, support for specifying PROP/VAL pairs.
Rik <rik@octave.org>
parents:
26150
diff
changeset
|
136 if (valid_fmt) |
af655eb15cdc
fplot.m: Add 1-input calling form, support for specifying PROP/VAL pairs.
Rik <rik@octave.org>
parents:
26150
diff
changeset
|
137 fmt(end+1) = arg; |
af655eb15cdc
fplot.m: Add 1-input calling form, support for specifying PROP/VAL pairs.
Rik <rik@octave.org>
parents:
26150
diff
changeset
|
138 else |
af655eb15cdc
fplot.m: Add 1-input calling form, support for specifying PROP/VAL pairs.
Rik <rik@octave.org>
parents:
26150
diff
changeset
|
139 if (i == numel (varargin)) |
af655eb15cdc
fplot.m: Add 1-input calling form, support for specifying PROP/VAL pairs.
Rik <rik@octave.org>
parents:
26150
diff
changeset
|
140 error ("fplot: bad input in position %d", i); |
af655eb15cdc
fplot.m: Add 1-input calling form, support for specifying PROP/VAL pairs.
Rik <rik@octave.org>
parents:
26150
diff
changeset
|
141 endif |
28940
914816dd2f1a
fplot.m: Allow setting displayname in function call (bug #59274).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28896
diff
changeset
|
142 prop_vals(end+(1:2)) = varargin([i, i+1]); |
26154
af655eb15cdc
fplot.m: Add 1-input calling form, support for specifying PROP/VAL pairs.
Rik <rik@octave.org>
parents:
26150
diff
changeset
|
143 i++; # Skip PROPERTY. |
af655eb15cdc
fplot.m: Add 1-input calling form, support for specifying PROP/VAL pairs.
Rik <rik@octave.org>
parents:
26150
diff
changeset
|
144 endif |
16950
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
145 elseif (isnumeric (arg) && isscalar (arg) && arg > 0) |
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
146 if (arg == fix (arg)) |
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
147 n = arg; |
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
148 else |
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
149 tol = arg; |
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
150 endif |
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
151 else |
26154
af655eb15cdc
fplot.m: Add 1-input calling form, support for specifying PROP/VAL pairs.
Rik <rik@octave.org>
parents:
26150
diff
changeset
|
152 error ("fplot: bad input in position %d", i); |
16950
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
153 endif |
26154
af655eb15cdc
fplot.m: Add 1-input calling form, support for specifying PROP/VAL pairs.
Rik <rik@octave.org>
parents:
26150
diff
changeset
|
154 i++; |
af655eb15cdc
fplot.m: Add 1-input calling form, support for specifying PROP/VAL pairs.
Rik <rik@octave.org>
parents:
26150
diff
changeset
|
155 endwhile |
16950
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
156 |
19593
446c46af4b42
strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents:
18629
diff
changeset
|
157 if (n != 5) |
446c46af4b42
strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents:
18629
diff
changeset
|
158 ## n was specified |
16950
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
159 x0 = linspace (limits(1), limits(2), n/2 + 1)'; |
6781 | 160 else |
16950
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
161 x0 = linspace (limits(1), limits(2), 5)'; |
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
162 n = 8; |
5820 | 163 endif |
164 | |
26150
46757ec0bac2
fplot.m: Use try/catch to avoid errors with non-vectorized functions (bug #55134).
Rik <rik@octave.org>
parents:
25803
diff
changeset
|
165 try |
46757ec0bac2
fplot.m: Use try/catch to avoid errors with non-vectorized functions (bug #55134).
Rik <rik@octave.org>
parents:
25803
diff
changeset
|
166 y0 = feval (fn, x0); |
46757ec0bac2
fplot.m: Use try/catch to avoid errors with non-vectorized functions (bug #55134).
Rik <rik@octave.org>
parents:
25803
diff
changeset
|
167 if (isscalar (y0)) |
46757ec0bac2
fplot.m: Use try/catch to avoid errors with non-vectorized functions (bug #55134).
Rik <rik@octave.org>
parents:
25803
diff
changeset
|
168 warning ("fplot: FN is not a vectorized function which reduces performance"); |
46757ec0bac2
fplot.m: Use try/catch to avoid errors with non-vectorized functions (bug #55134).
Rik <rik@octave.org>
parents:
25803
diff
changeset
|
169 fn = @(x) arrayfun (fn, x); # Create a new fn that accepts vectors |
46757ec0bac2
fplot.m: Use try/catch to avoid errors with non-vectorized functions (bug #55134).
Rik <rik@octave.org>
parents:
25803
diff
changeset
|
170 y0 = feval (fn, x0); |
46757ec0bac2
fplot.m: Use try/catch to avoid errors with non-vectorized functions (bug #55134).
Rik <rik@octave.org>
parents:
25803
diff
changeset
|
171 endif |
46757ec0bac2
fplot.m: Use try/catch to avoid errors with non-vectorized functions (bug #55134).
Rik <rik@octave.org>
parents:
25803
diff
changeset
|
172 catch |
46757ec0bac2
fplot.m: Use try/catch to avoid errors with non-vectorized functions (bug #55134).
Rik <rik@octave.org>
parents:
25803
diff
changeset
|
173 ## feval failed, maybe it is because the function is not vectorized? |
24415
3cd47be4fcbe
fplot.m: Fix handling of non-vectorized input functions (bug #52673).
Rik <rik@octave.org>
parents:
23220
diff
changeset
|
174 fn = @(x) arrayfun (fn, x); # Create a new fn that accepts vectors |
3cd47be4fcbe
fplot.m: Fix handling of non-vectorized input functions (bug #52673).
Rik <rik@octave.org>
parents:
23220
diff
changeset
|
175 y0 = feval (fn, x0); |
26150
46757ec0bac2
fplot.m: Use try/catch to avoid errors with non-vectorized functions (bug #55134).
Rik <rik@octave.org>
parents:
25803
diff
changeset
|
176 warning ("fplot: FN is not a vectorized function which reduces performance"); |
46757ec0bac2
fplot.m: Use try/catch to avoid errors with non-vectorized functions (bug #55134).
Rik <rik@octave.org>
parents:
25803
diff
changeset
|
177 end_try_catch |
46757ec0bac2
fplot.m: Use try/catch to avoid errors with non-vectorized functions (bug #55134).
Rik <rik@octave.org>
parents:
25803
diff
changeset
|
178 |
46757ec0bac2
fplot.m: Use try/catch to avoid errors with non-vectorized functions (bug #55134).
Rik <rik@octave.org>
parents:
25803
diff
changeset
|
179 x = linspace (limits(1), limits(2), n)'; |
46757ec0bac2
fplot.m: Use try/catch to avoid errors with non-vectorized functions (bug #55134).
Rik <rik@octave.org>
parents:
25803
diff
changeset
|
180 y = feval (fn, x); |
24415
3cd47be4fcbe
fplot.m: Fix handling of non-vectorized input functions (bug #52673).
Rik <rik@octave.org>
parents:
23220
diff
changeset
|
181 |
21831
1077f09a0cfd
fplot.m: Handle input functions which do not respect input data orientation (bug #48034).
Rik <rik@octave.org>
parents:
20852
diff
changeset
|
182 if (rows (x0) == rows (y0)) |
1077f09a0cfd
fplot.m: Handle input functions which do not respect input data orientation (bug #48034).
Rik <rik@octave.org>
parents:
20852
diff
changeset
|
183 fcn_transpose = false; |
1077f09a0cfd
fplot.m: Handle input functions which do not respect input data orientation (bug #48034).
Rik <rik@octave.org>
parents:
20852
diff
changeset
|
184 elseif (rows (x0) == columns (y0)) |
1077f09a0cfd
fplot.m: Handle input functions which do not respect input data orientation (bug #48034).
Rik <rik@octave.org>
parents:
20852
diff
changeset
|
185 fcn_transpose = true; |
1077f09a0cfd
fplot.m: Handle input functions which do not respect input data orientation (bug #48034).
Rik <rik@octave.org>
parents:
20852
diff
changeset
|
186 y0 = y0.'; |
1077f09a0cfd
fplot.m: Handle input functions which do not respect input data orientation (bug #48034).
Rik <rik@octave.org>
parents:
20852
diff
changeset
|
187 y = y.'; |
1077f09a0cfd
fplot.m: Handle input functions which do not respect input data orientation (bug #48034).
Rik <rik@octave.org>
parents:
20852
diff
changeset
|
188 else |
1077f09a0cfd
fplot.m: Handle input functions which do not respect input data orientation (bug #48034).
Rik <rik@octave.org>
parents:
20852
diff
changeset
|
189 error ("fplot: invalid function FN (# of outputs not equal to inputs)"); |
8145
7ef5b1b4e029
fplot.m: call axis after plot
John W. Eaton <jwe@octave.org>
parents:
7280
diff
changeset
|
190 endif |
7ef5b1b4e029
fplot.m: call axis after plot
John W. Eaton <jwe@octave.org>
parents:
7280
diff
changeset
|
191 |
16950
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
192 err0 = Inf; |
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
193 |
21831
1077f09a0cfd
fplot.m: Handle input functions which do not respect input data orientation (bug #48034).
Rik <rik@octave.org>
parents:
20852
diff
changeset
|
194 ## FIXME: This algorithm should really use adaptive scaling as |
16950
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
195 ## the numerical quadrature algorithms do so that extra points are |
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
196 ## used where they are needed and not spread evenly over the entire |
17479 | 197 ## x-range. Try any function with a discontinuity, such as |
198 ## fplot (@tan, [-2, 2]) or fplot ("1./x", [-3, 2]), to see the | |
16950
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
199 ## problems with the current solution. |
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
200 |
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
201 while (n < 2^18) # Something is wrong if we need more than 250K points |
18629
6fdd3ab55b78
undo unintended changes to fplot in changeset 37c300acfcfd
John W. Eaton <jwe@octave.org>
parents:
18627
diff
changeset
|
202 yi = interp1 (x0, y0, x, "linear"); |
16950
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
203 ## relative error calculation using average of [yi,y] as reference |
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
204 ## since neither estimate is known a priori to be better than the other. |
24415
3cd47be4fcbe
fplot.m: Fix handling of non-vectorized input functions (bug #52673).
Rik <rik@octave.org>
parents:
23220
diff
changeset
|
205 err = 0.5 * max (abs ((yi - y) ./ (yi + y + eps))(:)); |
16950
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
206 if (err < tol || abs (err - err0) < tol/2) |
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
207 ## Either relative tolerance has been met OR |
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
208 ## algorithm has stopped making any reasonable progress per iteration. |
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
209 break; |
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
210 endif |
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
211 x0 = x; |
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
212 y0 = y; |
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
213 err0 = err; |
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
214 n = 2 * (n - 1) + 1; |
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
215 x = linspace (limits(1), limits(2), n)'; |
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
216 y = feval (fn, x); |
21831
1077f09a0cfd
fplot.m: Handle input functions which do not respect input data orientation (bug #48034).
Rik <rik@octave.org>
parents:
20852
diff
changeset
|
217 if (fcn_transpose) |
1077f09a0cfd
fplot.m: Handle input functions which do not respect input data orientation (bug #48034).
Rik <rik@octave.org>
parents:
20852
diff
changeset
|
218 y = y.'; |
1077f09a0cfd
fplot.m: Handle input functions which do not respect input data orientation (bug #48034).
Rik <rik@octave.org>
parents:
20852
diff
changeset
|
219 endif |
16950
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
220 endwhile |
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
221 |
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
222 if (nargout == 2) |
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
223 X = x; |
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
224 Y = y; |
6781 | 225 else |
17159
d74e2b5bdeb5
fplot.m: Accept an axis handle as first input.
Rik <rik@octave.org>
parents:
17122
diff
changeset
|
226 if (isempty (hax)) |
d74e2b5bdeb5
fplot.m: Accept an axis handle as first input.
Rik <rik@octave.org>
parents:
17122
diff
changeset
|
227 hax = gca (); |
d74e2b5bdeb5
fplot.m: Accept an axis handle as first input.
Rik <rik@octave.org>
parents:
17122
diff
changeset
|
228 endif |
28940
914816dd2f1a
fplot.m: Allow setting displayname in function call (bug #59274).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28896
diff
changeset
|
229 hl = plot (hax, x, y, fmt{:}); |
914816dd2f1a
fplot.m: Allow setting displayname in function call (bug #59274).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28896
diff
changeset
|
230 if (isempty (get (hl(1), "displayname"))) |
28942
fc4bb4bd1d5e
maint: Use '##' as lead-in for full-line comments.
Rik <rik@octave.org>
parents:
28940
diff
changeset
|
231 ## Set displayname for legend if FMT did not contain a name. |
28940
914816dd2f1a
fplot.m: Allow setting displayname in function call (bug #59274).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28896
diff
changeset
|
232 if (isvector (y)) |
914816dd2f1a
fplot.m: Allow setting displayname in function call (bug #59274).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28896
diff
changeset
|
233 set (hl, "displayname", nam); |
914816dd2f1a
fplot.m: Allow setting displayname in function call (bug #59274).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28896
diff
changeset
|
234 else |
914816dd2f1a
fplot.m: Allow setting displayname in function call (bug #59274).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28896
diff
changeset
|
235 for i = 1:columns (y) |
914816dd2f1a
fplot.m: Allow setting displayname in function call (bug #59274).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28896
diff
changeset
|
236 nams{i} = sprintf ("%s(:,%i)", nam, i); |
914816dd2f1a
fplot.m: Allow setting displayname in function call (bug #59274).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28896
diff
changeset
|
237 endfor |
914816dd2f1a
fplot.m: Allow setting displayname in function call (bug #59274).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28896
diff
changeset
|
238 set (hl, {"displayname"}, nams(:)); |
914816dd2f1a
fplot.m: Allow setting displayname in function call (bug #59274).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28896
diff
changeset
|
239 endif |
914816dd2f1a
fplot.m: Allow setting displayname in function call (bug #59274).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28896
diff
changeset
|
240 endif |
28942
fc4bb4bd1d5e
maint: Use '##' as lead-in for full-line comments.
Rik <rik@octave.org>
parents:
28940
diff
changeset
|
241 ## Properties passed as input arguments override other properties. |
28940
914816dd2f1a
fplot.m: Allow setting displayname in function call (bug #59274).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28896
diff
changeset
|
242 if (! isempty (prop_vals)) |
914816dd2f1a
fplot.m: Allow setting displayname in function call (bug #59274).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28896
diff
changeset
|
243 set (hl, prop_vals{:}); |
914816dd2f1a
fplot.m: Allow setting displayname in function call (bug #59274).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28896
diff
changeset
|
244 endif |
17159
d74e2b5bdeb5
fplot.m: Accept an axis handle as first input.
Rik <rik@octave.org>
parents:
17122
diff
changeset
|
245 axis (hax, limits); |
28940
914816dd2f1a
fplot.m: Allow setting displayname in function call (bug #59274).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28896
diff
changeset
|
246 legend (hax, "show"); |
6781 | 247 endif |
16338
8aeb5d5c3747
fplot.m: Overhaul code to use modern coding practices.
Rik <rik@octave.org>
parents:
14868
diff
changeset
|
248 |
5820 | 249 endfunction |
7245 | 250 |
251 | |
252 %!demo | |
14237
11949c9795a0
Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
253 %! clf; |
16950
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
254 %! fplot (@cos, [0, 2*pi]); |
22302
1c4cd12987f5
Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents:
21831
diff
changeset
|
255 %! title ("fplot() single function"); |
14237
11949c9795a0
Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
256 |
11949c9795a0
Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
257 %!demo |
11949c9795a0
Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
258 %! clf; |
22302
1c4cd12987f5
Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents:
21831
diff
changeset
|
259 %! fplot ("[cos(x), sin(x)]", [0, 2*pi]); |
1c4cd12987f5
Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents:
21831
diff
changeset
|
260 %! title ("fplot() multiple functions"); |
14237
11949c9795a0
Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
261 |
16950
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
262 %!demo |
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
263 %! clf; |
17026
be52288f827b
Tweak some plotting demos for messages and spelling.
Rik <rik@octave.org>
parents:
16951
diff
changeset
|
264 %! fh = @(x) sin (pi*x) ./ (pi*x); |
16950
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
265 %! fplot (fh, [-5, 5]); |
22302
1c4cd12987f5
Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents:
21831
diff
changeset
|
266 %! title ("fplot() sinc function (possible division by 0, near 0)"); |
16950
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
267 |
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
268 %!test |
21831
1077f09a0cfd
fplot.m: Handle input functions which do not respect input data orientation (bug #48034).
Rik <rik@octave.org>
parents:
20852
diff
changeset
|
269 %! ## Multi-valued function |
16950
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
270 %! [x, y] = fplot ("[cos(x), sin(x)]", [0, 2*pi]); |
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
271 %! assert (columns (y) == 2); |
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
272 %! assert (rows (x) == rows (y)); |
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
273 %! assert (y, [cos(x), sin(x)], -2e-3); |
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
274 |
21831
1077f09a0cfd
fplot.m: Handle input functions which do not respect input data orientation (bug #48034).
Rik <rik@octave.org>
parents:
20852
diff
changeset
|
275 %!test |
1077f09a0cfd
fplot.m: Handle input functions which do not respect input data orientation (bug #48034).
Rik <rik@octave.org>
parents:
20852
diff
changeset
|
276 %! ## Function requiring transpose |
1077f09a0cfd
fplot.m: Handle input functions which do not respect input data orientation (bug #48034).
Rik <rik@octave.org>
parents:
20852
diff
changeset
|
277 %! fn = @(x) 2 * x(:).'; |
1077f09a0cfd
fplot.m: Handle input functions which do not respect input data orientation (bug #48034).
Rik <rik@octave.org>
parents:
20852
diff
changeset
|
278 %! [x, y] = fplot (fn, [-1, 1]); |
1077f09a0cfd
fplot.m: Handle input functions which do not respect input data orientation (bug #48034).
Rik <rik@octave.org>
parents:
20852
diff
changeset
|
279 %! assert (columns (y) == 1); |
1077f09a0cfd
fplot.m: Handle input functions which do not respect input data orientation (bug #48034).
Rik <rik@octave.org>
parents:
20852
diff
changeset
|
280 %! assert (rows (x) == rows (y)); |
1077f09a0cfd
fplot.m: Handle input functions which do not respect input data orientation (bug #48034).
Rik <rik@octave.org>
parents:
20852
diff
changeset
|
281 %! assert (y, 2*x); |
1077f09a0cfd
fplot.m: Handle input functions which do not respect input data orientation (bug #48034).
Rik <rik@octave.org>
parents:
20852
diff
changeset
|
282 |
1077f09a0cfd
fplot.m: Handle input functions which do not respect input data orientation (bug #48034).
Rik <rik@octave.org>
parents:
20852
diff
changeset
|
283 %!test |
1077f09a0cfd
fplot.m: Handle input functions which do not respect input data orientation (bug #48034).
Rik <rik@octave.org>
parents:
20852
diff
changeset
|
284 %! ## Constant value function |
24415
3cd47be4fcbe
fplot.m: Fix handling of non-vectorized input functions (bug #52673).
Rik <rik@octave.org>
parents:
23220
diff
changeset
|
285 %! fn = @(x) 0; |
21831
1077f09a0cfd
fplot.m: Handle input functions which do not respect input data orientation (bug #48034).
Rik <rik@octave.org>
parents:
20852
diff
changeset
|
286 %! [x, y] = fplot (fn, [-1, 1]); |
1077f09a0cfd
fplot.m: Handle input functions which do not respect input data orientation (bug #48034).
Rik <rik@octave.org>
parents:
20852
diff
changeset
|
287 %! assert (columns (y) == 1); |
1077f09a0cfd
fplot.m: Handle input functions which do not respect input data orientation (bug #48034).
Rik <rik@octave.org>
parents:
20852
diff
changeset
|
288 %! assert (rows (x) == rows (y)); |
24415
3cd47be4fcbe
fplot.m: Fix handling of non-vectorized input functions (bug #52673).
Rik <rik@octave.org>
parents:
23220
diff
changeset
|
289 %! assert (y, repmat ([0], size (x))); |
21831
1077f09a0cfd
fplot.m: Handle input functions which do not respect input data orientation (bug #48034).
Rik <rik@octave.org>
parents:
20852
diff
changeset
|
290 |
28940
914816dd2f1a
fplot.m: Allow setting displayname in function call (bug #59274).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28896
diff
changeset
|
291 %!test <*59274> |
914816dd2f1a
fplot.m: Allow setting displayname in function call (bug #59274).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28896
diff
changeset
|
292 %! ## Manual displayname overrides automatic legend entry |
914816dd2f1a
fplot.m: Allow setting displayname in function call (bug #59274).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28896
diff
changeset
|
293 %! hf = figure ("visible", "off"); |
914816dd2f1a
fplot.m: Allow setting displayname in function call (bug #59274).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28896
diff
changeset
|
294 %! unwind_protect |
914816dd2f1a
fplot.m: Allow setting displayname in function call (bug #59274).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28896
diff
changeset
|
295 %! fplot (@sin, [0, 3], "displayname", "mysin"); |
914816dd2f1a
fplot.m: Allow setting displayname in function call (bug #59274).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28896
diff
changeset
|
296 %! hl = legend (); |
914816dd2f1a
fplot.m: Allow setting displayname in function call (bug #59274).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28896
diff
changeset
|
297 %! assert (get (hl, "string"), {"mysin"}); |
914816dd2f1a
fplot.m: Allow setting displayname in function call (bug #59274).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28896
diff
changeset
|
298 %! unwind_protect_cleanup |
914816dd2f1a
fplot.m: Allow setting displayname in function call (bug #59274).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28896
diff
changeset
|
299 %! close (hf); |
914816dd2f1a
fplot.m: Allow setting displayname in function call (bug #59274).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28896
diff
changeset
|
300 %! end_unwind_protect |
914816dd2f1a
fplot.m: Allow setting displayname in function call (bug #59274).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28896
diff
changeset
|
301 |
914816dd2f1a
fplot.m: Allow setting displayname in function call (bug #59274).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28896
diff
changeset
|
302 %!test <*59274> |
914816dd2f1a
fplot.m: Allow setting displayname in function call (bug #59274).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28896
diff
changeset
|
303 %! ## displayname in format string overrides automatic legend entry |
914816dd2f1a
fplot.m: Allow setting displayname in function call (bug #59274).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28896
diff
changeset
|
304 %! hf = figure ("visible", "off"); |
914816dd2f1a
fplot.m: Allow setting displayname in function call (bug #59274).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28896
diff
changeset
|
305 %! unwind_protect |
914816dd2f1a
fplot.m: Allow setting displayname in function call (bug #59274).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28896
diff
changeset
|
306 %! fplot (@sin, [0, 3], "+;mysin;"); |
914816dd2f1a
fplot.m: Allow setting displayname in function call (bug #59274).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28896
diff
changeset
|
307 %! hl = legend (); |
914816dd2f1a
fplot.m: Allow setting displayname in function call (bug #59274).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28896
diff
changeset
|
308 %! assert (get (hl, "string"), {"mysin"}); |
914816dd2f1a
fplot.m: Allow setting displayname in function call (bug #59274).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28896
diff
changeset
|
309 %! unwind_protect_cleanup |
914816dd2f1a
fplot.m: Allow setting displayname in function call (bug #59274).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28896
diff
changeset
|
310 %! close (hf); |
914816dd2f1a
fplot.m: Allow setting displayname in function call (bug #59274).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28896
diff
changeset
|
311 %! end_unwind_protect |
914816dd2f1a
fplot.m: Allow setting displayname in function call (bug #59274).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28896
diff
changeset
|
312 |
19833
9fc020886ae9
maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
19697
diff
changeset
|
313 ## Test input validation |
28896
90fea9cc9caa
test: Add expected error message <Invalid call> to BIST tests for nargin.
Rik <rik@octave.org>
parents:
28733
diff
changeset
|
314 %!error <Invalid call> fplot () |
90fea9cc9caa
test: Add expected error message <Invalid call> to BIST tests for nargin.
Rik <rik@octave.org>
parents:
28733
diff
changeset
|
315 %!error <Invalid call> fplot (1,2,3,4,5,6) |
16950
b34202b24212
fplot.m: Overhaul function for Matlab compatibility and performance (bug #38961).
Rik <rik@octave.org>
parents:
16775
diff
changeset
|
316 %!error <FN must be a function handle> fplot (1, [0 1]) |
16775
5ec3f4aea91c
fplot.m: Fix bug when FN is a constant function (bug #39287)
Rik <rik@octave.org>
parents:
16338
diff
changeset
|
317 %!error <LIMITS must be a real vector> fplot (@cos, [i, 2*i]) |
5ec3f4aea91c
fplot.m: Fix bug when FN is a constant function (bug #39287)
Rik <rik@octave.org>
parents:
16338
diff
changeset
|
318 %!error <LIMITS must be a real vector with 2 or 4> fplot (@cos, [1]) |
5ec3f4aea91c
fplot.m: Fix bug when FN is a constant function (bug #39287)
Rik <rik@octave.org>
parents:
16338
diff
changeset
|
319 %!error <LIMITS must be a real vector with 2 or 4> fplot (@cos, [1 2 3]) |
26154
af655eb15cdc
fplot.m: Add 1-input calling form, support for specifying PROP/VAL pairs.
Rik <rik@octave.org>
parents:
26150
diff
changeset
|
320 %!error <bad input in position 2> fplot (@cos, "linewidth") |
af655eb15cdc
fplot.m: Add 1-input calling form, support for specifying PROP/VAL pairs.
Rik <rik@octave.org>
parents:
26150
diff
changeset
|
321 %!error <bad input in position 3> fplot (@cos, [-1,1], {1}) |
af655eb15cdc
fplot.m: Add 1-input calling form, support for specifying PROP/VAL pairs.
Rik <rik@octave.org>
parents:
26150
diff
changeset
|
322 %!warning <FN is not a vectorized function> |
af655eb15cdc
fplot.m: Add 1-input calling form, support for specifying PROP/VAL pairs.
Rik <rik@octave.org>
parents:
26150
diff
changeset
|
323 %! fn = @(x) 0; |
af655eb15cdc
fplot.m: Add 1-input calling form, support for specifying PROP/VAL pairs.
Rik <rik@octave.org>
parents:
26150
diff
changeset
|
324 %! [x,y] = fplot (fn, [-1,1]); |
21831
1077f09a0cfd
fplot.m: Handle input functions which do not respect input data orientation (bug #48034).
Rik <rik@octave.org>
parents:
20852
diff
changeset
|
325 %!error <invalid function FN> |
1077f09a0cfd
fplot.m: Handle input functions which do not respect input data orientation (bug #48034).
Rik <rik@octave.org>
parents:
20852
diff
changeset
|
326 %! fn = @(x) [x;x]; |
1077f09a0cfd
fplot.m: Handle input functions which do not respect input data orientation (bug #48034).
Rik <rik@octave.org>
parents:
20852
diff
changeset
|
327 %! fplot (fn, [-1,1]); |