annotate liboctave/DiagMatrix.cc @ 238:780cbbc57b7c

[project @ 1993-11-30 20:23:04 by jwe]
author jwe
date Tue, 30 Nov 1993 20:23:04 +0000
parents 1a48a1b91489
children e04b38065c55
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
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
4 Copyright (C) 1992, 1993 John W. Eaton
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
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
536 ComplexDiagMatrix
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
537 operator + (const DiagMatrix& m, const ComplexDiagMatrix& a)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
538 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
539 int nr = m.rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
540 int nc = m.cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
541 if (nr != a.rows () || nc != a.cols ())
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
542 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
543 (*current_liboctave_error_handler)
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
544 ("nonconformant matrix addition attempted");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
545 return ComplexDiagMatrix ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
546 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
547
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
548 if (nc == 0 || nr == 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
549 return ComplexDiagMatrix (nr, nc);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
550
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
551 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
552 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
553
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
554 ComplexDiagMatrix
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
555 operator - (const DiagMatrix& m, const ComplexDiagMatrix& a)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
556 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
557 int nr = m.rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
558 int nc = m.cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
559 if (nr != a.rows () || nc != a.cols ())
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
560 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
561 (*current_liboctave_error_handler)
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
562 ("nonconformant matrix subtraction attempted");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
563 return ComplexDiagMatrix ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
564 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
565
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
566 if (nc == 0 || nr == 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
567 return ComplexDiagMatrix (nr, nc);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
568
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
569 return ComplexDiagMatrix (subtract (m.data (), a.data (), m.length ()),
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
570 nr, nc);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
571 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
572
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
573 ComplexDiagMatrix
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
574 product (const DiagMatrix& m, const ComplexDiagMatrix& a)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
575 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
576 int nr = m.rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
577 int nc = m.cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
578 if (nr != a.rows () || nc != a.cols ())
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
579 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
580 (*current_liboctave_error_handler)
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
581 ("nonconformant matrix product attempted");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
582 return ComplexDiagMatrix ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
583 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
584
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
585 if (nc == 0 || nr == 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
586 return ComplexDiagMatrix (nr, nc);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
587
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
588 return ComplexDiagMatrix (multiply (m.data (), a.data (), m.length ()),
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
589 nr, nc);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
590 }
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 // diagonal matrix by matrix -> matrix operations
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
593
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
594 Matrix
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
595 operator + (const DiagMatrix& m, const Matrix& a)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
596 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
597 int nr = m.rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
598 int nc = m.cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
599 if (nr != a.rows () || nc != a.cols ())
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
600 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
601 (*current_liboctave_error_handler)
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
602 ("nonconformant matrix addition attempted");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
603 return Matrix ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
604 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
605
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
606 if (nr == 0 || nc == 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
607 return Matrix (nr, nc);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
608
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
609 Matrix result (a);
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
610 for (int i = 0; i < m.length (); i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
611 result.elem (i, i) += m.elem (i, i);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
612
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
613 return result;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
614 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
615
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
616 Matrix
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
617 operator - (const DiagMatrix& m, const Matrix& a)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
618 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
619 int nr = m.rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
620 int nc = m.cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
621 if (nr != a.rows () || nc != a.cols ())
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
622 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
623 (*current_liboctave_error_handler)
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
624 ("nonconformant matrix subtraction attempted");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
625 return Matrix ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
626 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
627
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
628 if (nr == 0 || nc == 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
629 return Matrix (nr, nc);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
630
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
631 Matrix result (-a);
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
632 for (int i = 0; i < m.length (); i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
633 result.elem (i, i) += m.elem (i, i);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
634
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
635 return result;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
636 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
637
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
638 Matrix
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
639 operator * (const DiagMatrix& m, const Matrix& a)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
640 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
641 int nr = m.rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
642 int nc = m.cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
643 int a_nr = a.rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
644 int a_nc = a.cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
645 if (nc != a_nr)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
646 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
647 (*current_liboctave_error_handler)
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
648 ("nonconformant matrix multiplication attempted");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
649 return Matrix ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
650 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
651
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
652 if (nr == 0 || nc == 0 || a_nc == 0)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
653 return Matrix (nr, a_nc, 0.0);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
654
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
655 Matrix c (nr, a_nc);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
656
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
657 for (int i = 0; i < m.length (); i++)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
658 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
659 if (m.elem (i, i) == 1.0)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
660 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
661 for (int j = 0; j < a_nc; j++)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
662 c.elem (i, j) = a.elem (i, j);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
663 }
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
664 else if (m.elem (i, i) == 0.0)
3
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 for (int j = 0; j < a_nc; j++)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
667 c.elem (i, j) = 0.0;
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 else
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
670 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
671 for (int j = 0; j < a_nc; j++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
672 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
673 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
674 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
675
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
676 if (nr > nc)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
677 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
678 for (int j = 0; j < a_nc; j++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
679 for (int i = a_nr; i < nr; i++)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
680 c.elem (i, j) = 0.0;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
681 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
682
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
683 return c;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
684 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
685
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
686 ComplexMatrix
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
687 operator + (const DiagMatrix& m, const ComplexMatrix& a)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
688 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
689 int nr = m.rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
690 int nc = m.cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
691 if (nr != a.rows () || nc != a.cols ())
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
692 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
693 (*current_liboctave_error_handler)
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
694 ("nonconformant matrix addition attempted");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
695 return ComplexMatrix ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
696 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
697
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
698 if (nr == 0 || nc == 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
699 return ComplexMatrix (nr, nc);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
700
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
701 ComplexMatrix result (a);
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
702 for (int i = 0; i < m.length (); i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
703 result.elem (i, i) += m.elem (i, i);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
704
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
705 return result;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
706 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
707
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
708 ComplexMatrix
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
709 operator - (const DiagMatrix& m, const ComplexMatrix& a)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
710 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
711 int nr = m.rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
712 int nc = m.cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
713 if (nr != a.rows () || nc != a.cols ())
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
714 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
715 (*current_liboctave_error_handler)
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
716 ("nonconformant matrix subtraction attempted");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
717 return ComplexMatrix ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
718 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
719
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
720 if (nr == 0 || nc == 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
721 return ComplexMatrix (nr, nc);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
722
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
723 ComplexMatrix result (-a);
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
724 for (int i = 0; i < m.length (); i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
725 result.elem (i, i) += m.elem (i, i);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
726
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
727 return result;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
728 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
729
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
730 ComplexMatrix
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
731 operator * (const DiagMatrix& m, const ComplexMatrix& a)
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 int nr = m.rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
734 int nc = m.cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
735 int a_nr = a.rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
736 int a_nc = a.cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
737 if (nc != a_nr)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
738 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
739 (*current_liboctave_error_handler)
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
740 ("nonconformant matrix multiplication attempted");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
741 return ComplexMatrix ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
742 }
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 if (nr == 0 || nc == 0 || a_nc == 0)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
745 return ComplexMatrix (nr, nc, 0.0);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
746
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
747 ComplexMatrix c (nr, a_nc);
3
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 i = 0; i < m.length (); i++)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
750 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
751 if (m.elem (i, i) == 1.0)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
752 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
753 for (int j = 0; j < a_nc; j++)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
754 c.elem (i, j) = a.elem (i, j);
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 else if (m.elem (i, i) == 0.0)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
757 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
758 for (int j = 0; j < a_nc; j++)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
759 c.elem (i, j) = 0.0;
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 else
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
762 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
763 for (int j = 0; j < a_nc; j++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
764 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
765 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
766 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
767
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
768 if (nr > nc)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
769 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
770 for (int j = 0; j < a_nc; j++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
771 for (int i = a_nr; i < nr; i++)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
772 c.elem (i, j) = 0.0;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
773 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
774
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
775 return c;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
776 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
777
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
778 // other operations
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
779
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
780 ColumnVector
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
781 DiagMatrix::diag (void) const
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 diag (0);
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 // Could be optimized...
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
787
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
788 ColumnVector
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
789 DiagMatrix::diag (int k) const
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
790 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
791 int nnr = rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
792 int nnc = cols ();
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
793 if (k > 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
794 nnc -= k;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
795 else if (k < 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
796 nnr += k;
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 ColumnVector d;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
799
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
800 if (nnr > 0 && nnc > 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
801 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
802 int ndiag = (nnr < nnc) ? nnr : nnc;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
803
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
804 d.resize (ndiag);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
805
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
806 if (k > 0)
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 for (int i = 0; i < ndiag; i++)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
809 d.elem (i) = elem (i, i+k);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
810 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
811 else if ( k < 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
812 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
813 for (int i = 0; i < ndiag; i++)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
814 d.elem (i) = elem (i-k, i);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
815 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
816 else
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
817 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
818 for (int i = 0; i < ndiag; i++)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
819 d.elem (i) = elem (i, i);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
820 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
821 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
822 else
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
823 cerr << "diag: requested diagonal out of range\n";
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
824
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
825 return d;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
826 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
827
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
828 ostream&
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
829 operator << (ostream& os, const DiagMatrix& a)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
830 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
831 // int field_width = os.precision () + 7;
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
832 for (int i = 0; i < a.rows (); i++)
3
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 for (int j = 0; j < a.cols (); j++)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
835 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
836 if (i == j)
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
837 os << " " /* setw (field_width) */ << a.elem (i, i);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
838 else
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
839 os << " " /* setw (field_width) */ << 0.0;
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
840 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
841 os << "\n";
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
842 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
843 return os;
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 /*
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
847 * Complex Diagonal Matrix class
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
848 */
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
849
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
850 ComplexDiagMatrix::ComplexDiagMatrix (const RowVector& a)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
851 : DiagArray<Complex> (a.length ())
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
852 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
853 for (int i = 0; i < length (); i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
854 elem (i, i) = a.elem (i);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
855 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
856
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
857 ComplexDiagMatrix::ComplexDiagMatrix (const ColumnVector& a)
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
858 : DiagArray<Complex> (a.length ())
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
859 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
860 for (int i = 0; i < length (); i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
861 elem (i, i) = a.elem (i);
3
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 ComplexDiagMatrix::ComplexDiagMatrix (const DiagMatrix& a)
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
865 : DiagArray<Complex> (a.rows (), a.cols ())
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
866 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
867 for (int i = 0; i < length (); i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
868 elem (i, i) = a.elem (i, i);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
869 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
870
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
871 #if 0
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
872 ComplexDiagMatrix&
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
873 ComplexDiagMatrix::resize (int r, int c)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
874 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
875 if (r < 0 || c < 0)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
876 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
877 (*current_liboctave_error_handler)
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
878 ("can't resize to negative dimensions");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
879 return *this;
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
880 }
3
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 int new_len = r < c ? r : c;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
883 Complex *new_data = (Complex *) NULL;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
884 if (new_len > 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 new_data = new Complex [new_len];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
887
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
888 int min_len = new_len < len ? new_len : len;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
889
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
890 for (int i = 0; i < min_len; i++)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
891 new_data[i] = data[i];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
892 }
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 delete [] data;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
895 nr = r;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
896 nc = c;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
897 len = new_len;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
898 data = new_data;
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 return *this;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
901 }
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 ComplexDiagMatrix&
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
904 ComplexDiagMatrix::resize (int r, int c, double val)
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 if (r < 0 || c < 0)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
907 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
908 (*current_liboctave_error_handler)
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
909 ("can't resize to negative dimensions");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
910 return *this;
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
911 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
912
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
913 int new_len = r < c ? r : c;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
914 Complex *new_data = (Complex *) NULL;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
915 if (new_len > 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
916 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
917 new_data = new Complex [new_len];
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 int min_len = new_len < len ? new_len : len;
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 for (int i = 0; i < min_len; i++)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
922 new_data[i] = data[i];
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 for (i = min_len; i < new_len; i++)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
925 new_data[i] = val;
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
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
928 delete [] data;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
929 nr = r;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
930 nc = c;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
931 len = new_len;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
932 data = new_data;
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 return *this;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
935 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
936
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
937 ComplexDiagMatrix&
161
21b599370728 [project @ 1993-10-16 17:20:32 by jwe]
jwe
parents: 3
diff changeset
938 ComplexDiagMatrix::resize (int r, int c, const Complex& val)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
939 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
940 if (r < 0 || c < 0)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
941 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
942 (*current_liboctave_error_handler)
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
943 ("can't resize to negative dimensions");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
944 return *this;
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
945 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
946
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
947 int new_len = r < c ? r : c;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
948 Complex *new_data = (Complex *) NULL;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
949 if (new_len > 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
950 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
951 new_data = new Complex [new_len];
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 int min_len = new_len < len ? new_len : len;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
954
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
955 for (int i = 0; i < min_len; i++)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
956 new_data[i] = data[i];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
957
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
958 for (i = min_len; i < new_len; i++)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
959 new_data[i] = val;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
960 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
961
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
962 delete [] data;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
963 nr = r;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
964 nc = c;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
965 len = new_len;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
966 data = new_data;
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 return *this;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
969 }
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
970 #endif
3
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 int
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
973 ComplexDiagMatrix::operator == (const ComplexDiagMatrix& a) const
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
974 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
975 if (rows () != a.rows () || cols () != a.cols ())
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
976 return 0;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
977
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
978 return equal (data (), a.data (), length ());
3
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 int
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
982 ComplexDiagMatrix::operator != (const ComplexDiagMatrix& a) const
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
983 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
984 return !(*this == a);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
985 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
986
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
987 ComplexDiagMatrix
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
988 ComplexDiagMatrix::hermitian (void) const
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
989 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
990 return ComplexDiagMatrix (conj_dup (data (), length ()), cols (), rows ());
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
991 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
992
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
993 ComplexDiagMatrix&
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
994 ComplexDiagMatrix::fill (double val)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
995 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
996 for (int i = 0; i < length (); i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
997 elem (i, i) = val;
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
998 return *this;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
999 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1000
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1001 ComplexDiagMatrix&
161
21b599370728 [project @ 1993-10-16 17:20:32 by jwe]
jwe
parents: 3
diff changeset
1002 ComplexDiagMatrix::fill (const Complex& val)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1003 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1004 for (int i = 0; i < length (); i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1005 elem (i, i) = val;
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1006 return *this;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1007 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1008
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1009 ComplexDiagMatrix&
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1010 ComplexDiagMatrix::fill (double val, int beg, int end)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1011 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1012 if (beg < 0 || end >= length () || end < beg)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1013 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1014 (*current_liboctave_error_handler) ("range error for fill");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1015 return *this;
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1016 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1017
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1018 for (int i = beg; i < end; i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1019 elem (i, i) = val;
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1020
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1021 return *this;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1022 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1023
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1024 ComplexDiagMatrix&
161
21b599370728 [project @ 1993-10-16 17:20:32 by jwe]
jwe
parents: 3
diff changeset
1025 ComplexDiagMatrix::fill (const Complex& val, int beg, int end)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1026 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1027 if (beg < 0 || end >= length () || end < beg)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1028 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1029 (*current_liboctave_error_handler) ("range error for fill");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1030 return *this;
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1031 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1032
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1033 for (int i = beg; i < end; i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1034 elem (i, i) = val;
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1035
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1036 return *this;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1037 }
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 ComplexDiagMatrix&
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1040 ComplexDiagMatrix::fill (const ColumnVector& a)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1041 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1042 int len = length ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1043 if (a.length () != len)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1044 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1045 (*current_liboctave_error_handler) ("range error for fill");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1046 return *this;
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1047 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1048
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1049 for (int i = 0; i < len; i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1050 elem (i, i) = a.elem (i);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1051
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1052 return *this;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1053 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1054
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1055 ComplexDiagMatrix&
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1056 ComplexDiagMatrix::fill (const ComplexColumnVector& a)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1057 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1058 int len = length ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1059 if (a.length () != len)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1060 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1061 (*current_liboctave_error_handler) ("range error for fill");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1062 return *this;
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1063 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1064
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1065 for (int i = 0; i < len; i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1066 elem (i, i) = a.elem (i);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1067
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1068 return *this;
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 (const RowVector& a)
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 int len = length ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1075 if (a.length () != len)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1076 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1077 (*current_liboctave_error_handler) ("range error for fill");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1078 return *this;
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1079 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1080
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1081 for (int i = 0; i < len; i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1082 elem (i, i) = a.elem (i);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1083
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 (const ComplexRowVector& a)
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 int len = length ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1091 if (a.length () != len)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1092 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1093 (*current_liboctave_error_handler) ("range error for fill");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1094 return *this;
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1095 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1096
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1097 for (int i = 0; i < len; i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1098 elem (i, i) = a.elem (i);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1099
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1100 return *this;
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
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1103 ComplexDiagMatrix&
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1104 ComplexDiagMatrix::fill (const ColumnVector& a, int beg)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1105 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1106 int a_len = a.length ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1107 if (beg < 0 || beg + a_len >= length ())
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1108 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1109 (*current_liboctave_error_handler) ("range error for fill");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1110 return *this;
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1111 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1112
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1113 for (int i = 0; i < a_len; i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1114 elem (i+beg, i+beg) = a.elem (i);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1115
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1116 return *this;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1117 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1118
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1119 ComplexDiagMatrix&
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1120 ComplexDiagMatrix::fill (const ComplexColumnVector& a, int beg)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1121 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1122 int a_len = a.length ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1123 if (beg < 0 || beg + a_len >= length ())
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1124 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1125 (*current_liboctave_error_handler) ("range error for fill");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1126 return *this;
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1127 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1128
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1129 for (int i = 0; i < a_len; i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1130 elem (i+beg, i+beg) = a.elem (i);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1131
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1132 return *this;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1133 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1134
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1135 ComplexDiagMatrix&
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1136 ComplexDiagMatrix::fill (const RowVector& a, int beg)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1137 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1138 int a_len = a.length ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1139 if (beg < 0 || beg + a_len >= length ())
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1140 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1141 (*current_liboctave_error_handler) ("range error for fill");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1142 return *this;
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1143 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1144
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1145 for (int i = 0; i < a_len; i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1146 elem (i+beg, i+beg) = a.elem (i);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1147
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1148 return *this;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1149 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1150
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1151 ComplexDiagMatrix&
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1152 ComplexDiagMatrix::fill (const ComplexRowVector& a, int beg)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1153 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1154 int a_len = a.length ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1155 if (beg < 0 || beg + a_len >= length ())
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1156 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1157 (*current_liboctave_error_handler) ("range error for fill");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1158 return *this;
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1159 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1160
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1161 for (int i = 0; i < a_len; i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1162 elem (i+beg, i+beg) = a.elem (i);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1163
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1164 return *this;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1165 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1166
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1167 ComplexDiagMatrix
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1168 ComplexDiagMatrix::transpose (void) const
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1169 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1170 return ComplexDiagMatrix (dup (data (), length ()), cols (), rows ());
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1171 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1172
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1173 DiagMatrix
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1174 real (const ComplexDiagMatrix& a)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1175 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1176 DiagMatrix retval;
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1177 int a_len = a.length ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1178 if (a_len > 0)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1179 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
1180 a.cols ());
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1181 return retval;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1182 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1183
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1184 DiagMatrix
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1185 imag (const ComplexDiagMatrix& a)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1186 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1187 DiagMatrix retval;
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1188 int a_len = a.length ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1189 if (a_len > 0)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1190 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
1191 a.cols ());
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1192 return retval;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1193 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1194
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1195 ComplexDiagMatrix
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1196 conj (const ComplexDiagMatrix& a)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1197 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1198 ComplexDiagMatrix retval;
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1199 int a_len = a.length ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1200 if (a_len > 0)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1201 retval = ComplexDiagMatrix (conj_dup (a.data (), a_len),
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1202 a.rows (), a.cols ());
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1203 return retval;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1204 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1205
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1206 // resize is the destructive analog for this one
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1207
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1208 ComplexMatrix
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1209 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
1210 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1211 if (r1 > r2) { int tmp = r1; r1 = r2; r2 = tmp; }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1212 if (c1 > c2) { int tmp = c1; c1 = c2; c2 = tmp; }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1213
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1214 int new_r = r2 - r1 + 1;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1215 int new_c = c2 - c1 + 1;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1216
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1217 ComplexMatrix result (new_r, new_c);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1218
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1219 for (int j = 0; j < new_c; j++)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1220 for (int i = 0; i < new_r; i++)
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1221 result.elem (i, j) = elem (r1+i, c1+j);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1222
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1223 return result;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1224 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1225
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1226 // extract row or column i.
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 ComplexRowVector
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1229 ComplexDiagMatrix::row (int i) const
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1230 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1231 int nr = rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1232 int nc = cols ();
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1233 if (i < 0 || i >= nr)
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) ("invalid row selection");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1236 return RowVector ();
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
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1239 ComplexRowVector retval (nc, 0.0);
192
6259f4ed7285 [project @ 1993-11-01 21:06:27 by jwe]
jwe
parents: 161
diff changeset
1240 if (nr <= nc || (nr > nc && i < nc))
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1241 retval.elem (i) = elem (i, i);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1242
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1243 return retval;
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
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1246 ComplexRowVector
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1247 ComplexDiagMatrix::row (char *s) const
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1248 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1249 if (s == (char *) NULL)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1250 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1251 (*current_liboctave_error_handler) ("invalid row selection");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1252 return ComplexRowVector ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1253 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1254
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1255 char c = *s;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1256 if (c == 'f' || c == 'F')
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1257 return row (0);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1258 else if (c == 'l' || c == 'L')
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1259 return row (rows () - 1);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1260 else
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1261 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1262 (*current_liboctave_error_handler) ("invalid row selection");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1263 return ComplexRowVector ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1264 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1265 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1266
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1267 ComplexColumnVector
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1268 ComplexDiagMatrix::column (int i) const
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1269 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1270 int nr = rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1271 int nc = cols ();
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1272 if (i < 0 || i >= nc)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1273 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1274 (*current_liboctave_error_handler) ("invalid column selection");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1275 return ColumnVector ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1276 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1277
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1278 ComplexColumnVector retval (nr, 0.0);
192
6259f4ed7285 [project @ 1993-11-01 21:06:27 by jwe]
jwe
parents: 161
diff changeset
1279 if (nr >= nc || (nr < nc && i < nr))
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1280 retval.elem (i) = elem (i, i);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1281
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1282 return retval;
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
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1285 ComplexColumnVector
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1286 ComplexDiagMatrix::column (char *s) const
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1287 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1288 if (s == (char *) NULL)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1289 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1290 (*current_liboctave_error_handler) ("invalid column selection");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1291 return ColumnVector ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1292 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1293
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1294 char c = *s;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1295 if (c == 'f' || c == 'F')
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1296 return column (0);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1297 else if (c == 'l' || c == 'L')
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1298 return column (cols () - 1);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1299 else
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1300 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1301 (*current_liboctave_error_handler) ("invalid column selection");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1302 return ColumnVector ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1303 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1304 }
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 ComplexDiagMatrix
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1307 ComplexDiagMatrix::inverse (void) const
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1308 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1309 int info;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1310 return inverse (info);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1311 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1312
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1313 ComplexDiagMatrix
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1314 ComplexDiagMatrix::inverse (int& info) const
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1315 {
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1316 int nr = rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1317 int nc = cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1318 if (nr != nc)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1319 {
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1320 (*current_liboctave_error_handler) ("inverse requires square matrix");
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1321 return DiagMatrix ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1322 }
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1323
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1324 ComplexDiagMatrix retval (nr, nc);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1325
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1326 info = 0;
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1327 for (int i = 0; i < length (); i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1328 {
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1329 if (elem (i, i) == 0.0)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1330 {
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1331 info = -1;
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1332 return *this;
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1333 }
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1334 else
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1335 retval.elem (i, i) = 1.0 / elem (i, i);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1336 }
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1337
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1338 return *this;
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1339 }
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1340
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1341 // diagonal matrix by diagonal matrix -> diagonal matrix operations
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1342
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1343 ComplexDiagMatrix&
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1344 ComplexDiagMatrix::operator += (const DiagMatrix& a)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1345 {
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1346 int nr = rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1347 int nc = cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1348 if (nr != a.rows () || nc != a.cols ())
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1349 {
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1350 (*current_liboctave_error_handler)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1351 ("nonconformant matrix += operation attempted");
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1352 return *this;
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1353 }
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1354
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1355 if (nr == 0 || nc == 0)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1356 return *this;
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1357
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1358 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
1359
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1360 add2 (d, a.data (), length ());
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1361 return *this;
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1362 }
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1363
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1364 ComplexDiagMatrix&
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1365 ComplexDiagMatrix::operator -= (const DiagMatrix& a)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1366 {
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1367 int nr = rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1368 int nc = cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1369 if (nr != a.rows () || nc != a.cols ())
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1370 {
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1371 (*current_liboctave_error_handler)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1372 ("nonconformant matrix -= operation attempted");
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1373 return *this;
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1374 }
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1375
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1376 if (nr == 0 || nc == 0)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1377 return *this;
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1378
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1379 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
1380
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1381 subtract2 (d, a.data (), length ());
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1382 return *this;
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1383 }
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1384
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1385 ComplexDiagMatrix&
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1386 ComplexDiagMatrix::operator += (const ComplexDiagMatrix& a)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1387 {
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1388 int nr = rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1389 int nc = cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1390 if (nr != a.rows () || nc != a.cols ())
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1391 {
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1392 (*current_liboctave_error_handler)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1393 ("nonconformant matrix += operation attempted");
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1394 return *this;
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1395 }
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1396
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1397 if (nr == 0 || nc == 0)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1398 return *this;
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1399
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1400 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
1401
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1402 add2 (d, a.data (), length ());
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1403 return *this;
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1404 }
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1405
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1406 ComplexDiagMatrix&
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1407 ComplexDiagMatrix::operator -= (const ComplexDiagMatrix& a)
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 int nr = rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1410 int nc = cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1411 if (nr != a.rows () || nc != a.cols ())
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1412 {
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1413 (*current_liboctave_error_handler)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1414 ("nonconformant matrix -= operation attempted");
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1415 return *this;
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1416 }
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 if (nr == 0 || nc == 0)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1419 return *this;
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 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
1422
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1423 subtract2 (d, a.data (), length ());
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1424 return *this;
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1425 }
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1426
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1427 // diagonal matrix by scalar -> matrix operations
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1428
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1429 ComplexMatrix
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1430 operator + (const ComplexDiagMatrix& a, double s)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1431 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1432 ComplexMatrix tmp (a.rows (), a.cols (), s);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1433 return a + tmp;
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1434 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1435
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1436 ComplexMatrix
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1437 operator - (const ComplexDiagMatrix& a, double s)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1438 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1439 ComplexMatrix tmp (a.rows (), a.cols (), -s);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1440 return a + tmp;
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1441 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1442
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1443 ComplexMatrix
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1444 operator + (const ComplexDiagMatrix& a, const Complex& s)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1445 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1446 ComplexMatrix tmp (a.rows (), a.cols (), s);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1447 return a + tmp;
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1448 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1449
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1450 ComplexMatrix
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1451 operator - (const ComplexDiagMatrix& a, const Complex& s)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1452 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1453 ComplexMatrix tmp (a.rows (), a.cols (), -s);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1454 return a + tmp;
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1455 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1456
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1457 // diagonal matrix by scalar -> diagonal matrix operations
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1458
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1459 ComplexDiagMatrix
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1460 operator * (const ComplexDiagMatrix& a, double s)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1461 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1462 return ComplexDiagMatrix (multiply (a.data (), a.length (), s),
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1463 a.rows (), a.cols ());
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1464 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1465
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1466 ComplexDiagMatrix
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1467 operator / (const ComplexDiagMatrix& a, double s)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1468 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1469 return ComplexDiagMatrix (divide (a.data (), a.length (), s),
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1470 a.rows (), a.cols ());
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1471 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1472
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1473 // scalar by diagonal matrix -> matrix operations
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1474
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1475 ComplexMatrix
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1476 operator + (double s, const ComplexDiagMatrix& a)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1477 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1478 ComplexMatrix tmp (a.rows (), a.cols (), s);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1479 return tmp + a;
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1480 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1481
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1482 ComplexMatrix
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1483 operator - (double s, const ComplexDiagMatrix& a)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1484 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1485 ComplexMatrix tmp (a.rows (), a.cols (), s);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1486 return tmp - a;
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1487 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1488
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1489 ComplexMatrix
161
21b599370728 [project @ 1993-10-16 17:20:32 by jwe]
jwe
parents: 3
diff changeset
1490 operator + (const Complex& s, const ComplexDiagMatrix& a)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1491 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1492 ComplexMatrix tmp (a.rows (), a.cols (), s);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1493 return tmp + a;
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1494 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1495
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1496 ComplexMatrix
161
21b599370728 [project @ 1993-10-16 17:20:32 by jwe]
jwe
parents: 3
diff changeset
1497 operator - (const Complex& s, const ComplexDiagMatrix& a)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1498 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1499 ComplexMatrix tmp (a.rows (), a.cols (), s);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1500 return tmp - a;
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1501 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1502
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1503 // scalar by diagonal matrix -> diagonal matrix operations
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1504
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1505 ComplexDiagMatrix
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1506 operator * (double s, const ComplexDiagMatrix& a)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1507 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1508 return ComplexDiagMatrix (multiply (a.data (), a.length (), s),
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1509 a.rows (), a.cols ());
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1510 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1511
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1512 // diagonal matrix by column vector -> column vector operations
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 ComplexColumnVector
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1515 operator * (const ComplexDiagMatrix& m, const ColumnVector& a)
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 int nr = m.rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1518 int nc = m.cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1519 int a_len = a.length ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1520 if (nc != a_len)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1521 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1522 (*current_liboctave_error_handler)
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1523 ("nonconformant matrix muliplication attempted");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1524 return ComplexColumnVector ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1525 }
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 if (nc == 0 || nr == 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1528 return ComplexColumnVector (0);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1529
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1530 ComplexColumnVector result (nr);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1531
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1532 for (int i = 0; i < a_len; i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1533 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
1534
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1535 for (i = a_len; i < nr; i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1536 result.elem (i) = 0.0;
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1537
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1538 return result;
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1539 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1540
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1541 ComplexColumnVector
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1542 operator * (const ComplexDiagMatrix& m, const ComplexColumnVector& a)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1543 {
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1544 int nr = m.rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1545 int nc = m.cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1546 int a_len = a.length ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1547 if (nc != a_len)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1548 {
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1549 (*current_liboctave_error_handler)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1550 ("nonconformant matrix muliplication attempted");
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1551 return ComplexColumnVector ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1552 }
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1553
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1554 if (nc == 0 || nr == 0)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1555 return ComplexColumnVector (0);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1556
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1557 ComplexColumnVector result (nr);
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1558
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1559 for (int i = 0; i < a_len; i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1560 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
1561
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1562 for (i = a_len; i < nr; i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1563 result.elem (i) = 0.0;
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1564
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1565 return result;
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
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1568 // diagonal matrix by diagonal matrix -> diagonal matrix operations
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1569
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1570 ComplexDiagMatrix
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1571 operator + (const ComplexDiagMatrix& m, const DiagMatrix& a)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1572 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1573 int nr = m.rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1574 int nc = m.cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1575 if (nr != a.rows () || nc != a.cols ())
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1576 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1577 (*current_liboctave_error_handler)
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1578 ("nonconformant matrix addition attempted");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1579 return ComplexDiagMatrix ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1580 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1581
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1582 if (nr == 0 || nc == 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1583 return ComplexDiagMatrix (nr, nc);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1584
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1585 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
1586 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1587
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1588 ComplexDiagMatrix
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1589 operator - (const ComplexDiagMatrix& m, const DiagMatrix& a)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1590 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1591 int nr = m.rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1592 int nc = m.cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1593 if (nr != a.rows () || nc != a.cols ())
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1594 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1595 (*current_liboctave_error_handler)
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1596 ("nonconformant matrix subtraction attempted");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1597 return ComplexDiagMatrix ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1598 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1599
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1600 if (nr == 0 || nc == 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1601 return ComplexDiagMatrix (nr, nc);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1602
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1603 return ComplexDiagMatrix (subtract (m.data (), a.data (), m.length ()),
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1604 nr, nc);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1605 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1606
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1607 ComplexDiagMatrix
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1608 product (const ComplexDiagMatrix& m, const DiagMatrix& a)
3
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 int nr = m.rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1611 int nc = m.cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1612 if (nr != a.rows () || nc != a.cols ())
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1613 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1614 (*current_liboctave_error_handler)
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1615 ("nonconformant matrix product attempted");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1616 return ComplexDiagMatrix ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1617 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1618
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1619 if (nr == 0 || nc == 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1620 return ComplexDiagMatrix (nr, nc);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1621
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1622 return ComplexDiagMatrix (multiply (m.data (), a.data (), m.length ()),
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1623 nr, nc);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1624 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1625
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1626 // diagonal matrix by matrix -> matrix operations
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1627
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1628 ComplexMatrix
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1629 operator + (const ComplexDiagMatrix& m, const Matrix& a)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1630 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1631 int nr = m.rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1632 int nc = m.cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1633 if (nr != a.rows () || nc != a.cols ())
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1634 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1635 (*current_liboctave_error_handler)
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1636 ("nonconformant matrix addition attempted");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1637 return ComplexMatrix ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1638 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1639
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1640 if (nr == 0 || nc == 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1641 return ComplexMatrix (nr, nc);
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 ComplexMatrix result (a);
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1644 for (int i = 0; i < m.length (); i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1645 result.elem (i, i) += m.elem (i, i);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1646
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1647 return result;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1648 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1649
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1650 ComplexMatrix
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1651 operator - (const ComplexDiagMatrix& m, const Matrix& a)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1652 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1653 int nr = m.rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1654 int nc = m.cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1655 if (nr != a.rows () || nc != a.cols ())
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1656 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1657 (*current_liboctave_error_handler)
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1658 ("nonconformant matrix subtraction attempted");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1659 return ComplexMatrix ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1660 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1661
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1662 if (nr == 0 || nc == 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1663 return ComplexMatrix (nr, nc);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1664
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1665 ComplexMatrix result (-a);
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1666 for (int i = 0; i < m.length (); i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1667 result.elem (i, i) += m.elem (i, i);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1668
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1669 return result;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1670 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1671
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1672 ComplexMatrix
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1673 operator * (const ComplexDiagMatrix& m, const Matrix& a)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1674 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1675 int nr = m.rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1676 int nc = m.cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1677 int a_nr = a.rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1678 int a_nc = a.cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1679 if (nc != a_nr)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1680 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1681 (*current_liboctave_error_handler)
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1682 ("nonconformant matrix multiplication attempted");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1683 return ComplexMatrix ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1684 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1685
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1686 if (nr == 0 || nc == 0 || a_nc == 0)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1687 return ComplexMatrix (nr, a_nc, 0.0);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1688
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1689 ComplexMatrix c (nr, a_nc);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1690
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1691 for (int i = 0; i < m.length (); i++)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1692 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1693 if (m.elem (i, i) == 1.0)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1694 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1695 for (int j = 0; j < a_nc; j++)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1696 c.elem (i, j) = a.elem (i, j);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1697 }
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1698 else if (m.elem (i, i) == 0.0)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1699 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1700 for (int j = 0; j < a_nc; j++)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1701 c.elem (i, j) = 0.0;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1702 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1703 else
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1704 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1705 for (int j = 0; j < a_nc; j++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1706 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
1707 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1708 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1709
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1710 if (nr > nc)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1711 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1712 for (int j = 0; j < a_nc; j++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1713 for (int i = a_nr; i < nr; i++)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1714 c.elem (i, j) = 0.0;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1715 }
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 return c;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1718 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1719
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1720 ComplexMatrix
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1721 operator + (const ComplexDiagMatrix& m, const ComplexMatrix& a)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1722 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1723 int nr = m.rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1724 int nc = m.cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1725 if (nr != a.rows () || nc != a.cols ())
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1726 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1727 (*current_liboctave_error_handler)
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1728 ("nonconformant matrix addition attempted");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1729 return ComplexMatrix ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1730 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1731
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1732 if (nr == 0 || nc == 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1733 return ComplexMatrix (nr, nc);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1734
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1735 ComplexMatrix result (a);
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1736 for (int i = 0; i < m.length (); i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1737 result.elem (i, i) += m.elem (i, i);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1738
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1739 return result;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1740 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1741
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1742 ComplexMatrix
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1743 operator - (const ComplexDiagMatrix& m, const ComplexMatrix& a)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1744 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1745 int nr = m.rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1746 int nc = m.cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1747 if (nr != a.rows () || nc != a.cols ())
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1748 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1749 (*current_liboctave_error_handler)
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1750 ("nonconformant matrix subtraction attempted");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1751 return ComplexMatrix ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1752 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1753
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1754 if (nr == 0 || nc == 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1755 return ComplexMatrix (nr, nc);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1756
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1757 ComplexMatrix result (-a);
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1758 for (int i = 0; i < m.length (); i++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1759 result.elem (i, i) += m.elem (i, i);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1760
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1761 return result;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1762 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1763
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1764 ComplexMatrix
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1765 operator * (const ComplexDiagMatrix& m, const ComplexMatrix& a)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1766 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1767 int nr = m.rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1768 int nc = m.cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1769 int a_nr = a.rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1770 int a_nc = a.cols ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1771 if (nc != a_nr)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1772 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1773 (*current_liboctave_error_handler)
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1774 ("nonconformant matrix multiplication attempted");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1775 return ComplexMatrix ();
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 192
diff changeset
1776 }
3
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 if (nr == 0 || nc == 0 || a_nc == 0)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1779 return ComplexMatrix (nr, a_nc, 0.0);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1780
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1781 ComplexMatrix c (nr, a_nc);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1782
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1783 for (int i = 0; i < m.length (); i++)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1784 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1785 if (m.elem (i, i) == 1.0)
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 for (int j = 0; j < a_nc; j++)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1788 c.elem (i, j) = a.elem (i, j);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1789 }
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1790 else if (m.elem (i, i) == 0.0)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1791 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1792 for (int j = 0; j < a_nc; j++)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1793 c.elem (i, j) = 0.0;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1794 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1795 else
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1796 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1797 for (int j = 0; j < a_nc; j++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1798 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
1799 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1800 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1801
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1802 if (nr > nc)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1803 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1804 for (int j = 0; j < a_nc; j++)
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1805 for (int i = a_nr; i < nr; i++)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1806 c.elem (i, j) = 0.0;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1807 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1808
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1809 return c;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1810 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1811
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1812 // other operations
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1813
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1814 ComplexColumnVector
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1815 ComplexDiagMatrix::diag (void) const
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1816 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1817 return diag (0);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1818 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1819
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1820 // Could be optimized...
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1821
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1822 ComplexColumnVector
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1823 ComplexDiagMatrix::diag (int k) const
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1824 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1825 int nnr = rows ();
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1826 int nnc = cols ();
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1827 if (k > 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1828 nnc -= k;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1829 else if (k < 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1830 nnr += k;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1831
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1832 ComplexColumnVector d;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1833
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1834 if (nnr > 0 && nnc > 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1835 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1836 int ndiag = (nnr < nnc) ? nnr : nnc;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1837
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1838 d.resize (ndiag);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1839
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1840 if (k > 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1841 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1842 for (int i = 0; i < ndiag; i++)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1843 d.elem (i) = elem (i, i+k);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1844 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1845 else if ( k < 0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1846 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1847 for (int i = 0; i < ndiag; i++)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1848 d.elem (i) = elem (i-k, i);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1849 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1850 else
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1851 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1852 for (int i = 0; i < ndiag; i++)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1853 d.elem (i) = elem (i, i);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1854 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1855 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1856 else
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1857 cerr << "diag: requested diagonal out of range\n";
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 return d;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1860 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1861
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1862 // i/o
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 ostream&
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1865 operator << (ostream& os, const ComplexDiagMatrix& a)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1866 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1867 Complex ZERO (0.0);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1868 // int field_width = os.precision () + 7;
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1869 for (int i = 0; i < a.rows (); i++)
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1870 {
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1871 for (int j = 0; j < a.cols (); j++)
3
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 if (i == j)
238
780cbbc57b7c [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents: 227
diff changeset
1874 os << " " /* setw (field_width) */ << a.elem (i, i);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1875 else
192
6259f4ed7285 [project @ 1993-11-01 21:06:27 by jwe]
jwe
parents: 161
diff changeset
1876 os << " " /* setw (field_width) */ << ZERO;
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1877 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1878 os << "\n";
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1879 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1880 return os;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1881 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1882
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1883 /*
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1884 ;;; Local Variables: ***
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1885 ;;; mode: C++ ***
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1886 ;;; page-delimiter: "^/\\*" ***
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1887 ;;; End: ***
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1888 */