annotate liboctave/DiagMatrix.cc @ 1701:ce16950b6b02

[project @ 1996-01-07 03:15:11 by jwe]
author jwe
date Sun, 07 Jan 1996 03:15:11 +0000
parents e04b38065c55
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1 // DiagMatrix manipulations. -*- C++ -*-
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
2 /*
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
3
378
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
4 Copyright (C) 1992, 1993, 1994 John W. Eaton
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
5
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
6 This file is part of Octave.
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
7
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
8 Octave is free software; you can redistribute it and/or modify it
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
9 under the terms of the GNU General Public License as published by the
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
10 Free Software Foundation; either version 2, or (at your option) any
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
11 later version.
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
12
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
13 Octave is distributed in the hope that it will be useful, but WITHOUT
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
16 for more details.
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
17
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
18 You should have received a copy of the GNU General Public License
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
19 along with Octave; see the file COPYING. If not, write to the Free
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
20 Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
21
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
22 */
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
23
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
24 #ifdef HAVE_CONFIG_H
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
25 #include "config.h"
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
26 #endif
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
27
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
28 #include <iostream.h>
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
29
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
30 #include "Matrix.h"
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
31 #include "mx-inlines.cc"
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
32 #include "lo-error.h"
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
33
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
34 /*
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
35 * Diagonal Matrix class.
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
36 */
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
37
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
38 #if 0
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
39 DiagMatrix&
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
40 DiagMatrix::resize (int r, int c)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
41 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
42 if (r < 0 || c < 0)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
43 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
44 (*current_liboctave_error_handler)
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
45 ("can't resize to negative dimensions");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
46 return *this;
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
47 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
48
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
49 int new_len = r < c ? r : c;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
50 double *new_data = (double *) NULL;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
51 if (new_len > 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
52 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
53 new_data = new double [new_len];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
54
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
55 int min_len = new_len < len ? new_len : len;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
56
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
57 for (int i = 0; i < min_len; i++)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
58 new_data[i] = data[i];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
59 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
60
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
61 delete [] data;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
62 nr = r;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
63 nc = c;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
64 len = new_len;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
65 data = new_data;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
66
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
67 return *this;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
68 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
69
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
70 DiagMatrix&
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
71 DiagMatrix::resize (int r, int c, double val)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
72 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
73 if (r < 0 || c < 0)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
74 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
75 (*current_liboctave_error_handler)
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
76 ("can't resize to negative dimensions");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
77 return *this;
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
78 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
79
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
80 int new_len = r < c ? r : c;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
81 double *new_data = (double *) NULL;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
82 if (new_len > 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
83 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
84 new_data = new double [new_len];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
85
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
86 int min_len = new_len < len ? new_len : len;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
87
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
88 for (int i = 0; i < min_len; i++)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
89 new_data[i] = data[i];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
90
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
91 for (i = min_len; i < new_len; i++)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
92 new_data[i] = val;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
93 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
94
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
95 delete [] data;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
96 nr = r;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
97 nc = c;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
98 len = new_len;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
99 data = new_data;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
100
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
101 return *this;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
102 }
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
103 #endif
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
104
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
105 int
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
106 DiagMatrix::operator == (const DiagMatrix& a) const
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
107 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
108 if (rows () != a.rows () || cols () != a.cols ())
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
109 return 0;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
110
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
111 return equal (data (), a.data (), length ());
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
112 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
113
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
114 int
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
115 DiagMatrix::operator != (const DiagMatrix& a) const
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
116 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
117 return !(*this == a);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
118 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
119
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
120 DiagMatrix&
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
121 DiagMatrix::fill (double val)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
122 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
123 for (int i = 0; i < length (); i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
124 elem (i, i) = val;
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
125 return *this;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
126 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
127
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
128 DiagMatrix&
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
129 DiagMatrix::fill (double val, int beg, int end)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
130 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
131 if (beg < 0 || end >= length () || end < beg)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
132 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
133 (*current_liboctave_error_handler) ("range error for fill");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
134 return *this;
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
135 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
136
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
137 for (int i = beg; i < end; i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
138 elem (i, i) = val;
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
139
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
140 return *this;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
141 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
142
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
143 DiagMatrix&
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
144 DiagMatrix::fill (const ColumnVector& a)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
145 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
146 int len = length ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
147 if (a.length () != len)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
148 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
149 (*current_liboctave_error_handler) ("range error for fill");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
150 return *this;
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
151 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
152
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
153 for (int i = 0; i < len; i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
154 elem (i, i) = a.elem (i);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
155
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
156 return *this;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
157 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
158
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
159 DiagMatrix&
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
160 DiagMatrix::fill (const RowVector& a)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
161 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
162 int len = length ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
163 if (a.length () != len)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
164 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
165 (*current_liboctave_error_handler) ("range error for fill");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
166 return *this;
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
167 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
168
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
169 for (int i = 0; i < len; i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
170 elem (i, i) = a.elem (i);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
171
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
172 return *this;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
173 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
174
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
175 DiagMatrix&
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
176 DiagMatrix::fill (const ColumnVector& a, int beg)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
177 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
178 int a_len = a.length ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
179 if (beg < 0 || beg + a_len >= length ())
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
180 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
181 (*current_liboctave_error_handler) ("range error for fill");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
182 return *this;
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
183 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
184
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
185 for (int i = 0; i < a_len; i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
186 elem (i+beg, i+beg) = a.elem (i);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
187
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
188 return *this;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
189 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
190
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
191 DiagMatrix&
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
192 DiagMatrix::fill (const RowVector& a, int beg)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
193 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
194 int a_len = a.length ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
195 if (beg < 0 || beg + a_len >= length ())
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
196 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
197 (*current_liboctave_error_handler) ("range error for fill");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
198 return *this;
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
199 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
200
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
201 for (int i = 0; i < a_len; i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
202 elem (i+beg, i+beg) = a.elem (i);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
203
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
204 return *this;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
205 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
206
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
207 DiagMatrix
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
208 DiagMatrix::transpose (void) const
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
209 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
210 return DiagMatrix (dup (data (), length ()), cols (), rows ());
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
211 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
212
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
213 Matrix
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
214 DiagMatrix::extract (int r1, int c1, int r2, int c2) const
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
215 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
216 if (r1 > r2) { int tmp = r1; r1 = r2; r2 = tmp; }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
217 if (c1 > c2) { int tmp = c1; c1 = c2; c2 = tmp; }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
218
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
219 int new_r = r2 - r1 + 1;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
220 int new_c = c2 - c1 + 1;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
221
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
222 Matrix result (new_r, new_c);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
223
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
224 for (int j = 0; j < new_c; j++)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
225 for (int i = 0; i < new_r; i++)
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
226 result.elem (i, j) = elem (r1+i, c1+j);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
227
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
228 return result;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
229 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
230
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
231 // extract row or column i.
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
232
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
233 RowVector
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
234 DiagMatrix::row (int i) const
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
235 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
236 int nr = rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
237 int nc = cols ();
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
238 if (i < 0 || i >= nr)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
239 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
240 (*current_liboctave_error_handler) ("invalid row selection");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
241 return RowVector ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
242 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
243
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
244 RowVector retval (nc, 0.0);
192
6259f4ed7285 [project @ 1993-11-01 21:06:27 by jwe]
jwe
parents: 161
diff changeset
245 if (nr <= nc || (nr > nc && i < nc))
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
246 retval.elem (i) = elem (i, i);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
247
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
248 return retval;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
249 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
250
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
251 RowVector
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
252 DiagMatrix::row (char *s) const
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
253 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
254 if (s == (char *) NULL)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
255 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
256 (*current_liboctave_error_handler) ("invalid row selection");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
257 return RowVector ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
258 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
259
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
260 char c = *s;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
261 if (c == 'f' || c == 'F')
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
262 return row (0);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
263 else if (c == 'l' || c == 'L')
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
264 return row (rows () - 1);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
265 else
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
266 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
267 (*current_liboctave_error_handler) ("invalid row selection");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
268 return RowVector ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
269 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
270 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
271
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
272 ColumnVector
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
273 DiagMatrix::column (int i) const
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
274 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
275 int nr = rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
276 int nc = cols ();
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
277 if (i < 0 || i >= nc)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
278 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
279 (*current_liboctave_error_handler) ("invalid column selection");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
280 return ColumnVector ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
281 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
282
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
283 ColumnVector retval (nr, 0.0);
192
6259f4ed7285 [project @ 1993-11-01 21:06:27 by jwe]
jwe
parents: 161
diff changeset
284 if (nr >= nc || (nr < nc && i < nr))
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
285 retval.elem (i) = elem (i, i);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
286
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
287 return retval;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
288 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
289
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
290 ColumnVector
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
291 DiagMatrix::column (char *s) const
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
292 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
293 if (s == (char *) NULL)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
294 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
295 (*current_liboctave_error_handler) ("invalid column selection");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
296 return ColumnVector ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
297 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
298
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
299 char c = *s;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
300 if (c == 'f' || c == 'F')
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
301 return column (0);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
302 else if (c == 'l' || c == 'L')
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
303 return column (cols () - 1);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
304 else
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
305 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
306 (*current_liboctave_error_handler) ("invalid column selection");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
307 return ColumnVector ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
308 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
309 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
310
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
311 DiagMatrix
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
312 DiagMatrix::inverse (void) const
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
313 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
314 int info;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
315 return inverse (info);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
316 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
317
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
318 DiagMatrix
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
319 DiagMatrix::inverse (int &info) const
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
320 {
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
321 int nr = rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
322 int nc = cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
323 int len = length ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
324 if (nr != nc)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
325 {
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
326 (*current_liboctave_error_handler) ("inverse requires square matrix");
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
327 return DiagMatrix ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
328 }
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
329
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
330 info = 0;
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
331 double *tmp_data = dup (data (), len);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
332 for (int i = 0; i < len; i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
333 {
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
334 if (elem (i, i) == 0.0)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
335 {
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
336 info = -1;
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
337 copy (tmp_data, data (), len); // Restore contents.
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
338 break;
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
339 }
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
340 else
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
341 {
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
342 tmp_data[i] = 1.0 / elem (i, i);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
343 }
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
344 }
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
345
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
346 return DiagMatrix (tmp_data, nr, nc);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
347 }
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
348
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
349 // diagonal matrix by diagonal matrix -> diagonal matrix operations
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
350
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
351 DiagMatrix&
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
352 DiagMatrix::operator += (const DiagMatrix& a)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
353 {
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
354 int nr = rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
355 int nc = cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
356 if (nr != a.rows () || nc != a.cols ())
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
357 {
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
358 (*current_liboctave_error_handler)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
359 ("nonconformant matrix += operation attempted");
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
360 return *this;
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
361 }
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
362
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
363 if (nc == 0 || nr == 0)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
364 return *this;
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
365
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
366 double *d = fortran_vec (); // Ensures only one reference to my privates!
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
367
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
368 add2 (d, a.data (), length ());
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
369 return *this;
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
370 }
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
371
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
372 DiagMatrix&
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
373 DiagMatrix::operator -= (const DiagMatrix& a)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
374 {
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
375 int nr = rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
376 int nc = cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
377 if (nr != a.rows () || nc != a.cols ())
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
378 {
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
379 (*current_liboctave_error_handler)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
380 ("nonconformant matrix -= operation attempted");
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
381 return *this;
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
382 }
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
383
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
384 if (nr == 0 || nc == 0)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
385 return *this;
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
386
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
387 double *d = fortran_vec (); // Ensures only one reference to my privates!
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
388
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
389 subtract2 (d, a.data (), length ());
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
390 return *this;
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
391 }
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
392
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
393 // diagonal matrix by scalar -> matrix operations
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
394
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
395 Matrix
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
396 operator + (const DiagMatrix& a, double s)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
397 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
398 Matrix tmp (a.rows (), a.cols (), s);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
399 return a + tmp;
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
400 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
401
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
402 Matrix
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
403 operator - (const DiagMatrix& a, double s)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
404 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
405 Matrix tmp (a.rows (), a.cols (), -s);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
406 return a + tmp;
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
407 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
408
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
409 ComplexMatrix
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
410 operator + (const DiagMatrix& a, const Complex& s)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
411 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
412 ComplexMatrix tmp (a.rows (), a.cols (), s);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
413 return a + tmp;
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
414 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
415
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
416 ComplexMatrix
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
417 operator - (const DiagMatrix& a, const Complex& s)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
418 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
419 ComplexMatrix tmp (a.rows (), a.cols (), -s);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
420 return a + tmp;
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
421 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
422
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
423 // diagonal matrix by scalar -> diagonal matrix operations
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
424
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
425 ComplexDiagMatrix
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
426 operator * (const DiagMatrix& a, const Complex& s)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
427 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
428 return ComplexDiagMatrix (multiply (a.data (), a.length (), s),
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
429 a.rows (), a.cols ());
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
430 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
431
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
432 ComplexDiagMatrix
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
433 operator / (const DiagMatrix& a, const Complex& s)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
434 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
435 return ComplexDiagMatrix (divide (a.data (), a.length (), s),
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
436 a.rows (), a.cols ());
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
437 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
438
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
439 // scalar by diagonal matrix -> matrix operations
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
440
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
441 Matrix
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
442 operator + (double s, const DiagMatrix& a)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
443 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
444 Matrix tmp (a.rows (), a.cols (), s);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
445 return tmp + a;
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
446 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
447
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
448 Matrix
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
449 operator - (double s, const DiagMatrix& a)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
450 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
451 Matrix tmp (a.rows (), a.cols (), s);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
452 return tmp - a;
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
453 }
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
454
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
455 ComplexMatrix
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
456 operator + (const Complex& s, const DiagMatrix& a)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
457 {
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
458 ComplexMatrix tmp (a.rows (), a.cols (), s);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
459 return tmp + a;
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
460 }
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
461
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
462 ComplexMatrix
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
463 operator - (const Complex& s, const DiagMatrix& a)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
464 {
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
465 ComplexMatrix tmp (a.rows (), a.cols (), s);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
466 return tmp - a;
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
467 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
468
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
469 // scalar by diagonal matrix -> diagonal matrix operations
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
470
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
471 ComplexDiagMatrix
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
472 operator * (const Complex& s, const DiagMatrix& a)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
473 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
474 return ComplexDiagMatrix (multiply (a.data (), a.length (), s),
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
475 a.rows (), a.cols ());
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
476 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
477
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
478 // diagonal matrix by column vector -> column vector operations
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
479
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
480 ColumnVector
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
481 operator * (const DiagMatrix& m, const ColumnVector& a)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
482 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
483 int nr = m.rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
484 int nc = m.cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
485 int a_len = a.length ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
486 if (nc != a_len)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
487 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
488 (*current_liboctave_error_handler)
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
489 ("nonconformant matrix multiplication attempted");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
490 return ColumnVector ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
491 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
492
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
493 if (nc == 0 || nr == 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
494 return ColumnVector (0);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
495
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
496 ColumnVector result (nr);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
497
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
498 for (int i = 0; i < a_len; i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
499 result.elem (i) = a.elem (i) * m.elem (i, i);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
500
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
501 for (i = a_len; i < nr; i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
502 result.elem (i) = 0.0;
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
503
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
504 return result;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
505 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
506
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
507 ComplexColumnVector
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
508 operator * (const DiagMatrix& m, const ComplexColumnVector& a)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
509 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
510 int nr = m.rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
511 int nc = m.cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
512 int a_len = a.length ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
513 if (nc != a_len)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
514 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
515 (*current_liboctave_error_handler)
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
516 ("nonconformant matrix multiplication attempted");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
517 return ColumnVector ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
518 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
519
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
520 if (nc == 0 || nr == 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
521 return ComplexColumnVector (0);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
522
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
523 ComplexColumnVector result (nr);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
524
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
525 for (int i = 0; i < a_len; i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
526 result.elem (i) = a.elem (i) * m.elem (i, i);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
527
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
528 for (i = a_len; i < nr; i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
529 result.elem (i) = 0.0;
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
530
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
531 return result;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
532 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
533
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
534 // diagonal matrix by diagonal matrix -> diagonal matrix operations
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
535
378
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
536 DiagMatrix
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
537 operator * (const DiagMatrix& a, const DiagMatrix& b)
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
538 {
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
539 int nr_a = a.rows ();
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
540 int nc_a = a.cols ();
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
541 int nr_b = b.rows ();
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
542 int nc_b = b.cols ();
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
543 if (nc_a != nr_b)
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
544 {
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
545 (*current_liboctave_error_handler)
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
546 ("nonconformant matrix multiplication attempted");
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
547 return DiagMatrix ();
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
548 }
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
549
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
550 if (nr_a == 0 || nc_a == 0 || nc_b == 0)
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
551 return DiagMatrix (nr_a, nc_a, 0.0);
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
552
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
553 DiagMatrix c (nr_a, nc_b);
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
554
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
555 int len = nr_a < nc_b ? nr_a : nc_b;
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
556
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
557 for (int i = 0; i < len; i++)
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
558 {
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
559 double a_element = a.elem (i, i);
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
560 double b_element = b.elem (i, i);
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
561
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
562 if (a_element == 0.0 || b_element == 0.0)
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
563 c.elem (i, i) = 0.0;
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
564 else if (a_element == 1.0)
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
565 c.elem (i, i) = b_element;
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
566 else if (b_element == 1.0)
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
567 c.elem (i, i) = a_element;
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
568 else
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
569 c.elem (i, i) = a_element * b_element;
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
570 }
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
571
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
572 return c;
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
573 }
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
574
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
575 ComplexDiagMatrix
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
576 operator + (const DiagMatrix& m, const ComplexDiagMatrix& a)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
577 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
578 int nr = m.rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
579 int nc = m.cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
580 if (nr != a.rows () || nc != a.cols ())
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
581 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
582 (*current_liboctave_error_handler)
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
583 ("nonconformant matrix addition attempted");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
584 return ComplexDiagMatrix ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
585 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
586
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
587 if (nc == 0 || nr == 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
588 return ComplexDiagMatrix (nr, nc);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
589
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
590 return ComplexDiagMatrix (add (m.data (), a.data (), m.length ()), nr, nc);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
591 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
592
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
593 ComplexDiagMatrix
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
594 operator - (const DiagMatrix& m, const ComplexDiagMatrix& a)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
595 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
596 int nr = m.rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
597 int nc = m.cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
598 if (nr != a.rows () || nc != a.cols ())
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
599 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
600 (*current_liboctave_error_handler)
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
601 ("nonconformant matrix subtraction attempted");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
602 return ComplexDiagMatrix ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
603 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
604
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
605 if (nc == 0 || nr == 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
606 return ComplexDiagMatrix (nr, nc);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
607
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
608 return ComplexDiagMatrix (subtract (m.data (), a.data (), m.length ()),
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
609 nr, nc);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
610 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
611
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
612 ComplexDiagMatrix
378
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
613 operator * (const DiagMatrix& a, const ComplexDiagMatrix& b)
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
614 {
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
615 int nr_a = a.rows ();
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
616 int nc_a = a.cols ();
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
617 int nr_b = b.rows ();
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
618 int nc_b = b.cols ();
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
619 if (nc_a != nr_b)
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
620 {
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
621 (*current_liboctave_error_handler)
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
622 ("nonconformant matrix multiplication attempted");
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
623 return ComplexDiagMatrix ();
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
624 }
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
625
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
626 if (nr_a == 0 || nc_a == 0 || nc_b == 0)
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
627 return ComplexDiagMatrix (nr_a, nc_a, 0.0);
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
628
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
629 ComplexDiagMatrix c (nr_a, nc_b);
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
630
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
631 int len = nr_a < nc_b ? nr_a : nc_b;
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
632
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
633 for (int i = 0; i < len; i++)
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
634 {
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
635 double a_element = a.elem (i, i);
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
636 Complex b_element = b.elem (i, i);
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
637
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
638 if (a_element == 0.0 || b_element == 0.0)
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
639 c.elem (i, i) = 0.0;
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
640 else if (a_element == 1.0)
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
641 c.elem (i, i) = b_element;
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
642 else if (b_element == 1.0)
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
643 c.elem (i, i) = a_element;
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
644 else
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
645 c.elem (i, i) = a_element * b_element;
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
646 }
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
647
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
648 return c;
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
649 }
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
650
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
651 ComplexDiagMatrix
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
652 product (const DiagMatrix& m, const ComplexDiagMatrix& a)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
653 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
654 int nr = m.rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
655 int nc = m.cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
656 if (nr != a.rows () || nc != a.cols ())
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
657 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
658 (*current_liboctave_error_handler)
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
659 ("nonconformant matrix product attempted");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
660 return ComplexDiagMatrix ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
661 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
662
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
663 if (nc == 0 || nr == 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
664 return ComplexDiagMatrix (nr, nc);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
665
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
666 return ComplexDiagMatrix (multiply (m.data (), a.data (), m.length ()),
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
667 nr, nc);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
668 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
669
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
670 // diagonal matrix by matrix -> matrix operations
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
671
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
672 Matrix
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
673 operator + (const DiagMatrix& m, const Matrix& a)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
674 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
675 int nr = m.rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
676 int nc = m.cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
677 if (nr != a.rows () || nc != a.cols ())
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
678 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
679 (*current_liboctave_error_handler)
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
680 ("nonconformant matrix addition attempted");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
681 return Matrix ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
682 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
683
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
684 if (nr == 0 || nc == 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
685 return Matrix (nr, nc);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
686
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
687 Matrix result (a);
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
688 for (int i = 0; i < m.length (); i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
689 result.elem (i, i) += m.elem (i, i);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
690
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
691 return result;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
692 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
693
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
694 Matrix
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
695 operator - (const DiagMatrix& m, const Matrix& a)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
696 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
697 int nr = m.rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
698 int nc = m.cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
699 if (nr != a.rows () || nc != a.cols ())
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
700 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
701 (*current_liboctave_error_handler)
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
702 ("nonconformant matrix subtraction attempted");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
703 return Matrix ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
704 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
705
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
706 if (nr == 0 || nc == 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
707 return Matrix (nr, nc);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
708
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
709 Matrix result (-a);
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
710 for (int i = 0; i < m.length (); i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
711 result.elem (i, i) += m.elem (i, i);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
712
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
713 return result;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
714 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
715
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
716 Matrix
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
717 operator * (const DiagMatrix& m, const Matrix& a)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
718 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
719 int nr = m.rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
720 int nc = m.cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
721 int a_nr = a.rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
722 int a_nc = a.cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
723 if (nc != a_nr)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
724 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
725 (*current_liboctave_error_handler)
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
726 ("nonconformant matrix multiplication attempted");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
727 return Matrix ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
728 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
729
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
730 if (nr == 0 || nc == 0 || a_nc == 0)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
731 return Matrix (nr, a_nc, 0.0);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
732
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
733 Matrix c (nr, a_nc);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
734
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
735 for (int i = 0; i < m.length (); i++)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
736 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
737 if (m.elem (i, i) == 1.0)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
738 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
739 for (int j = 0; j < a_nc; j++)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
740 c.elem (i, j) = a.elem (i, j);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
741 }
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
742 else if (m.elem (i, i) == 0.0)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
743 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
744 for (int j = 0; j < a_nc; j++)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
745 c.elem (i, j) = 0.0;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
746 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
747 else
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
748 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
749 for (int j = 0; j < a_nc; j++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
750 c.elem (i, j) = m.elem (i, i) * a.elem (i, j);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
751 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
752 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
753
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
754 if (nr > nc)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
755 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
756 for (int j = 0; j < a_nc; j++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
757 for (int i = a_nr; i < nr; i++)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
758 c.elem (i, j) = 0.0;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
759 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
760
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
761 return c;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
762 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
763
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
764 ComplexMatrix
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
765 operator + (const DiagMatrix& m, const ComplexMatrix& a)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
766 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
767 int nr = m.rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
768 int nc = m.cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
769 if (nr != a.rows () || nc != a.cols ())
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
770 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
771 (*current_liboctave_error_handler)
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
772 ("nonconformant matrix addition attempted");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
773 return ComplexMatrix ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
774 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
775
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
776 if (nr == 0 || nc == 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
777 return ComplexMatrix (nr, nc);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
778
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
779 ComplexMatrix result (a);
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
780 for (int i = 0; i < m.length (); i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
781 result.elem (i, i) += m.elem (i, i);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
782
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
783 return result;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
784 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
785
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
786 ComplexMatrix
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
787 operator - (const DiagMatrix& m, const ComplexMatrix& a)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
788 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
789 int nr = m.rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
790 int nc = m.cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
791 if (nr != a.rows () || nc != a.cols ())
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
792 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
793 (*current_liboctave_error_handler)
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
794 ("nonconformant matrix subtraction attempted");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
795 return ComplexMatrix ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
796 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
797
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
798 if (nr == 0 || nc == 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
799 return ComplexMatrix (nr, nc);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
800
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
801 ComplexMatrix result (-a);
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
802 for (int i = 0; i < m.length (); i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
803 result.elem (i, i) += m.elem (i, i);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
804
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
805 return result;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
806 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
807
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
808 ComplexMatrix
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
809 operator * (const DiagMatrix& m, const ComplexMatrix& a)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
810 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
811 int nr = m.rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
812 int nc = m.cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
813 int a_nr = a.rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
814 int a_nc = a.cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
815 if (nc != a_nr)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
816 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
817 (*current_liboctave_error_handler)
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
818 ("nonconformant matrix multiplication attempted");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
819 return ComplexMatrix ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
820 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
821
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
822 if (nr == 0 || nc == 0 || a_nc == 0)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
823 return ComplexMatrix (nr, nc, 0.0);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
824
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
825 ComplexMatrix c (nr, a_nc);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
826
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
827 for (int i = 0; i < m.length (); i++)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
828 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
829 if (m.elem (i, i) == 1.0)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
830 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
831 for (int j = 0; j < a_nc; j++)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
832 c.elem (i, j) = a.elem (i, j);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
833 }
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
834 else if (m.elem (i, i) == 0.0)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
835 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
836 for (int j = 0; j < a_nc; j++)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
837 c.elem (i, j) = 0.0;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
838 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
839 else
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
840 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
841 for (int j = 0; j < a_nc; j++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
842 c.elem (i, j) = m.elem (i, i) * a.elem (i, j);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
843 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
844 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
845
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
846 if (nr > nc)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
847 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
848 for (int j = 0; j < a_nc; j++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
849 for (int i = a_nr; i < nr; i++)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
850 c.elem (i, j) = 0.0;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
851 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
852
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
853 return c;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
854 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
855
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
856 // other operations
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
857
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
858 ColumnVector
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
859 DiagMatrix::diag (void) const
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
860 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
861 return diag (0);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
862 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
863
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
864 // Could be optimized...
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
865
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
866 ColumnVector
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
867 DiagMatrix::diag (int k) const
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
868 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
869 int nnr = rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
870 int nnc = cols ();
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
871 if (k > 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
872 nnc -= k;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
873 else if (k < 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
874 nnr += k;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
875
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
876 ColumnVector d;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
877
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
878 if (nnr > 0 && nnc > 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
879 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
880 int ndiag = (nnr < nnc) ? nnr : nnc;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
881
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
882 d.resize (ndiag);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
883
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
884 if (k > 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
885 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
886 for (int i = 0; i < ndiag; i++)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
887 d.elem (i) = elem (i, i+k);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
888 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
889 else if ( k < 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
890 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
891 for (int i = 0; i < ndiag; i++)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
892 d.elem (i) = elem (i-k, i);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
893 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
894 else
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
895 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
896 for (int i = 0; i < ndiag; i++)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
897 d.elem (i) = elem (i, i);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
898 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
899 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
900 else
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
901 cerr << "diag: requested diagonal out of range\n";
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
902
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
903 return d;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
904 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
905
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
906 ostream&
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
907 operator << (ostream& os, const DiagMatrix& a)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
908 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
909 // int field_width = os.precision () + 7;
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
910 for (int i = 0; i < a.rows (); i++)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
911 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
912 for (int j = 0; j < a.cols (); j++)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
913 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
914 if (i == j)
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
915 os << " " /* setw (field_width) */ << a.elem (i, i);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
916 else
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
917 os << " " /* setw (field_width) */ << 0.0;
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
918 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
919 os << "\n";
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
920 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
921 return os;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
922 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
923
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
924 /*
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
925 * Complex Diagonal Matrix class
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
926 */
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
927
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
928 ComplexDiagMatrix::ComplexDiagMatrix (const RowVector& a)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
929 : DiagArray<Complex> (a.length ())
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
930 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
931 for (int i = 0; i < length (); i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
932 elem (i, i) = a.elem (i);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
933 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
934
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
935 ComplexDiagMatrix::ComplexDiagMatrix (const ColumnVector& a)
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
936 : DiagArray<Complex> (a.length ())
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
937 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
938 for (int i = 0; i < length (); i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
939 elem (i, i) = a.elem (i);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
940 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
941
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
942 ComplexDiagMatrix::ComplexDiagMatrix (const DiagMatrix& a)
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
943 : DiagArray<Complex> (a.rows (), a.cols ())
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
944 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
945 for (int i = 0; i < length (); i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
946 elem (i, i) = a.elem (i, i);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
947 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
948
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
949 #if 0
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
950 ComplexDiagMatrix&
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
951 ComplexDiagMatrix::resize (int r, int c)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
952 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
953 if (r < 0 || c < 0)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
954 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
955 (*current_liboctave_error_handler)
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
956 ("can't resize to negative dimensions");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
957 return *this;
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
958 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
959
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
960 int new_len = r < c ? r : c;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
961 Complex *new_data = (Complex *) NULL;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
962 if (new_len > 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
963 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
964 new_data = new Complex [new_len];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
965
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
966 int min_len = new_len < len ? new_len : len;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
967
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
968 for (int i = 0; i < min_len; i++)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
969 new_data[i] = data[i];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
970 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
971
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
972 delete [] data;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
973 nr = r;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
974 nc = c;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
975 len = new_len;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
976 data = new_data;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
977
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
978 return *this;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
979 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
980
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
981 ComplexDiagMatrix&
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
982 ComplexDiagMatrix::resize (int r, int c, double val)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
983 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
984 if (r < 0 || c < 0)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
985 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
986 (*current_liboctave_error_handler)
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
987 ("can't resize to negative dimensions");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
988 return *this;
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
989 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
990
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
991 int new_len = r < c ? r : c;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
992 Complex *new_data = (Complex *) NULL;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
993 if (new_len > 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
994 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
995 new_data = new Complex [new_len];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
996
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
997 int min_len = new_len < len ? new_len : len;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
998
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
999 for (int i = 0; i < min_len; i++)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1000 new_data[i] = data[i];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1001
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1002 for (i = min_len; i < new_len; i++)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1003 new_data[i] = val;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1004 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1005
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1006 delete [] data;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1007 nr = r;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1008 nc = c;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1009 len = new_len;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1010 data = new_data;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1011
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1012 return *this;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1013 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1014
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1015 ComplexDiagMatrix&
161
21b599370728 [project @ 1993-10-16 17:20:32 by jwe]
jwe
parents: 3
diff changeset
1016 ComplexDiagMatrix::resize (int r, int c, const Complex& val)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1017 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1018 if (r < 0 || c < 0)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1019 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1020 (*current_liboctave_error_handler)
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1021 ("can't resize to negative dimensions");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1022 return *this;
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1023 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1024
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1025 int new_len = r < c ? r : c;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1026 Complex *new_data = (Complex *) NULL;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1027 if (new_len > 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1028 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1029 new_data = new Complex [new_len];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1030
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1031 int min_len = new_len < len ? new_len : len;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1032
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1033 for (int i = 0; i < min_len; i++)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1034 new_data[i] = data[i];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1035
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1036 for (i = min_len; i < new_len; i++)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1037 new_data[i] = val;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1038 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1039
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1040 delete [] data;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1041 nr = r;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1042 nc = c;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1043 len = new_len;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1044 data = new_data;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1045
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1046 return *this;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1047 }
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1048 #endif
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1049
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1050 int
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1051 ComplexDiagMatrix::operator == (const ComplexDiagMatrix& a) const
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1052 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1053 if (rows () != a.rows () || cols () != a.cols ())
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1054 return 0;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1055
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1056 return equal (data (), a.data (), length ());
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1057 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1058
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1059 int
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1060 ComplexDiagMatrix::operator != (const ComplexDiagMatrix& a) const
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1061 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1062 return !(*this == a);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1063 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1064
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1065 ComplexDiagMatrix
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1066 ComplexDiagMatrix::hermitian (void) const
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1067 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1068 return ComplexDiagMatrix (conj_dup (data (), length ()), cols (), rows ());
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1069 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1070
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1071 ComplexDiagMatrix&
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1072 ComplexDiagMatrix::fill (double val)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1073 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1074 for (int i = 0; i < length (); i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1075 elem (i, i) = val;
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1076 return *this;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1077 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1078
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1079 ComplexDiagMatrix&
161
21b599370728 [project @ 1993-10-16 17:20:32 by jwe]
jwe
parents: 3
diff changeset
1080 ComplexDiagMatrix::fill (const Complex& val)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1081 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1082 for (int i = 0; i < length (); i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1083 elem (i, i) = val;
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1084 return *this;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1085 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1086
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1087 ComplexDiagMatrix&
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1088 ComplexDiagMatrix::fill (double val, int beg, int end)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1089 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1090 if (beg < 0 || end >= length () || end < beg)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1091 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1092 (*current_liboctave_error_handler) ("range error for fill");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1093 return *this;
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1094 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1095
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1096 for (int i = beg; i < end; i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1097 elem (i, i) = val;
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1098
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1099 return *this;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1100 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1101
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1102 ComplexDiagMatrix&
161
21b599370728 [project @ 1993-10-16 17:20:32 by jwe]
jwe
parents: 3
diff changeset
1103 ComplexDiagMatrix::fill (const Complex& val, int beg, int end)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1104 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1105 if (beg < 0 || end >= length () || end < beg)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1106 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1107 (*current_liboctave_error_handler) ("range error for fill");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1108 return *this;
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1109 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1110
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1111 for (int i = beg; i < end; i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1112 elem (i, i) = val;
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1113
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1114 return *this;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1115 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1116
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1117 ComplexDiagMatrix&
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1118 ComplexDiagMatrix::fill (const ColumnVector& a)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1119 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1120 int len = length ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1121 if (a.length () != len)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1122 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1123 (*current_liboctave_error_handler) ("range error for fill");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1124 return *this;
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1125 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1126
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1127 for (int i = 0; i < len; i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1128 elem (i, i) = a.elem (i);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1129
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1130 return *this;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1131 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1132
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1133 ComplexDiagMatrix&
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1134 ComplexDiagMatrix::fill (const ComplexColumnVector& a)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1135 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1136 int len = length ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1137 if (a.length () != len)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1138 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1139 (*current_liboctave_error_handler) ("range error for fill");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1140 return *this;
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1141 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1142
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1143 for (int i = 0; i < len; i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1144 elem (i, i) = a.elem (i);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1145
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1146 return *this;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1147 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1148
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1149 ComplexDiagMatrix&
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1150 ComplexDiagMatrix::fill (const RowVector& a)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1151 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1152 int len = length ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1153 if (a.length () != len)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1154 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1155 (*current_liboctave_error_handler) ("range error for fill");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1156 return *this;
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1157 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1158
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1159 for (int i = 0; i < len; i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1160 elem (i, i) = a.elem (i);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1161
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1162 return *this;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1163 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1164
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1165 ComplexDiagMatrix&
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1166 ComplexDiagMatrix::fill (const ComplexRowVector& a)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1167 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1168 int len = length ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1169 if (a.length () != len)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1170 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1171 (*current_liboctave_error_handler) ("range error for fill");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1172 return *this;
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1173 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1174
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1175 for (int i = 0; i < len; i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1176 elem (i, i) = a.elem (i);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1177
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1178 return *this;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1179 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1180
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1181 ComplexDiagMatrix&
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1182 ComplexDiagMatrix::fill (const ColumnVector& a, int beg)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1183 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1184 int a_len = a.length ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1185 if (beg < 0 || beg + a_len >= length ())
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1186 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1187 (*current_liboctave_error_handler) ("range error for fill");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1188 return *this;
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1189 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1190
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1191 for (int i = 0; i < a_len; i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1192 elem (i+beg, i+beg) = a.elem (i);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1193
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1194 return *this;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1195 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1196
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1197 ComplexDiagMatrix&
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1198 ComplexDiagMatrix::fill (const ComplexColumnVector& a, int beg)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1199 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1200 int a_len = a.length ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1201 if (beg < 0 || beg + a_len >= length ())
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1202 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1203 (*current_liboctave_error_handler) ("range error for fill");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1204 return *this;
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1205 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1206
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1207 for (int i = 0; i < a_len; i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1208 elem (i+beg, i+beg) = a.elem (i);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1209
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1210 return *this;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1211 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1212
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1213 ComplexDiagMatrix&
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1214 ComplexDiagMatrix::fill (const RowVector& a, int beg)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1215 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1216 int a_len = a.length ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1217 if (beg < 0 || beg + a_len >= length ())
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1218 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1219 (*current_liboctave_error_handler) ("range error for fill");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1220 return *this;
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1221 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1222
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1223 for (int i = 0; i < a_len; i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1224 elem (i+beg, i+beg) = a.elem (i);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1225
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1226 return *this;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1227 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1228
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1229 ComplexDiagMatrix&
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1230 ComplexDiagMatrix::fill (const ComplexRowVector& a, int beg)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1231 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1232 int a_len = a.length ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1233 if (beg < 0 || beg + a_len >= length ())
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1234 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1235 (*current_liboctave_error_handler) ("range error for fill");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1236 return *this;
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1237 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1238
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1239 for (int i = 0; i < a_len; i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1240 elem (i+beg, i+beg) = a.elem (i);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1241
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1242 return *this;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1243 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1244
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1245 ComplexDiagMatrix
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1246 ComplexDiagMatrix::transpose (void) const
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1247 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1248 return ComplexDiagMatrix (dup (data (), length ()), cols (), rows ());
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1249 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1250
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1251 DiagMatrix
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1252 real (const ComplexDiagMatrix& a)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1253 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1254 DiagMatrix retval;
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1255 int a_len = a.length ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1256 if (a_len > 0)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1257 retval = DiagMatrix (real_dup (a.data (), a_len), a.rows (),
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1258 a.cols ());
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1259 return retval;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1260 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1261
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1262 DiagMatrix
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1263 imag (const ComplexDiagMatrix& a)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1264 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1265 DiagMatrix retval;
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1266 int a_len = a.length ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1267 if (a_len > 0)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1268 retval = DiagMatrix (imag_dup (a.data (), a_len), a.rows (),
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1269 a.cols ());
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1270 return retval;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1271 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1272
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1273 ComplexDiagMatrix
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1274 conj (const ComplexDiagMatrix& a)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1275 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1276 ComplexDiagMatrix retval;
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1277 int a_len = a.length ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1278 if (a_len > 0)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1279 retval = ComplexDiagMatrix (conj_dup (a.data (), a_len),
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1280 a.rows (), a.cols ());
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1281 return retval;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1282 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1283
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1284 // resize is the destructive analog for this one
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1285
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1286 ComplexMatrix
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1287 ComplexDiagMatrix::extract (int r1, int c1, int r2, int c2) const
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1288 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1289 if (r1 > r2) { int tmp = r1; r1 = r2; r2 = tmp; }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1290 if (c1 > c2) { int tmp = c1; c1 = c2; c2 = tmp; }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1291
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1292 int new_r = r2 - r1 + 1;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1293 int new_c = c2 - c1 + 1;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1294
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1295 ComplexMatrix result (new_r, new_c);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1296
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1297 for (int j = 0; j < new_c; j++)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1298 for (int i = 0; i < new_r; i++)
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1299 result.elem (i, j) = elem (r1+i, c1+j);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1300
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1301 return result;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1302 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1303
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1304 // extract row or column i.
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1305
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1306 ComplexRowVector
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1307 ComplexDiagMatrix::row (int i) const
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1308 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1309 int nr = rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1310 int nc = cols ();
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1311 if (i < 0 || i >= nr)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1312 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1313 (*current_liboctave_error_handler) ("invalid row selection");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1314 return RowVector ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1315 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1316
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1317 ComplexRowVector retval (nc, 0.0);
192
6259f4ed7285 [project @ 1993-11-01 21:06:27 by jwe]
jwe
parents: 161
diff changeset
1318 if (nr <= nc || (nr > nc && i < nc))
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1319 retval.elem (i) = elem (i, i);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1320
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1321 return retval;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1322 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1323
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1324 ComplexRowVector
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1325 ComplexDiagMatrix::row (char *s) const
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1326 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1327 if (s == (char *) NULL)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1328 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1329 (*current_liboctave_error_handler) ("invalid row selection");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1330 return ComplexRowVector ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1331 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1332
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1333 char c = *s;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1334 if (c == 'f' || c == 'F')
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1335 return row (0);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1336 else if (c == 'l' || c == 'L')
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1337 return row (rows () - 1);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1338 else
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1339 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1340 (*current_liboctave_error_handler) ("invalid row selection");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1341 return ComplexRowVector ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1342 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1343 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1344
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1345 ComplexColumnVector
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1346 ComplexDiagMatrix::column (int i) const
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1347 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1348 int nr = rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1349 int nc = cols ();
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1350 if (i < 0 || i >= nc)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1351 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1352 (*current_liboctave_error_handler) ("invalid column selection");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1353 return ColumnVector ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1354 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1355
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1356 ComplexColumnVector retval (nr, 0.0);
192
6259f4ed7285 [project @ 1993-11-01 21:06:27 by jwe]
jwe
parents: 161
diff changeset
1357 if (nr >= nc || (nr < nc && i < nr))
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1358 retval.elem (i) = elem (i, i);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1359
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1360 return retval;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1361 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1362
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1363 ComplexColumnVector
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1364 ComplexDiagMatrix::column (char *s) const
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1365 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1366 if (s == (char *) NULL)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1367 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1368 (*current_liboctave_error_handler) ("invalid column selection");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1369 return ColumnVector ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1370 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1371
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1372 char c = *s;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1373 if (c == 'f' || c == 'F')
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1374 return column (0);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1375 else if (c == 'l' || c == 'L')
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1376 return column (cols () - 1);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1377 else
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1378 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1379 (*current_liboctave_error_handler) ("invalid column selection");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1380 return ColumnVector ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1381 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1382 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1383
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1384 ComplexDiagMatrix
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1385 ComplexDiagMatrix::inverse (void) const
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1386 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1387 int info;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1388 return inverse (info);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1389 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1390
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1391 ComplexDiagMatrix
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1392 ComplexDiagMatrix::inverse (int& info) const
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1393 {
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1394 int nr = rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1395 int nc = cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1396 if (nr != nc)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1397 {
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1398 (*current_liboctave_error_handler) ("inverse requires square matrix");
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1399 return DiagMatrix ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1400 }
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1401
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1402 ComplexDiagMatrix retval (nr, nc);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1403
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1404 info = 0;
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1405 for (int i = 0; i < length (); i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1406 {
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1407 if (elem (i, i) == 0.0)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1408 {
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1409 info = -1;
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1410 return *this;
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1411 }
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1412 else
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1413 retval.elem (i, i) = 1.0 / elem (i, i);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1414 }
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1415
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1416 return *this;
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1417 }
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1418
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1419 // diagonal matrix by diagonal matrix -> diagonal matrix operations
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1420
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1421 ComplexDiagMatrix&
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1422 ComplexDiagMatrix::operator += (const DiagMatrix& a)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1423 {
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1424 int nr = rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1425 int nc = cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1426 if (nr != a.rows () || nc != a.cols ())
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1427 {
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1428 (*current_liboctave_error_handler)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1429 ("nonconformant matrix += operation attempted");
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1430 return *this;
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1431 }
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1432
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1433 if (nr == 0 || nc == 0)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1434 return *this;
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1435
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1436 Complex *d = fortran_vec (); // Ensures only one reference to my privates!
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1437
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1438 add2 (d, a.data (), length ());
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1439 return *this;
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1440 }
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1441
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1442 ComplexDiagMatrix&
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1443 ComplexDiagMatrix::operator -= (const DiagMatrix& a)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1444 {
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1445 int nr = rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1446 int nc = cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1447 if (nr != a.rows () || nc != a.cols ())
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1448 {
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1449 (*current_liboctave_error_handler)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1450 ("nonconformant matrix -= operation attempted");
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1451 return *this;
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1452 }
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1453
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1454 if (nr == 0 || nc == 0)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1455 return *this;
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1456
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1457 Complex *d = fortran_vec (); // Ensures only one reference to my privates!
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1458
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1459 subtract2 (d, a.data (), length ());
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1460 return *this;
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1461 }
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1462
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1463 ComplexDiagMatrix&
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1464 ComplexDiagMatrix::operator += (const ComplexDiagMatrix& a)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1465 {
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1466 int nr = rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1467 int nc = cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1468 if (nr != a.rows () || nc != a.cols ())
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1469 {
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1470 (*current_liboctave_error_handler)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1471 ("nonconformant matrix += operation attempted");
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1472 return *this;
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1473 }
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1474
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1475 if (nr == 0 || nc == 0)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1476 return *this;
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1477
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1478 Complex *d = fortran_vec (); // Ensures only one reference to my privates!
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1479
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1480 add2 (d, a.data (), length ());
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1481 return *this;
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1482 }
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1483
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1484 ComplexDiagMatrix&
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1485 ComplexDiagMatrix::operator -= (const ComplexDiagMatrix& a)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1486 {
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1487 int nr = rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1488 int nc = cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1489 if (nr != a.rows () || nc != a.cols ())
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1490 {
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1491 (*current_liboctave_error_handler)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1492 ("nonconformant matrix -= operation attempted");
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1493 return *this;
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1494 }
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1495
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1496 if (nr == 0 || nc == 0)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1497 return *this;
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1498
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1499 Complex *d = fortran_vec (); // Ensures only one reference to my privates!
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1500
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1501 subtract2 (d, a.data (), length ());
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1502 return *this;
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1503 }
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1504
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1505 // diagonal matrix by scalar -> matrix operations
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1506
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1507 ComplexMatrix
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1508 operator + (const ComplexDiagMatrix& a, double s)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1509 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1510 ComplexMatrix tmp (a.rows (), a.cols (), s);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1511 return a + tmp;
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1512 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1513
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1514 ComplexMatrix
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1515 operator - (const ComplexDiagMatrix& a, double s)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1516 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1517 ComplexMatrix tmp (a.rows (), a.cols (), -s);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1518 return a + tmp;
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1519 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1520
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1521 ComplexMatrix
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1522 operator + (const ComplexDiagMatrix& a, const Complex& s)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1523 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1524 ComplexMatrix tmp (a.rows (), a.cols (), s);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1525 return a + tmp;
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1526 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1527
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1528 ComplexMatrix
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1529 operator - (const ComplexDiagMatrix& a, const Complex& s)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1530 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1531 ComplexMatrix tmp (a.rows (), a.cols (), -s);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1532 return a + tmp;
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1533 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1534
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1535 // diagonal matrix by scalar -> diagonal matrix operations
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1536
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1537 ComplexDiagMatrix
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1538 operator * (const ComplexDiagMatrix& a, double s)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1539 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1540 return ComplexDiagMatrix (multiply (a.data (), a.length (), s),
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1541 a.rows (), a.cols ());
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1542 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1543
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1544 ComplexDiagMatrix
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1545 operator / (const ComplexDiagMatrix& a, double s)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1546 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1547 return ComplexDiagMatrix (divide (a.data (), a.length (), s),
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1548 a.rows (), a.cols ());
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1549 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1550
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1551 // scalar by diagonal matrix -> matrix operations
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1552
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1553 ComplexMatrix
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1554 operator + (double s, const ComplexDiagMatrix& a)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1555 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1556 ComplexMatrix tmp (a.rows (), a.cols (), s);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1557 return tmp + a;
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1558 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1559
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1560 ComplexMatrix
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1561 operator - (double s, const ComplexDiagMatrix& a)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1562 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1563 ComplexMatrix tmp (a.rows (), a.cols (), s);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1564 return tmp - a;
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1565 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1566
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1567 ComplexMatrix
161
21b599370728 [project @ 1993-10-16 17:20:32 by jwe]
jwe
parents: 3
diff changeset
1568 operator + (const Complex& s, const ComplexDiagMatrix& a)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1569 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1570 ComplexMatrix tmp (a.rows (), a.cols (), s);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1571 return tmp + a;
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1572 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1573
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1574 ComplexMatrix
161
21b599370728 [project @ 1993-10-16 17:20:32 by jwe]
jwe
parents: 3
diff changeset
1575 operator - (const Complex& s, const ComplexDiagMatrix& a)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1576 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1577 ComplexMatrix tmp (a.rows (), a.cols (), s);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1578 return tmp - a;
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1579 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1580
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1581 // scalar by diagonal matrix -> diagonal matrix operations
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1582
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1583 ComplexDiagMatrix
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1584 operator * (double s, const ComplexDiagMatrix& a)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1585 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1586 return ComplexDiagMatrix (multiply (a.data (), a.length (), s),
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1587 a.rows (), a.cols ());
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1588 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1589
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1590 // diagonal matrix by column vector -> column vector operations
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1591
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1592 ComplexColumnVector
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1593 operator * (const ComplexDiagMatrix& m, const ColumnVector& a)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1594 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1595 int nr = m.rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1596 int nc = m.cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1597 int a_len = a.length ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1598 if (nc != a_len)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1599 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1600 (*current_liboctave_error_handler)
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1601 ("nonconformant matrix muliplication attempted");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1602 return ComplexColumnVector ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1603 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1604
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1605 if (nc == 0 || nr == 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1606 return ComplexColumnVector (0);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1607
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1608 ComplexColumnVector result (nr);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1609
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1610 for (int i = 0; i < a_len; i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1611 result.elem (i) = a.elem (i) * m.elem (i, i);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1612
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1613 for (i = a_len; i < nr; i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1614 result.elem (i) = 0.0;
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1615
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1616 return result;
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1617 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1618
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1619 ComplexColumnVector
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1620 operator * (const ComplexDiagMatrix& m, const ComplexColumnVector& a)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1621 {
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1622 int nr = m.rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1623 int nc = m.cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1624 int a_len = a.length ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1625 if (nc != a_len)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1626 {
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1627 (*current_liboctave_error_handler)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1628 ("nonconformant matrix muliplication attempted");
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1629 return ComplexColumnVector ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1630 }
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1631
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1632 if (nc == 0 || nr == 0)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1633 return ComplexColumnVector (0);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1634
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1635 ComplexColumnVector result (nr);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1636
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1637 for (int i = 0; i < a_len; i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1638 result.elem (i) = a.elem (i) * m.elem (i, i);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1639
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1640 for (i = a_len; i < nr; i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1641 result.elem (i) = 0.0;
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1642
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1643 return result;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1644 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1645
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1646 // diagonal matrix by diagonal matrix -> diagonal matrix operations
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1647
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1648 ComplexDiagMatrix
378
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1649 operator * (const ComplexDiagMatrix& a, const ComplexDiagMatrix& b)
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1650 {
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1651 int nr_a = a.rows ();
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1652 int nc_a = a.cols ();
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1653 int nr_b = b.rows ();
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1654 int nc_b = b.cols ();
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1655 if (nc_a != nr_b)
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1656 {
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1657 (*current_liboctave_error_handler)
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1658 ("nonconformant matrix multiplication attempted");
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1659 return ComplexDiagMatrix ();
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1660 }
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1661
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1662 if (nr_a == 0 || nc_a == 0 || nc_b == 0)
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1663 return ComplexDiagMatrix (nr_a, nc_a, 0.0);
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1664
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1665 ComplexDiagMatrix c (nr_a, nc_b);
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1666
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1667 int len = nr_a < nc_b ? nr_a : nc_b;
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1668
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1669 for (int i = 0; i < len; i++)
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1670 {
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1671 Complex a_element = a.elem (i, i);
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1672 Complex b_element = b.elem (i, i);
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1673
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1674 if (a_element == 0.0 || b_element == 0.0)
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1675 c.elem (i, i) = 0.0;
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1676 else if (a_element == 1.0)
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1677 c.elem (i, i) = b_element;
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1678 else if (b_element == 1.0)
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1679 c.elem (i, i) = a_element;
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1680 else
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1681 c.elem (i, i) = a_element * b_element;
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1682 }
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1683
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1684 return c;
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1685 }
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1686
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1687 ComplexDiagMatrix
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1688 operator + (const ComplexDiagMatrix& m, const DiagMatrix& a)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1689 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1690 int nr = m.rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1691 int nc = m.cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1692 if (nr != a.rows () || nc != a.cols ())
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1693 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1694 (*current_liboctave_error_handler)
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1695 ("nonconformant matrix addition attempted");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1696 return ComplexDiagMatrix ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1697 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1698
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1699 if (nr == 0 || nc == 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1700 return ComplexDiagMatrix (nr, nc);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1701
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1702 return ComplexDiagMatrix (add (m.data (), a.data (), m.length ()), nr, nc);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1703 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1704
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1705 ComplexDiagMatrix
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1706 operator - (const ComplexDiagMatrix& m, const DiagMatrix& a)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1707 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1708 int nr = m.rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1709 int nc = m.cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1710 if (nr != a.rows () || nc != a.cols ())
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1711 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1712 (*current_liboctave_error_handler)
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1713 ("nonconformant matrix subtraction attempted");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1714 return ComplexDiagMatrix ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1715 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1716
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1717 if (nr == 0 || nc == 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1718 return ComplexDiagMatrix (nr, nc);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1719
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1720 return ComplexDiagMatrix (subtract (m.data (), a.data (), m.length ()),
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1721 nr, nc);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1722 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1723
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1724 ComplexDiagMatrix
378
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1725 operator * (const ComplexDiagMatrix& a, const DiagMatrix& b)
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1726 {
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1727 int nr_a = a.rows ();
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1728 int nc_a = a.cols ();
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1729 int nr_b = b.rows ();
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1730 int nc_b = b.cols ();
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1731 if (nc_a != nr_b)
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1732 {
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1733 (*current_liboctave_error_handler)
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1734 ("nonconformant matrix multiplication attempted");
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1735 return ComplexDiagMatrix ();
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1736 }
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1737
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1738 if (nr_a == 0 || nc_a == 0 || nc_b == 0)
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1739 return ComplexDiagMatrix (nr_a, nc_a, 0.0);
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1740
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1741 ComplexDiagMatrix c (nr_a, nc_b);
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1742
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1743 int len = nr_a < nc_b ? nr_a : nc_b;
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1744
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1745 for (int i = 0; i < len; i++)
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1746 {
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1747 Complex a_element = a.elem (i, i);
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1748 double b_element = b.elem (i, i);
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1749
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1750 if (a_element == 0.0 || b_element == 0.0)
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1751 c.elem (i, i) = 0.0;
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1752 else if (a_element == 1.0)
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1753 c.elem (i, i) = b_element;
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1754 else if (b_element == 1.0)
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1755 c.elem (i, i) = a_element;
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1756 else
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1757 c.elem (i, i) = a_element * b_element;
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1758 }
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1759
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1760 return c;
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1761 }
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1762
e04b38065c55 [project @ 1994-03-03 20:41:35 by jwe]
jwe
parents: 238
diff changeset
1763 ComplexDiagMatrix
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1764 product (const ComplexDiagMatrix& m, const DiagMatrix& a)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1765 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1766 int nr = m.rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1767 int nc = m.cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1768 if (nr != a.rows () || nc != a.cols ())
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1769 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1770 (*current_liboctave_error_handler)
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1771 ("nonconformant matrix product attempted");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1772 return ComplexDiagMatrix ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1773 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1774
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1775 if (nr == 0 || nc == 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1776 return ComplexDiagMatrix (nr, nc);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1777
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1778 return ComplexDiagMatrix (multiply (m.data (), a.data (), m.length ()),
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1779 nr, nc);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1780 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1781
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1782 // diagonal matrix by matrix -> matrix operations
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1783
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1784 ComplexMatrix
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1785 operator + (const ComplexDiagMatrix& m, const Matrix& a)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1786 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1787 int nr = m.rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1788 int nc = m.cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1789 if (nr != a.rows () || nc != a.cols ())
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1790 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1791 (*current_liboctave_error_handler)
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1792 ("nonconformant matrix addition attempted");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1793 return ComplexMatrix ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1794 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1795
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1796 if (nr == 0 || nc == 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1797 return ComplexMatrix (nr, nc);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1798
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1799 ComplexMatrix result (a);
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1800 for (int i = 0; i < m.length (); i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1801 result.elem (i, i) += m.elem (i, i);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1802
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1803 return result;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1804 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1805
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1806 ComplexMatrix
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1807 operator - (const ComplexDiagMatrix& m, const Matrix& a)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1808 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1809 int nr = m.rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1810 int nc = m.cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1811 if (nr != a.rows () || nc != a.cols ())
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1812 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1813 (*current_liboctave_error_handler)
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1814 ("nonconformant matrix subtraction attempted");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1815 return ComplexMatrix ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1816 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1817
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1818 if (nr == 0 || nc == 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1819 return ComplexMatrix (nr, nc);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1820
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1821 ComplexMatrix result (-a);
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1822 for (int i = 0; i < m.length (); i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1823 result.elem (i, i) += m.elem (i, i);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1824
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1825 return result;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1826 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1827
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1828 ComplexMatrix
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1829 operator * (const ComplexDiagMatrix& m, const Matrix& a)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1830 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1831 int nr = m.rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1832 int nc = m.cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1833 int a_nr = a.rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1834 int a_nc = a.cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1835 if (nc != a_nr)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1836 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1837 (*current_liboctave_error_handler)
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1838 ("nonconformant matrix multiplication attempted");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1839 return ComplexMatrix ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1840 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1841
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1842 if (nr == 0 || nc == 0 || a_nc == 0)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1843 return ComplexMatrix (nr, a_nc, 0.0);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1844
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1845 ComplexMatrix c (nr, a_nc);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1846
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1847 for (int i = 0; i < m.length (); i++)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1848 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1849 if (m.elem (i, i) == 1.0)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1850 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1851 for (int j = 0; j < a_nc; j++)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1852 c.elem (i, j) = a.elem (i, j);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1853 }
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1854 else if (m.elem (i, i) == 0.0)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1855 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1856 for (int j = 0; j < a_nc; j++)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1857 c.elem (i, j) = 0.0;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1858 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1859 else
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1860 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1861 for (int j = 0; j < a_nc; j++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1862 c.elem (i, j) = m.elem (i, i) * a.elem (i, j);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1863 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1864 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1865
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1866 if (nr > nc)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1867 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1868 for (int j = 0; j < a_nc; j++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1869 for (int i = a_nr; i < nr; i++)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1870 c.elem (i, j) = 0.0;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1871 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1872
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1873 return c;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1874 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1875
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1876 ComplexMatrix
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1877 operator + (const ComplexDiagMatrix& m, const ComplexMatrix& a)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1878 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1879 int nr = m.rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1880 int nc = m.cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1881 if (nr != a.rows () || nc != a.cols ())
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1882 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1883 (*current_liboctave_error_handler)
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1884 ("nonconformant matrix addition attempted");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1885 return ComplexMatrix ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1886 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1887
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1888 if (nr == 0 || nc == 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1889 return ComplexMatrix (nr, nc);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1890
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1891 ComplexMatrix result (a);
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1892 for (int i = 0; i < m.length (); i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1893 result.elem (i, i) += m.elem (i, i);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1894
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1895 return result;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1896 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1897
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1898 ComplexMatrix
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1899 operator - (const ComplexDiagMatrix& m, const ComplexMatrix& a)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1900 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1901 int nr = m.rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1902 int nc = m.cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1903 if (nr != a.rows () || nc != a.cols ())
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1904 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1905 (*current_liboctave_error_handler)
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1906 ("nonconformant matrix subtraction attempted");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1907 return ComplexMatrix ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1908 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1909
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1910 if (nr == 0 || nc == 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1911 return ComplexMatrix (nr, nc);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1912
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1913 ComplexMatrix result (-a);
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1914 for (int i = 0; i < m.length (); i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1915 result.elem (i, i) += m.elem (i, i);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1916
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1917 return result;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1918 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1919
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1920 ComplexMatrix
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1921 operator * (const ComplexDiagMatrix& m, const ComplexMatrix& a)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1922 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1923 int nr = m.rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1924 int nc = m.cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1925 int a_nr = a.rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1926 int a_nc = a.cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1927 if (nc != a_nr)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1928 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1929 (*current_liboctave_error_handler)
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1930 ("nonconformant matrix multiplication attempted");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1931 return ComplexMatrix ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1932 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1933
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1934 if (nr == 0 || nc == 0 || a_nc == 0)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1935 return ComplexMatrix (nr, a_nc, 0.0);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1936
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1937 ComplexMatrix c (nr, a_nc);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1938
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1939 for (int i = 0; i < m.length (); i++)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1940 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1941 if (m.elem (i, i) == 1.0)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1942 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1943 for (int j = 0; j < a_nc; j++)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1944 c.elem (i, j) = a.elem (i, j);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1945 }
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1946 else if (m.elem (i, i) == 0.0)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1947 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1948 for (int j = 0; j < a_nc; j++)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1949 c.elem (i, j) = 0.0;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1950 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1951 else
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1952 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1953 for (int j = 0; j < a_nc; j++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1954 c.elem (i, j) = m.elem (i, i) * a.elem (i, j);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1955 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1956 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1957
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1958 if (nr > nc)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1959 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1960 for (int j = 0; j < a_nc; j++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1961 for (int i = a_nr; i < nr; i++)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1962 c.elem (i, j) = 0.0;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1963 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1964
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1965 return c;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1966 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1967
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1968 // other operations
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1969
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1970 ComplexColumnVector
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1971 ComplexDiagMatrix::diag (void) const
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1972 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1973 return diag (0);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1974 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1975
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1976 // Could be optimized...
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1977
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1978 ComplexColumnVector
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1979 ComplexDiagMatrix::diag (int k) const
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1980 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1981 int nnr = rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1982 int nnc = cols ();
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1983 if (k > 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1984 nnc -= k;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1985 else if (k < 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1986 nnr += k;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1987
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1988 ComplexColumnVector d;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1989
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1990 if (nnr > 0 && nnc > 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1991 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1992 int ndiag = (nnr < nnc) ? nnr : nnc;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1993
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1994 d.resize (ndiag);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1995
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1996 if (k > 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1997 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1998 for (int i = 0; i < ndiag; i++)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1999 d.elem (i) = elem (i, i+k);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
2000 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
2001 else if ( k < 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
2002 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
2003 for (int i = 0; i < ndiag; i++)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
2004 d.elem (i) = elem (i-k, i);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
2005 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
2006 else
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
2007 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
2008 for (int i = 0; i < ndiag; i++)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
2009 d.elem (i) = elem (i, i);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
2010 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
2011 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
2012 else
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
2013 cerr << "diag: requested diagonal out of range\n";
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
2014
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
2015 return d;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
2016 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
2017
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
2018 // i/o
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
2019
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
2020 ostream&
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
2021 operator << (ostream& os, const ComplexDiagMatrix& a)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
2022 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
2023 Complex ZERO (0.0);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
2024 // int field_width = os.precision () + 7;
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
2025 for (int i = 0; i < a.rows (); i++)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
2026 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
2027 for (int j = 0; j < a.cols (); j++)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
2028 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
2029 if (i == j)
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
2030 os << " " /* setw (field_width) */ << a.elem (i, i);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
2031 else
192
6259f4ed7285 [project @ 1993-11-01 21:06:27 by jwe]
jwe
parents: 161
diff changeset
2032 os << " " /* setw (field_width) */ << ZERO;
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
2033 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
2034 os << "\n";
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
2035 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
2036 return os;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
2037 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
2038
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
2039 /*
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
2040 ;;; Local Variables: ***
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
2041 ;;; mode: C++ ***
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
2042 ;;; page-delimiter: "^/\\*" ***
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
2043 ;;; End: ***
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
2044 */