annotate src/data.cc @ 1728:42b4f904f1af

[project @ 1996-01-09 11:36:01 by jwe]
author jwe
date Tue, 09 Jan 1996 11:41:43 +0000
parents 0d9e10d10bd7
children a02f140ed897
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
523
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
1 // data.cc -*- C++ -*-
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
2 /*
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
3
1009
dfe01093f657 [project @ 1995-01-04 04:05:12 by jwe]
jwe
parents: 939
diff changeset
4 Copyright (C) 1992, 1993, 1994, 1995 John W. Eaton
523
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
5
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
6 This file is part of Octave.
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
7
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
8 Octave is free software; you can redistribute it and/or modify it
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
9 under the terms of the GNU General Public License as published by the
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
10 Free Software Foundation; either version 2, or (at your option) any
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
11 later version.
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
12
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
13 Octave is distributed in the hope that it will be useful, but WITHOUT
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
16 for more details.
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
17
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
18 You should have received a copy of the GNU General Public License
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
19 along with Octave; see the file COPYING. If not, write to the Free
1315
611d403c7f3d [project @ 1995-06-25 19:56:32 by jwe]
jwe
parents: 1277
diff changeset
20 Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
523
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
21
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
22 */
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
23
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
24 /*
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
25
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
26 The function builtin_pwd adapted from a similar function from GNU
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
27 Bash, the Bourne Again SHell, copyright (C) 1987, 1989, 1991 Free
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
28 Software Foundation, Inc.
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
29
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
30 */
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
31
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
32 #ifdef HAVE_CONFIG_H
1192
b6360f2d4fa6 [project @ 1995-03-30 21:38:35 by jwe]
jwe
parents: 1129
diff changeset
33 #include <config.h>
523
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
34 #endif
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
35
1728
42b4f904f1af [project @ 1996-01-09 11:36:01 by jwe]
jwe
parents: 1572
diff changeset
36 #include <string>
42b4f904f1af [project @ 1996-01-09 11:36:01 by jwe]
jwe
parents: 1572
diff changeset
37
1352
19c10b8657d5 [project @ 1995-09-05 08:11:57 by jwe]
jwe
parents: 1315
diff changeset
38 #include "defun.h"
19c10b8657d5 [project @ 1995-09-05 08:11:57 by jwe]
jwe
parents: 1315
diff changeset
39 #include "error.h"
19c10b8657d5 [project @ 1995-09-05 08:11:57 by jwe]
jwe
parents: 1315
diff changeset
40 #include "gripes.h"
19c10b8657d5 [project @ 1995-09-05 08:11:57 by jwe]
jwe
parents: 1315
diff changeset
41 #include "help.h"
19c10b8657d5 [project @ 1995-09-05 08:11:57 by jwe]
jwe
parents: 1315
diff changeset
42 #include "oct-map.h"
523
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
43 #include "tree-const.h"
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
44 #include "user-prefs.h"
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
45 #include "utils.h"
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
46
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
47 #ifndef MIN
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
48 #define MIN(a,b) ((a) < (b) ? (a) : (b))
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
49 #endif
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
50
767
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
51 #ifndef ABS
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
52 #define ABS(x) (((x) < 0) ? (-x) : (x))
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
53 #endif
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
54
1488
89c587478067 [project @ 1995-09-26 22:49:48 by jwe]
jwe
parents: 1402
diff changeset
55 DEFUN ("all", Fall, Sall, 10,
523
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
56 "all (X): are all elements of X nonzero?")
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
57 {
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
58 Octave_object retval;
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
59
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
60 int nargin = args.length ();
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
61
712
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 649
diff changeset
62 if (nargin == 1 && args(0).is_defined ())
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 649
diff changeset
63 retval = args(0).all ();
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 649
diff changeset
64 else
523
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
65 print_usage ("all");
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
66
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
67 return retval;
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
68 }
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
69
1488
89c587478067 [project @ 1995-09-26 22:49:48 by jwe]
jwe
parents: 1402
diff changeset
70 DEFUN ("any", Fany, Sany, 10,
523
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
71 "any (X): are any elements of X nonzero?")
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
72 {
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
73 Octave_object retval;
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
74
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
75 int nargin = args.length ();
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
76
712
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 649
diff changeset
77 if (nargin == 1 && args(0).is_defined ())
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 649
diff changeset
78 retval = args(0).any ();
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 649
diff changeset
79 else
523
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
80 print_usage ("any");
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
81
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
82 return retval;
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
83 }
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
84
649
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
85 // These mapping functions may also be useful in other places, eh?
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
86
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
87 typedef double (*d_dd_fcn) (double, double);
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
88
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
89 static Matrix
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
90 map (d_dd_fcn f, double x, const Matrix& y)
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
91 {
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
92 int nr = y.rows ();
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
93 int nc = y.columns ();
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
94
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
95 Matrix retval (nr, nc);
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
96
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
97 for (int j = 0; j < nc; j++)
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
98 for (int i = 0; i < nr; i++)
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
99 retval.elem (i, j) = f (x, y.elem (i, j));
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
100
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
101 return retval;
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
102 }
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
103
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
104 static Matrix
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
105 map (d_dd_fcn f, const Matrix& x, double y)
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
106 {
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
107 int nr = x.rows ();
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
108 int nc = x.columns ();
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
109
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
110 Matrix retval (nr, nc);
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
111
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
112 for (int j = 0; j < nc; j++)
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
113 for (int i = 0; i < nr; i++)
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
114 retval.elem (i, j) = f (x.elem (i, j), y);
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
115
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
116 return retval;
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
117 }
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
118
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
119 static Matrix
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
120 map (d_dd_fcn f, const Matrix& x, const Matrix& y)
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
121 {
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
122 int x_nr = x.rows ();
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
123 int x_nc = x.columns ();
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
124
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
125 int y_nr = y.rows ();
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
126 int y_nc = y.columns ();
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
127
719
02814aea28c8 [project @ 1994-09-21 15:01:30 by jwe]
jwe
parents: 712
diff changeset
128 assert (x_nr == y_nr && x_nc == y_nc);
649
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
129
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
130 Matrix retval (x_nr, x_nc);
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
131
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
132 for (int j = 0; j < x_nc; j++)
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
133 for (int i = 0; i < x_nr; i++)
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
134 retval.elem (i, j) = f (x.elem (i, j), y.elem (i, j));
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
135
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
136 return retval;
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
137 }
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
138
1488
89c587478067 [project @ 1995-09-26 22:49:48 by jwe]
jwe
parents: 1402
diff changeset
139 DEFUN ("atan2", Fatan2, Satan2, 10,
649
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
140 "atan2 (Y, X): atan (Y / X) in range -pi to pi")
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
141 {
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
142 Octave_object retval;
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
143
712
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 649
diff changeset
144 int nargin = args.length ();
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 649
diff changeset
145
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 649
diff changeset
146 if (nargin == 2 && args(0).is_defined () && args(1).is_defined ())
649
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
147 {
712
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 649
diff changeset
148 tree_constant arg_y = args(0);
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 649
diff changeset
149 tree_constant arg_x = args(1);
649
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
150
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
151 int y_nr = arg_y.rows ();
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
152 int y_nc = arg_y.columns ();
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
153
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
154 int x_nr = arg_x.rows ();
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
155 int x_nc = arg_x.columns ();
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
156
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
157 int arg_y_empty = empty_arg ("atan2", y_nr, y_nc);
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
158 int arg_x_empty = empty_arg ("atan2", x_nr, x_nc);
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
159
719
02814aea28c8 [project @ 1994-09-21 15:01:30 by jwe]
jwe
parents: 712
diff changeset
160 if (arg_y_empty > 0 && arg_x_empty > 0)
02814aea28c8 [project @ 1994-09-21 15:01:30 by jwe]
jwe
parents: 712
diff changeset
161 return Matrix ();
02814aea28c8 [project @ 1994-09-21 15:01:30 by jwe]
jwe
parents: 712
diff changeset
162 else if (arg_y_empty || arg_x_empty)
649
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
163 return retval;
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
164
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
165 int y_is_scalar = (y_nr == 1 && y_nc == 1);
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
166 int x_is_scalar = (x_nr == 1 && x_nc == 1);
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
167
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
168 if (y_is_scalar && x_is_scalar)
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
169 {
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
170 double y = arg_y.double_value ();
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
171
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
172 if (! error_state)
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
173 {
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
174 double x = arg_x.double_value ();
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
175
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
176 if (! error_state)
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
177 retval = atan2 (y, x);
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
178 }
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
179 }
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
180 else if (y_is_scalar)
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
181 {
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
182 double y = arg_y.double_value ();
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
183
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
184 if (! error_state)
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
185 {
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
186 Matrix x = arg_x.matrix_value ();
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
187
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
188 if (! error_state)
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
189 retval = map (atan2, y, x);
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
190 }
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
191 }
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
192 else if (x_is_scalar)
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
193 {
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
194 Matrix y = arg_y.matrix_value ();
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
195
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
196 if (! error_state)
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
197 {
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
198 double x = arg_x.double_value ();
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
199
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
200 if (! error_state)
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
201 retval = map (atan2, y, x);
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
202 }
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
203 }
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
204 else if (y_nr == x_nr && y_nc == x_nc)
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
205 {
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
206 Matrix y = arg_y.matrix_value ();
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
207
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
208 if (! error_state)
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
209 {
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
210 Matrix x = arg_x.matrix_value ();
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
211
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
212 if (! error_state)
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
213 retval = map (atan2, y, x);
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
214 }
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
215 }
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
216 else
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
217 error ("atan2: nonconformant matrices");
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
218 }
712
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 649
diff changeset
219 else
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 649
diff changeset
220 print_usage ("atan2");
649
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
221
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
222 return retval;
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
223 }
1a674dba2e9e [project @ 1994-08-24 15:47:23 by jwe]
jwe
parents: 648
diff changeset
224
1488
89c587478067 [project @ 1995-09-26 22:49:48 by jwe]
jwe
parents: 1402
diff changeset
225 DEFUN ("cumprod", Fcumprod, Scumprod, 10,
523
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
226 "cumprod (X): cumulative products")
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
227 {
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
228 Octave_object retval;
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
229
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
230 int nargin = args.length ();
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
231
760
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
232 if (nargin == 1)
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
233 {
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
234 tree_constant arg = args(0);
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
235
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
236 if (arg.is_real_type ())
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
237 {
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
238 Matrix tmp = arg.matrix_value ();
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
239
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
240 if (! error_state)
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
241 retval(0) = tmp.cumprod ();
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
242 }
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
243 else if (arg.is_complex_type ())
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
244 {
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
245 ComplexMatrix tmp = arg.complex_matrix_value ();
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
246
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
247 if (! error_state)
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
248 retval(0) = tmp.cumprod ();
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
249 }
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
250 else
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
251 {
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
252 gripe_wrong_type_arg ("cumprod", arg);
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
253 return retval;
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
254 }
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
255 }
712
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 649
diff changeset
256 else
523
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
257 print_usage ("cumprod");
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
258
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
259 return retval;
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
260 }
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
261
1488
89c587478067 [project @ 1995-09-26 22:49:48 by jwe]
jwe
parents: 1402
diff changeset
262 DEFUN ("cumsum", Fcumsum, Scumsum, 10,
523
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
263 "cumsum (X): cumulative sums")
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
264 {
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
265 Octave_object retval;
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
266
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
267 int nargin = args.length ();
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
268
760
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
269 if (nargin == 1)
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
270 {
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
271 tree_constant arg = args(0);
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
272
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
273 if (arg.is_real_type ())
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
274 {
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
275 Matrix tmp = arg.matrix_value ();
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
276
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
277 if (! error_state)
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
278 retval(0) = tmp.cumsum ();
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
279 }
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
280 else if (arg.is_complex_type ())
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
281 {
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
282 ComplexMatrix tmp = arg.complex_matrix_value ();
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
283
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
284 if (! error_state)
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
285 retval(0) = tmp.cumsum ();
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
286 }
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
287 else
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
288 {
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
289 gripe_wrong_type_arg ("cumsum", arg);
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
290 return retval;
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
291 }
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
292 }
712
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 649
diff changeset
293 else
523
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
294 print_usage ("cumsum");
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
295
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
296 return retval;
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
297 }
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
298
767
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
299 static tree_constant
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
300 make_diag (const Matrix& v, int k)
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
301 {
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
302 int nr = v.rows ();
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
303 int nc = v.columns ();
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
304 assert (nc == 1 || nr == 1);
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
305
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
306 tree_constant retval;
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
307
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
308 int roff = 0;
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
309 int coff = 0;
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
310 if (k > 0)
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
311 {
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
312 roff = 0;
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
313 coff = k;
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
314 }
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
315 else if (k < 0)
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
316 {
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
317 roff = -k;
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
318 coff = 0;
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
319 }
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
320
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
321 if (nr == 1)
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
322 {
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
323 int n = nc + ABS (k);
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
324 Matrix m (n, n, 0.0);
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
325 for (int i = 0; i < nc; i++)
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
326 m.elem (i+roff, i+coff) = v.elem (0, i);
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
327 retval = tree_constant (m);
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
328 }
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
329 else
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
330 {
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
331 int n = nr + ABS (k);
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
332 Matrix m (n, n, 0.0);
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
333 for (int i = 0; i < nr; i++)
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
334 m.elem (i+roff, i+coff) = v.elem (i, 0);
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
335 retval = tree_constant (m);
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
336 }
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
337
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
338 return retval;
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
339 }
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
340
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
341 static tree_constant
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
342 make_diag (const ComplexMatrix& v, int k)
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
343 {
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
344 int nr = v.rows ();
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
345 int nc = v.columns ();
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
346 assert (nc == 1 || nr == 1);
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
347
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
348 tree_constant retval;
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
349
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
350 int roff = 0;
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
351 int coff = 0;
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
352 if (k > 0)
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
353 {
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
354 roff = 0;
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
355 coff = k;
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
356 }
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
357 else if (k < 0)
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
358 {
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
359 roff = -k;
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
360 coff = 0;
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
361 }
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
362
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
363 if (nr == 1)
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
364 {
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
365 int n = nc + ABS (k);
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
366 ComplexMatrix m (n, n, 0.0);
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
367 for (int i = 0; i < nc; i++)
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
368 m.elem (i+roff, i+coff) = v.elem (0, i);
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
369 retval = tree_constant (m);
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
370 }
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
371 else
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
372 {
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
373 int n = nr + ABS (k);
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
374 ComplexMatrix m (n, n, 0.0);
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
375 for (int i = 0; i < nr; i++)
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
376 m.elem (i+roff, i+coff) = v.elem (i, 0);
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
377 retval = tree_constant (m);
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
378 }
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
379
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
380 return retval;
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
381 }
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
382
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
383 static tree_constant
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
384 make_diag (const tree_constant& arg)
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
385 {
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
386 tree_constant retval;
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
387
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
388 if (arg.is_real_type ())
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
389 {
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
390 Matrix m = arg.matrix_value ();
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
391
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
392 if (! error_state)
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
393 {
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
394 int nr = m.rows ();
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
395 int nc = m.columns ();
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
396
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
397 if (nr == 0 || nc == 0)
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
398 retval = Matrix ();
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
399 else if (nr == 1 || nc == 1)
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
400 retval = make_diag (m, 0);
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
401 else
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
402 {
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
403 ColumnVector v = m.diag ();
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
404 if (v.capacity () > 0)
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
405 retval = v;
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
406 }
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
407 }
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
408 else
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
409 gripe_wrong_type_arg ("diag", arg);
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
410 }
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
411 else if (arg.is_complex_type ())
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
412 {
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
413 ComplexMatrix cm = arg.complex_matrix_value ();
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
414
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
415 if (! error_state)
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
416 {
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
417 int nr = cm.rows ();
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
418 int nc = cm.columns ();
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
419
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
420 if (nr == 0 || nc == 0)
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
421 retval = Matrix ();
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
422 else if (nr == 1 || nc == 1)
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
423 retval = make_diag (cm, 0);
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
424 else
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
425 {
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
426 ComplexColumnVector v = cm.diag ();
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
427 if (v.capacity () > 0)
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
428 retval = v;
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
429 }
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
430 }
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
431 else
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
432 gripe_wrong_type_arg ("diag", arg);
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
433 }
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
434 else
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
435 gripe_wrong_type_arg ("diag", arg);
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
436
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
437 return retval;
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
438 }
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
439
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
440 static tree_constant
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
441 make_diag (const tree_constant& a, const tree_constant& b)
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
442 {
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
443 tree_constant retval;
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
444
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
445 double tmp = b.double_value ();
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
446
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
447 if (error_state)
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
448 {
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
449 error ("diag: invalid second argument");
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
450 return retval;
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
451 }
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
452
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
453 int k = NINT (tmp);
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
454 int n = ABS (k) + 1;
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
455
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
456 if (a.is_real_type ())
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
457 {
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
458 if (a.is_scalar_type ())
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
459 {
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
460 double d = a.double_value ();
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
461
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
462 if (k == 0)
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
463 retval = d;
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
464 else if (k > 0)
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
465 {
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
466 Matrix m (n, n, 0.0);
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
467 m.elem (0, k) = d;
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
468 retval = m;
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
469 }
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
470 else if (k < 0)
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
471 {
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
472 Matrix m (n, n, 0.0);
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
473 m.elem (-k, 0) = d;
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
474 retval = m;
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
475 }
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
476 }
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
477 else if (a.is_matrix_type ())
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
478 {
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
479 Matrix m = a.matrix_value ();
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
480
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
481 int nr = m.rows ();
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
482 int nc = m.columns ();
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
483
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
484 if (nr == 0 || nc == 0)
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
485 retval = Matrix ();
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
486 else if (nr == 1 || nc == 1)
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
487 retval = make_diag (m, k);
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
488 else
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
489 {
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
490 ColumnVector d = m.diag (k);
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
491 retval = d;
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
492 }
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
493 }
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
494 else
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
495 gripe_wrong_type_arg ("diag", a);
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
496 }
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
497 else if (a.is_complex_type ())
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
498 {
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
499 if (a.is_scalar_type ())
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
500 {
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
501 Complex c = a.complex_value ();
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
502
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
503 if (k == 0)
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
504 retval = c;
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
505 else if (k > 0)
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
506 {
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
507 ComplexMatrix m (n, n, 0.0);
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
508 m.elem (0, k) = c;
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
509 retval = m;
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
510 }
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
511 else if (k < 0)
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
512 {
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
513 ComplexMatrix m (n, n, 0.0);
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
514 m.elem (-k, 0) = c;
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
515 retval = m;
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
516 }
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
517 }
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
518 else if (a.is_matrix_type ())
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
519 {
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
520 ComplexMatrix cm = a.complex_matrix_value ();
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
521
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
522 int nr = cm.rows ();
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
523 int nc = cm.columns ();
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
524
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
525 if (nr == 0 || nc == 0)
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
526 retval = Matrix ();
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
527 else if (nr == 1 || nc == 1)
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
528 retval = make_diag (cm, k);
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
529 else
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
530 {
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
531 ComplexColumnVector d = cm.diag (k);
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
532 retval = d;
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
533 }
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
534 }
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
535 else
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
536 gripe_wrong_type_arg ("diag", a);
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
537 }
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
538 else
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
539 gripe_wrong_type_arg ("diag", a);
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
540
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
541 return retval;
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
542 }
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
543
1488
89c587478067 [project @ 1995-09-26 22:49:48 by jwe]
jwe
parents: 1402
diff changeset
544 DEFUN ("diag", Fdiag, Sdiag, 10,
523
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
545 "diag (X [,k]): form/extract diagonals")
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
546 {
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
547 Octave_object retval;
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
548
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
549 int nargin = args.length ();
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
550
712
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 649
diff changeset
551 if (nargin == 1 && args(0).is_defined ())
767
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
552 retval = make_diag (args(0));
712
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 649
diff changeset
553 else if (nargin == 2 && args(0).is_defined () && args(1).is_defined ())
767
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 760
diff changeset
554 retval = make_diag (args(0), args(1));
523
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
555 else
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
556 print_usage ("diag");
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
557
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
558 return retval;
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
559 }
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
560
1488
89c587478067 [project @ 1995-09-26 22:49:48 by jwe]
jwe
parents: 1402
diff changeset
561 DEFUN ("prod", Fprod, Sprod, 10,
523
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
562 "prod (X): products")
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
563 {
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
564 Octave_object retval;
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
565
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
566 int nargin = args.length ();
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
567
760
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
568 if (nargin == 1)
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
569 {
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
570 tree_constant arg = args(0);
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
571
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
572 if (arg.is_real_type ())
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
573 {
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
574 Matrix tmp = arg.matrix_value ();
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
575
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
576 if (! error_state)
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
577 retval(0) = tmp.prod ();
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
578 }
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
579 else if (arg.is_complex_type ())
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
580 {
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
581 ComplexMatrix tmp = arg.complex_matrix_value ();
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
582
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
583 if (! error_state)
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
584 retval(0) = tmp.prod ();
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
585 }
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
586 else
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
587 {
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
588 gripe_wrong_type_arg ("prod", arg);
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
589 return retval;
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
590 }
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
591 }
712
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 649
diff changeset
592 else
523
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
593 print_usage ("prod");
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
594
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
595 return retval;
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
596 }
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
597
1488
89c587478067 [project @ 1995-09-26 22:49:48 by jwe]
jwe
parents: 1402
diff changeset
598 DEFUN ("size", Fsize, Ssize, 11,
1032
eb788d2f49c2 [project @ 1995-01-15 21:32:23 by jwe]
jwe
parents: 1031
diff changeset
599 "[m, n] = size (x): return rows and columns of X\n\
1031
59f5eb2d5eb3 [project @ 1995-01-15 21:11:11 by jwe]
jwe
parents: 1009
diff changeset
600 \n\
59f5eb2d5eb3 [project @ 1995-01-15 21:11:11 by jwe]
jwe
parents: 1009
diff changeset
601 d = size (x): return number of rows and columns of x as a row vector\n\
59f5eb2d5eb3 [project @ 1995-01-15 21:11:11 by jwe]
jwe
parents: 1009
diff changeset
602 \n\
59f5eb2d5eb3 [project @ 1995-01-15 21:11:11 by jwe]
jwe
parents: 1009
diff changeset
603 m = size (x, 1): return number of rows in x\n\
59f5eb2d5eb3 [project @ 1995-01-15 21:11:11 by jwe]
jwe
parents: 1009
diff changeset
604 m = size (x, 2): return number of columns in x")
523
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
605 {
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
606 Octave_object retval;
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
607
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
608 int nargin = args.length ();
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
609
1031
59f5eb2d5eb3 [project @ 1995-01-15 21:11:11 by jwe]
jwe
parents: 1009
diff changeset
610 if (nargin == 1 && nargout < 3)
523
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
611 {
712
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 649
diff changeset
612 int nr = args(0).rows ();
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 649
diff changeset
613 int nc = args(0).columns ();
1031
59f5eb2d5eb3 [project @ 1995-01-15 21:11:11 by jwe]
jwe
parents: 1009
diff changeset
614
712
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 649
diff changeset
615 if (nargout == 0 || nargout == 1)
523
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
616 {
712
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 649
diff changeset
617 Matrix m (1, 2);
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 649
diff changeset
618 m.elem (0, 0) = nr;
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 649
diff changeset
619 m.elem (0, 1) = nc;
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 649
diff changeset
620 retval = m;
523
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
621 }
712
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 649
diff changeset
622 else if (nargout == 2)
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 649
diff changeset
623 {
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 649
diff changeset
624 retval(1) = (double) nc;
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 649
diff changeset
625 retval(0) = (double) nr;
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 649
diff changeset
626 }
1031
59f5eb2d5eb3 [project @ 1995-01-15 21:11:11 by jwe]
jwe
parents: 1009
diff changeset
627 }
59f5eb2d5eb3 [project @ 1995-01-15 21:11:11 by jwe]
jwe
parents: 1009
diff changeset
628 else if (nargin == 2 && nargout < 2)
59f5eb2d5eb3 [project @ 1995-01-15 21:11:11 by jwe]
jwe
parents: 1009
diff changeset
629 {
59f5eb2d5eb3 [project @ 1995-01-15 21:11:11 by jwe]
jwe
parents: 1009
diff changeset
630 int nd = NINT (args(1).double_value ());
59f5eb2d5eb3 [project @ 1995-01-15 21:11:11 by jwe]
jwe
parents: 1009
diff changeset
631
59f5eb2d5eb3 [project @ 1995-01-15 21:11:11 by jwe]
jwe
parents: 1009
diff changeset
632 if (error_state)
59f5eb2d5eb3 [project @ 1995-01-15 21:11:11 by jwe]
jwe
parents: 1009
diff changeset
633 error ("size: expecting scalar as second argument");
712
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 649
diff changeset
634 else
1031
59f5eb2d5eb3 [project @ 1995-01-15 21:11:11 by jwe]
jwe
parents: 1009
diff changeset
635 {
59f5eb2d5eb3 [project @ 1995-01-15 21:11:11 by jwe]
jwe
parents: 1009
diff changeset
636 if (nd == 1)
59f5eb2d5eb3 [project @ 1995-01-15 21:11:11 by jwe]
jwe
parents: 1009
diff changeset
637 retval(0) = (double) (args(0).rows ());
59f5eb2d5eb3 [project @ 1995-01-15 21:11:11 by jwe]
jwe
parents: 1009
diff changeset
638 else if (nd == 2)
59f5eb2d5eb3 [project @ 1995-01-15 21:11:11 by jwe]
jwe
parents: 1009
diff changeset
639 retval(0) = (double) (args(0).columns ());
59f5eb2d5eb3 [project @ 1995-01-15 21:11:11 by jwe]
jwe
parents: 1009
diff changeset
640 else
59f5eb2d5eb3 [project @ 1995-01-15 21:11:11 by jwe]
jwe
parents: 1009
diff changeset
641 error ("size: invalid second argument -- expecting 1 or 2");
59f5eb2d5eb3 [project @ 1995-01-15 21:11:11 by jwe]
jwe
parents: 1009
diff changeset
642 }
523
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
643 }
712
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 649
diff changeset
644 else
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 649
diff changeset
645 print_usage ("size");
523
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
646
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
647 return retval;
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
648 }
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
649
1488
89c587478067 [project @ 1995-09-26 22:49:48 by jwe]
jwe
parents: 1402
diff changeset
650 DEFUN ("sum", Fsum, Ssum, 10,
523
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
651 "sum (X): sum of elements")
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
652 {
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
653 Octave_object retval;
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
654
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
655 int nargin = args.length ();
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
656
760
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
657 if (nargin == 1)
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
658 {
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
659 tree_constant arg = args(0);
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
660
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
661 if (arg.is_real_type ())
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
662 {
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
663 Matrix tmp = arg.matrix_value ();
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
664
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
665 if (! error_state)
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
666 retval(0) = tmp.sum ();
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
667 }
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
668 else if (arg.is_complex_type ())
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
669 {
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
670 ComplexMatrix tmp = arg.complex_matrix_value ();
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
671
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
672 if (! error_state)
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
673 retval(0) = tmp.sum ();
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
674 }
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
675 else
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
676 {
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
677 gripe_wrong_type_arg ("sum", arg);
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
678 return retval;
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
679 }
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
680 }
523
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
681 else
712
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 649
diff changeset
682 print_usage ("sum");
523
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
683
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
684 return retval;
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
685 }
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
686
1488
89c587478067 [project @ 1995-09-26 22:49:48 by jwe]
jwe
parents: 1402
diff changeset
687 DEFUN ("sumsq", Fsumsq, Ssumsq, 10,
523
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
688 "sumsq (X): sum of squares of elements")
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
689 {
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
690 Octave_object retval;
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
691
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
692 int nargin = args.length ();
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
693
760
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
694 if (nargin == 1)
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
695 {
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
696 tree_constant arg = args(0);
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
697
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
698 if (arg.is_real_type ())
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
699 {
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
700 Matrix tmp = arg.matrix_value ();
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
701
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
702 if (! error_state)
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
703 retval(0) = tmp.sumsq ();
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
704 }
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
705 else if (arg.is_complex_type ())
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
706 {
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
707 ComplexMatrix tmp = arg.complex_matrix_value ();
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
708
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
709 if (! error_state)
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
710 retval(0) = tmp.sumsq ();
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
711 }
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
712 else
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
713 {
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
714 gripe_wrong_type_arg ("sumsq", arg);
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
715 return retval;
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
716 }
b284388e8999 [project @ 1994-10-02 16:22:35 by jwe]
jwe
parents: 719
diff changeset
717 }
712
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 649
diff changeset
718 else
523
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
719 print_usage ("sumsq");
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
720
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
721 return retval;
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
722 }
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
723
1488
89c587478067 [project @ 1995-09-26 22:49:48 by jwe]
jwe
parents: 1402
diff changeset
724 DEFUN ("is_struct", Fis_struct, Sis_struct, 10,
939
5d609adc8c28 [project @ 1994-11-18 23:26:29 by jwe]
jwe
parents: 806
diff changeset
725 "is_struct (x): return nonzero if x is a structure")
5d609adc8c28 [project @ 1994-11-18 23:26:29 by jwe]
jwe
parents: 806
diff changeset
726 {
5d609adc8c28 [project @ 1994-11-18 23:26:29 by jwe]
jwe
parents: 806
diff changeset
727 Octave_object retval;
5d609adc8c28 [project @ 1994-11-18 23:26:29 by jwe]
jwe
parents: 806
diff changeset
728
5d609adc8c28 [project @ 1994-11-18 23:26:29 by jwe]
jwe
parents: 806
diff changeset
729 int nargin = args.length ();
5d609adc8c28 [project @ 1994-11-18 23:26:29 by jwe]
jwe
parents: 806
diff changeset
730
5d609adc8c28 [project @ 1994-11-18 23:26:29 by jwe]
jwe
parents: 806
diff changeset
731 if (nargin == 1)
5d609adc8c28 [project @ 1994-11-18 23:26:29 by jwe]
jwe
parents: 806
diff changeset
732 {
5d609adc8c28 [project @ 1994-11-18 23:26:29 by jwe]
jwe
parents: 806
diff changeset
733 tree_constant arg = args(0);
5d609adc8c28 [project @ 1994-11-18 23:26:29 by jwe]
jwe
parents: 806
diff changeset
734
5d609adc8c28 [project @ 1994-11-18 23:26:29 by jwe]
jwe
parents: 806
diff changeset
735 if (arg.is_map ())
5d609adc8c28 [project @ 1994-11-18 23:26:29 by jwe]
jwe
parents: 806
diff changeset
736 retval = 1.0;
5d609adc8c28 [project @ 1994-11-18 23:26:29 by jwe]
jwe
parents: 806
diff changeset
737 else
5d609adc8c28 [project @ 1994-11-18 23:26:29 by jwe]
jwe
parents: 806
diff changeset
738 retval = 0.0;
5d609adc8c28 [project @ 1994-11-18 23:26:29 by jwe]
jwe
parents: 806
diff changeset
739 }
5d609adc8c28 [project @ 1994-11-18 23:26:29 by jwe]
jwe
parents: 806
diff changeset
740 else
5d609adc8c28 [project @ 1994-11-18 23:26:29 by jwe]
jwe
parents: 806
diff changeset
741 print_usage ("is_struct");
5d609adc8c28 [project @ 1994-11-18 23:26:29 by jwe]
jwe
parents: 806
diff changeset
742
5d609adc8c28 [project @ 1994-11-18 23:26:29 by jwe]
jwe
parents: 806
diff changeset
743 return retval;
5d609adc8c28 [project @ 1994-11-18 23:26:29 by jwe]
jwe
parents: 806
diff changeset
744 }
5d609adc8c28 [project @ 1994-11-18 23:26:29 by jwe]
jwe
parents: 806
diff changeset
745
1488
89c587478067 [project @ 1995-09-26 22:49:48 by jwe]
jwe
parents: 1402
diff changeset
746 DEFUN ("struct_elements", Fstruct_elements, Sstruct_elements, 10,
1402
6550c74777b9 [project @ 1995-09-15 04:27:57 by jwe]
jwe
parents: 1363
diff changeset
747 "struct_elements (S)\n\
6550c74777b9 [project @ 1995-09-15 04:27:57 by jwe]
jwe
parents: 1363
diff changeset
748 \n\
6550c74777b9 [project @ 1995-09-15 04:27:57 by jwe]
jwe
parents: 1363
diff changeset
749 Return a list of the names of the elements of the structure S.")
6550c74777b9 [project @ 1995-09-15 04:27:57 by jwe]
jwe
parents: 1363
diff changeset
750 {
6550c74777b9 [project @ 1995-09-15 04:27:57 by jwe]
jwe
parents: 1363
diff changeset
751 Octave_object retval;
6550c74777b9 [project @ 1995-09-15 04:27:57 by jwe]
jwe
parents: 1363
diff changeset
752
6550c74777b9 [project @ 1995-09-15 04:27:57 by jwe]
jwe
parents: 1363
diff changeset
753 int nargin = args.length ();
6550c74777b9 [project @ 1995-09-15 04:27:57 by jwe]
jwe
parents: 1363
diff changeset
754
6550c74777b9 [project @ 1995-09-15 04:27:57 by jwe]
jwe
parents: 1363
diff changeset
755 if (nargin == 1)
6550c74777b9 [project @ 1995-09-15 04:27:57 by jwe]
jwe
parents: 1363
diff changeset
756 {
6550c74777b9 [project @ 1995-09-15 04:27:57 by jwe]
jwe
parents: 1363
diff changeset
757 if (args (0).is_map ())
6550c74777b9 [project @ 1995-09-15 04:27:57 by jwe]
jwe
parents: 1363
diff changeset
758 {
6550c74777b9 [project @ 1995-09-15 04:27:57 by jwe]
jwe
parents: 1363
diff changeset
759 Octave_map m = args(0).map_value ();
6550c74777b9 [project @ 1995-09-15 04:27:57 by jwe]
jwe
parents: 1363
diff changeset
760 char **names = m.make_name_list ();
1572
0d9e10d10bd7 [project @ 1995-10-19 04:31:30 by jwe]
jwe
parents: 1488
diff changeset
761
1402
6550c74777b9 [project @ 1995-09-15 04:27:57 by jwe]
jwe
parents: 1363
diff changeset
762 char **ptr = names;
1572
0d9e10d10bd7 [project @ 1995-10-19 04:31:30 by jwe]
jwe
parents: 1488
diff changeset
763 int max_len = 0;
0d9e10d10bd7 [project @ 1995-10-19 04:31:30 by jwe]
jwe
parents: 1488
diff changeset
764 while (*ptr)
0d9e10d10bd7 [project @ 1995-10-19 04:31:30 by jwe]
jwe
parents: 1488
diff changeset
765 {
0d9e10d10bd7 [project @ 1995-10-19 04:31:30 by jwe]
jwe
parents: 1488
diff changeset
766 int len = strlen (*ptr);
0d9e10d10bd7 [project @ 1995-10-19 04:31:30 by jwe]
jwe
parents: 1488
diff changeset
767 if (len > max_len)
0d9e10d10bd7 [project @ 1995-10-19 04:31:30 by jwe]
jwe
parents: 1488
diff changeset
768 max_len = len;
0d9e10d10bd7 [project @ 1995-10-19 04:31:30 by jwe]
jwe
parents: 1488
diff changeset
769 ptr++;
0d9e10d10bd7 [project @ 1995-10-19 04:31:30 by jwe]
jwe
parents: 1488
diff changeset
770 }
0d9e10d10bd7 [project @ 1995-10-19 04:31:30 by jwe]
jwe
parents: 1488
diff changeset
771
0d9e10d10bd7 [project @ 1995-10-19 04:31:30 by jwe]
jwe
parents: 1488
diff changeset
772 charMatrix list (m.length (), max_len);
0d9e10d10bd7 [project @ 1995-10-19 04:31:30 by jwe]
jwe
parents: 1488
diff changeset
773
0d9e10d10bd7 [project @ 1995-10-19 04:31:30 by jwe]
jwe
parents: 1488
diff changeset
774 ptr = names;
1402
6550c74777b9 [project @ 1995-09-15 04:27:57 by jwe]
jwe
parents: 1363
diff changeset
775 int i = 0;
6550c74777b9 [project @ 1995-09-15 04:27:57 by jwe]
jwe
parents: 1363
diff changeset
776 while (*ptr)
6550c74777b9 [project @ 1995-09-15 04:27:57 by jwe]
jwe
parents: 1363
diff changeset
777 {
1572
0d9e10d10bd7 [project @ 1995-10-19 04:31:30 by jwe]
jwe
parents: 1488
diff changeset
778 list.insert (*ptr, i++, 0);
1402
6550c74777b9 [project @ 1995-09-15 04:27:57 by jwe]
jwe
parents: 1363
diff changeset
779 delete [] *ptr++;
6550c74777b9 [project @ 1995-09-15 04:27:57 by jwe]
jwe
parents: 1363
diff changeset
780 }
1572
0d9e10d10bd7 [project @ 1995-10-19 04:31:30 by jwe]
jwe
parents: 1488
diff changeset
781
1402
6550c74777b9 [project @ 1995-09-15 04:27:57 by jwe]
jwe
parents: 1363
diff changeset
782 delete [] names;
1572
0d9e10d10bd7 [project @ 1995-10-19 04:31:30 by jwe]
jwe
parents: 1488
diff changeset
783
1402
6550c74777b9 [project @ 1995-09-15 04:27:57 by jwe]
jwe
parents: 1363
diff changeset
784 retval(0) = list;
6550c74777b9 [project @ 1995-09-15 04:27:57 by jwe]
jwe
parents: 1363
diff changeset
785 }
6550c74777b9 [project @ 1995-09-15 04:27:57 by jwe]
jwe
parents: 1363
diff changeset
786 else
6550c74777b9 [project @ 1995-09-15 04:27:57 by jwe]
jwe
parents: 1363
diff changeset
787 gripe_wrong_type_arg ("struct_elements", args (0));
6550c74777b9 [project @ 1995-09-15 04:27:57 by jwe]
jwe
parents: 1363
diff changeset
788 }
6550c74777b9 [project @ 1995-09-15 04:27:57 by jwe]
jwe
parents: 1363
diff changeset
789 else
6550c74777b9 [project @ 1995-09-15 04:27:57 by jwe]
jwe
parents: 1363
diff changeset
790 print_usage ("struct_elements");
6550c74777b9 [project @ 1995-09-15 04:27:57 by jwe]
jwe
parents: 1363
diff changeset
791
6550c74777b9 [project @ 1995-09-15 04:27:57 by jwe]
jwe
parents: 1363
diff changeset
792 return retval;
6550c74777b9 [project @ 1995-09-15 04:27:57 by jwe]
jwe
parents: 1363
diff changeset
793 }
6550c74777b9 [project @ 1995-09-15 04:27:57 by jwe]
jwe
parents: 1363
diff changeset
794
1488
89c587478067 [project @ 1995-09-26 22:49:48 by jwe]
jwe
parents: 1402
diff changeset
795 DEFUN ("struct_contains", Fstruct_contains, Sstruct_contains, 10,
1216
0ffb52e268d7 [project @ 1995-04-07 00:34:39 by jwe]
jwe
parents: 1192
diff changeset
796 "struct_contains (S, NAME)\n\
0ffb52e268d7 [project @ 1995-04-07 00:34:39 by jwe]
jwe
parents: 1192
diff changeset
797 \n\
0ffb52e268d7 [project @ 1995-04-07 00:34:39 by jwe]
jwe
parents: 1192
diff changeset
798 return nonzero if S is a structure with element NAME")
0ffb52e268d7 [project @ 1995-04-07 00:34:39 by jwe]
jwe
parents: 1192
diff changeset
799 {
0ffb52e268d7 [project @ 1995-04-07 00:34:39 by jwe]
jwe
parents: 1192
diff changeset
800 Octave_object retval;
0ffb52e268d7 [project @ 1995-04-07 00:34:39 by jwe]
jwe
parents: 1192
diff changeset
801
0ffb52e268d7 [project @ 1995-04-07 00:34:39 by jwe]
jwe
parents: 1192
diff changeset
802 int nargin = args.length ();
0ffb52e268d7 [project @ 1995-04-07 00:34:39 by jwe]
jwe
parents: 1192
diff changeset
803
0ffb52e268d7 [project @ 1995-04-07 00:34:39 by jwe]
jwe
parents: 1192
diff changeset
804 if (nargin == 2)
0ffb52e268d7 [project @ 1995-04-07 00:34:39 by jwe]
jwe
parents: 1192
diff changeset
805 {
0ffb52e268d7 [project @ 1995-04-07 00:34:39 by jwe]
jwe
parents: 1192
diff changeset
806 retval = 0.0;
1277
db4f4009d6e8 [project @ 1995-04-24 20:35:06 by jwe]
jwe
parents: 1216
diff changeset
807 if (args(0).is_map () && args(1).is_string ())
1216
0ffb52e268d7 [project @ 1995-04-07 00:34:39 by jwe]
jwe
parents: 1192
diff changeset
808 {
1728
42b4f904f1af [project @ 1996-01-09 11:36:01 by jwe]
jwe
parents: 1572
diff changeset
809 string tstr = args(1).string_value ();
42b4f904f1af [project @ 1996-01-09 11:36:01 by jwe]
jwe
parents: 1572
diff changeset
810 const char *s = tstr.c_str ();
1277
db4f4009d6e8 [project @ 1995-04-24 20:35:06 by jwe]
jwe
parents: 1216
diff changeset
811 tree_constant tmp = args(0).lookup_map_element (s, 0, 1);
db4f4009d6e8 [project @ 1995-04-24 20:35:06 by jwe]
jwe
parents: 1216
diff changeset
812 retval = (double) tmp.is_defined ();
1216
0ffb52e268d7 [project @ 1995-04-07 00:34:39 by jwe]
jwe
parents: 1192
diff changeset
813 }
0ffb52e268d7 [project @ 1995-04-07 00:34:39 by jwe]
jwe
parents: 1192
diff changeset
814 }
0ffb52e268d7 [project @ 1995-04-07 00:34:39 by jwe]
jwe
parents: 1192
diff changeset
815 else
0ffb52e268d7 [project @ 1995-04-07 00:34:39 by jwe]
jwe
parents: 1192
diff changeset
816 print_usage ("struct_contains");
0ffb52e268d7 [project @ 1995-04-07 00:34:39 by jwe]
jwe
parents: 1192
diff changeset
817
0ffb52e268d7 [project @ 1995-04-07 00:34:39 by jwe]
jwe
parents: 1192
diff changeset
818 return retval;
0ffb52e268d7 [project @ 1995-04-07 00:34:39 by jwe]
jwe
parents: 1192
diff changeset
819 }
0ffb52e268d7 [project @ 1995-04-07 00:34:39 by jwe]
jwe
parents: 1192
diff changeset
820
523
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
821 static void
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
822 check_dimensions (int& nr, int& nc, const char *warnfor)
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
823 {
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
824 if (nr < 0 || nc < 0)
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
825 {
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
826 if (user_pref.treat_neg_dim_as_zero)
597
205b8c2ef749 [project @ 1994-08-09 19:31:39 by jwe]
jwe
parents: 565
diff changeset
827 {
205b8c2ef749 [project @ 1994-08-09 19:31:39 by jwe]
jwe
parents: 565
diff changeset
828 nr = (nr < 0) ? 0 : nr;
205b8c2ef749 [project @ 1994-08-09 19:31:39 by jwe]
jwe
parents: 565
diff changeset
829 nc = (nc < 0) ? 0 : nc;
1129
32fbe094cc10 [project @ 1995-02-22 13:29:03 by jwe]
jwe
parents: 1100
diff changeset
830
32fbe094cc10 [project @ 1995-02-22 13:29:03 by jwe]
jwe
parents: 1100
diff changeset
831 if (user_pref.treat_neg_dim_as_zero < 0)
32fbe094cc10 [project @ 1995-02-22 13:29:03 by jwe]
jwe
parents: 1100
diff changeset
832 warning ("%s: converting negative dimension to zero",
32fbe094cc10 [project @ 1995-02-22 13:29:03 by jwe]
jwe
parents: 1100
diff changeset
833 warnfor);
597
205b8c2ef749 [project @ 1994-08-09 19:31:39 by jwe]
jwe
parents: 565
diff changeset
834 }
523
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
835 else
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
836 error ("%s: can't create a matrix with negative dimensions",
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
837 warnfor);
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
838 }
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
839 }
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
840
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
841 static void
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
842 get_dimensions (const tree_constant& a, const char *warn_for,
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
843 int& nr, int& nc)
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
844 {
634
e04527366917 [project @ 1994-08-22 23:44:52 by jwe]
jwe
parents: 633
diff changeset
845 if (a.is_scalar_type ())
523
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
846 {
634
e04527366917 [project @ 1994-08-22 23:44:52 by jwe]
jwe
parents: 633
diff changeset
847 double tmp = a.double_value ();
523
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
848 nr = nc = NINT (tmp);
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
849 }
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
850 else
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
851 {
634
e04527366917 [project @ 1994-08-22 23:44:52 by jwe]
jwe
parents: 633
diff changeset
852 nr = a.rows ();
e04527366917 [project @ 1994-08-22 23:44:52 by jwe]
jwe
parents: 633
diff changeset
853 nc = a.columns ();
523
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
854
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
855 if ((nr == 1 && nc == 2) || (nr == 2 && nc == 1))
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
856 {
634
e04527366917 [project @ 1994-08-22 23:44:52 by jwe]
jwe
parents: 633
diff changeset
857 ColumnVector v = a.vector_value ();
523
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
858
633
39b315350976 [project @ 1994-08-22 23:40:47 by jwe]
jwe
parents: 627
diff changeset
859 if (error_state)
39b315350976 [project @ 1994-08-22 23:40:47 by jwe]
jwe
parents: 627
diff changeset
860 return;
39b315350976 [project @ 1994-08-22 23:40:47 by jwe]
jwe
parents: 627
diff changeset
861
523
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
862 nr = NINT (v.elem (0));
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
863 nc = NINT (v.elem (1));
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
864 }
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
865 else
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
866 warning ("%s (A): use %s (size (A)) instead", warn_for, warn_for);
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
867 }
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
868
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
869 check_dimensions (nr, nc, warn_for); // May set error_state.
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
870 }
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
871
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
872 static void
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
873 get_dimensions (const tree_constant& a, const tree_constant& b,
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
874 const char *warn_for, int& nr, int& nc)
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
875 {
634
e04527366917 [project @ 1994-08-22 23:44:52 by jwe]
jwe
parents: 633
diff changeset
876 nr = NINT (a.double_value ());
e04527366917 [project @ 1994-08-22 23:44:52 by jwe]
jwe
parents: 633
diff changeset
877 nc = NINT (b.double_value ());
523
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
878
634
e04527366917 [project @ 1994-08-22 23:44:52 by jwe]
jwe
parents: 633
diff changeset
879 if (error_state)
e04527366917 [project @ 1994-08-22 23:44:52 by jwe]
jwe
parents: 633
diff changeset
880 error ("%s: expecting two scalar arguments", warn_for);
523
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
881 else
634
e04527366917 [project @ 1994-08-22 23:44:52 by jwe]
jwe
parents: 633
diff changeset
882 check_dimensions (nr, nc, warn_for); // May set error_state.
523
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
883 }
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
884
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
885 static tree_constant
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
886 fill_matrix (const tree_constant& a, double val, const char *warn_for)
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
887 {
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
888 int nr, nc;
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
889 get_dimensions (a, warn_for, nr, nc);
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
890
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
891 if (error_state)
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
892 return tree_constant ();
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
893
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
894 Matrix m (nr, nc, val);
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
895
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
896 return m;
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
897 }
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
898
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
899 static tree_constant
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
900 fill_matrix (const tree_constant& a, const tree_constant& b,
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
901 double val, const char *warn_for)
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
902 {
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
903 int nr, nc;
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
904 get_dimensions (a, b, warn_for, nr, nc); // May set error_state.
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
905
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
906 if (error_state)
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
907 return tree_constant ();
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
908
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
909 Matrix m (nr, nc, val);
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
910
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
911 return m;
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
912 }
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
913
1488
89c587478067 [project @ 1995-09-26 22:49:48 by jwe]
jwe
parents: 1402
diff changeset
914 DEFUN ("ones", Fones, Sones, 10,
523
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
915 "ones (N), ones (N, M), ones (X): create a matrix of all ones")
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
916 {
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
917 Octave_object retval;
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
918
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
919 int nargin = args.length ();
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
920
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
921 switch (nargin)
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
922 {
712
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 649
diff changeset
923 case 0:
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 649
diff changeset
924 retval = 1.0;
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 649
diff changeset
925 break;
777
a2f9d3fd720c [project @ 1994-10-07 14:01:53 by jwe]
jwe
parents: 767
diff changeset
926
610
14b2a186a5c0 [project @ 1994-08-14 00:55:49 by jwe]
jwe
parents: 597
diff changeset
927 case 1:
712
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 649
diff changeset
928 retval = fill_matrix (args(0), 1.0, "ones");
610
14b2a186a5c0 [project @ 1994-08-14 00:55:49 by jwe]
jwe
parents: 597
diff changeset
929 break;
777
a2f9d3fd720c [project @ 1994-10-07 14:01:53 by jwe]
jwe
parents: 767
diff changeset
930
523
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
931 case 2:
712
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 649
diff changeset
932 retval = fill_matrix (args(0), args(1), 1.0, "ones");
523
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
933 break;
777
a2f9d3fd720c [project @ 1994-10-07 14:01:53 by jwe]
jwe
parents: 767
diff changeset
934
523
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
935 default:
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
936 print_usage ("ones");
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
937 break;
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
938 }
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
939
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
940 return retval;
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
941 }
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
942
1488
89c587478067 [project @ 1995-09-26 22:49:48 by jwe]
jwe
parents: 1402
diff changeset
943 DEFUN ("zeros", Fzeros, Szeros, 10,
523
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
944 "zeros (N), zeros (N, M), zeros (X): create a matrix of all zeros")
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
945 {
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
946 Octave_object retval;
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
947
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
948 int nargin = args.length ();
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
949
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
950 switch (nargin)
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
951 {
712
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 649
diff changeset
952 case 0:
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 649
diff changeset
953 retval = 0.0;
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 649
diff changeset
954 break;
777
a2f9d3fd720c [project @ 1994-10-07 14:01:53 by jwe]
jwe
parents: 767
diff changeset
955
610
14b2a186a5c0 [project @ 1994-08-14 00:55:49 by jwe]
jwe
parents: 597
diff changeset
956 case 1:
712
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 649
diff changeset
957 retval = fill_matrix (args(0), 0.0, "zeros");
610
14b2a186a5c0 [project @ 1994-08-14 00:55:49 by jwe]
jwe
parents: 597
diff changeset
958 break;
777
a2f9d3fd720c [project @ 1994-10-07 14:01:53 by jwe]
jwe
parents: 767
diff changeset
959
523
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
960 case 2:
712
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 649
diff changeset
961 retval = fill_matrix (args(0), args(1), 0.0, "zeros");
523
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
962 break;
777
a2f9d3fd720c [project @ 1994-10-07 14:01:53 by jwe]
jwe
parents: 767
diff changeset
963
523
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
964 default:
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
965 print_usage ("zeros");
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
966 break;
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
967 }
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
968
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
969 return retval;
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
970 }
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
971
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
972 static tree_constant
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
973 identity_matrix (const tree_constant& a)
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
974 {
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
975 int nr, nc;
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
976 get_dimensions (a, "eye", nr, nc); // May set error_state.
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
977
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
978 if (error_state)
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
979 return tree_constant ();
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
980
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
981 Matrix m (nr, nc, 0.0);
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
982
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
983 if (nr > 0 && nc > 0)
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
984 {
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
985 int n = MIN (nr, nc);
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
986 for (int i = 0; i < n; i++)
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
987 m.elem (i, i) = 1.0;
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
988 }
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
989
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
990 return m;
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
991 }
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
992
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
993 static tree_constant
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
994 identity_matrix (const tree_constant& a, const tree_constant& b)
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
995 {
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
996 int nr, nc;
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
997 get_dimensions (a, b, "eye", nr, nc); // May set error_state.
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
998
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
999 if (error_state)
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
1000 return tree_constant ();
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
1001
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
1002 Matrix m (nr, nc, 0.0);
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
1003
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
1004 if (nr > 0 && nc > 0)
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
1005 {
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
1006 int n = MIN (nr, nc);
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
1007 for (int i = 0; i < n; i++)
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
1008 m.elem (i, i) = 1.0;
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
1009 }
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
1010
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
1011 return m;
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
1012 }
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
1013
1488
89c587478067 [project @ 1995-09-26 22:49:48 by jwe]
jwe
parents: 1402
diff changeset
1014 DEFUN ("eye", Feye, Seye, 10,
523
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
1015 "eye (N), eye (N, M), eye (X): create an identity matrix")
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
1016 {
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
1017 Octave_object retval;
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
1018
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
1019 int nargin = args.length ();
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
1020
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
1021 switch (nargin)
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
1022 {
712
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 649
diff changeset
1023 case 0:
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 649
diff changeset
1024 retval = 1.0;
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 649
diff changeset
1025 break;
777
a2f9d3fd720c [project @ 1994-10-07 14:01:53 by jwe]
jwe
parents: 767
diff changeset
1026
610
14b2a186a5c0 [project @ 1994-08-14 00:55:49 by jwe]
jwe
parents: 597
diff changeset
1027 case 1:
712
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 649
diff changeset
1028 retval = identity_matrix (args(0));
610
14b2a186a5c0 [project @ 1994-08-14 00:55:49 by jwe]
jwe
parents: 597
diff changeset
1029 break;
777
a2f9d3fd720c [project @ 1994-10-07 14:01:53 by jwe]
jwe
parents: 767
diff changeset
1030
523
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
1031 case 2:
712
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 649
diff changeset
1032 retval = identity_matrix (args(0), args(1));
523
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
1033 break;
777
a2f9d3fd720c [project @ 1994-10-07 14:01:53 by jwe]
jwe
parents: 767
diff changeset
1034
523
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
1035 default:
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
1036 print_usage ("eye");
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
1037 break;
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
1038 }
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
1039
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
1040 return retval;
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
1041 }
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
1042
1488
89c587478067 [project @ 1995-09-26 22:49:48 by jwe]
jwe
parents: 1402
diff changeset
1043 DEFUN ("linspace", Flinspace, Slinspace, 10,
1100
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1044 "usage: linspace (x1, x2, n)\n\
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1045 \n\
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1046 Return a vector of n equally spaced points between x1 and x2\n\
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1047 inclusive.\n\
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1048 \n\
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1049 If the final argument is omitted, n = 100 is assumed.\n\
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1050 \n\
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1051 All three arguments must be scalars.\n\
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1052 \n\
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1053 See also: logspace")
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1054 {
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1055 Octave_object retval;
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1056
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1057 int nargin = args.length ();
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1058
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1059 int npoints = 100;
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1060
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1061 if (nargin == 3)
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1062 {
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1063 double n = args(2).double_value ();
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1064
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1065 if (! error_state)
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1066 npoints = NINT (n);
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1067 }
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1068 else
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1069 print_usage ("linspace");
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1070
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1071 if (! error_state)
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1072 {
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1073 if (npoints > 1)
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1074 {
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1075 tree_constant arg_1 = args(0);
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1076 tree_constant arg_2 = args(1);
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1077
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1078 if (arg_1.is_complex_type () || arg_2.is_complex_type ())
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1079 {
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1080 Complex x1 = arg_1.complex_value ();
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1081 Complex x2 = arg_2.complex_value ();
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1082
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1083 if (! error_state)
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1084 {
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1085 ComplexRowVector rv = linspace (x1, x2, npoints);
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1086
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1087 if (! error_state)
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1088 retval (0) = tree_constant (rv, 0);
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1089 }
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1090 }
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1091 else
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1092 {
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1093 double x1 = arg_1.double_value ();
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1094 double x2 = arg_2.double_value ();
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1095
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1096 if (! error_state)
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1097 {
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1098 RowVector rv = linspace (x1, x2, npoints);
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1099
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1100 if (! error_state)
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1101 retval (0) = tree_constant (rv, 0);
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1102 }
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1103 }
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1104 }
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1105 else
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1106 error ("linspace: npoints must be greater than 2");
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1107 }
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1108
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1109 return retval;
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1110 }
3b6f6c5217e7 [project @ 1995-02-14 01:45:09 by jwe]
jwe
parents: 1032
diff changeset
1111
523
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
1112 /*
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
1113 ;;; Local Variables: ***
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
1114 ;;; mode: C++ ***
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
1115 ;;; page-delimiter: "^/\\*" ***
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
1116 ;;; End: ***
4a07f0083ab0 [project @ 1994-07-20 18:33:47 by jwe]
jwe
parents:
diff changeset
1117 */