annotate liboctave/dMatrix.cc @ 2317:8c09c04f7747

[project @ 1996-07-14 22:30:15 by jwe]
author jwe
date Sun, 14 Jul 1996 22:40:35 +0000
parents 1b57120c997b
children b369227ce3d2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1993
1b57120c997b [project @ 1996-03-03 01:16:15 by jwe]
jwe
parents: 1968
diff changeset
1 // Matrix manipulations.
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2 /*
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3
1882
1281a23a34dd [project @ 1996-02-05 18:11:52 by jwe]
jwe
parents: 1847
diff changeset
4 Copyright (C) 1996 John W. Eaton
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
5
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
6 This file is part of Octave.
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
7
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
8 Octave is free software; you can redistribute it and/or modify it
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
9 under the terms of the GNU General Public License as published by the
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
10 Free Software Foundation; either version 2, or (at your option) any
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
11 later version.
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
12
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
13 Octave is distributed in the hope that it will be useful, but WITHOUT
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
16 for more details.
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
17
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
18 You should have received a copy of the GNU General Public License
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
19 along with Octave; see the file COPYING. If not, write to the Free
1315
611d403c7f3d [project @ 1995-06-25 19:56:32 by jwe]
jwe
parents: 1296
diff changeset
20 Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
21
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
22 */
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
23
1296
f93b7fa5e113 [project @ 1995-05-01 18:30:08 by jwe]
jwe
parents: 1253
diff changeset
24 #if defined (__GNUG__)
f93b7fa5e113 [project @ 1995-05-01 18:30:08 by jwe]
jwe
parents: 1253
diff changeset
25 #pragma implementation
f93b7fa5e113 [project @ 1995-05-01 18:30:08 by jwe]
jwe
parents: 1253
diff changeset
26 #endif
f93b7fa5e113 [project @ 1995-05-01 18:30:08 by jwe]
jwe
parents: 1253
diff changeset
27
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
28 #ifdef HAVE_CONFIG_H
1192
b6360f2d4fa6 [project @ 1995-03-30 21:38:35 by jwe]
jwe
parents: 1011
diff changeset
29 #include <config.h>
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
30 #endif
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
31
1367
9f9131a8d706 [project @ 1995-09-06 00:07:03 by jwe]
jwe
parents: 1365
diff changeset
32 #include <cfloat>
9f9131a8d706 [project @ 1995-09-06 00:07:03 by jwe]
jwe
parents: 1365
diff changeset
33
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
34 #include <iostream.h>
1367
9f9131a8d706 [project @ 1995-09-06 00:07:03 by jwe]
jwe
parents: 1365
diff changeset
35
2317
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
36 #include "byte-swap.h"
1819
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
37 #include "dbleAEPBAL.h"
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
38 #include "dbleDET.h"
1819
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
39 #include "dbleSCHUR.h"
740
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
40 #include "dbleSVD.h"
1847
2ffe49eb95a5 [project @ 1996-02-03 12:47:55 by jwe]
jwe
parents: 1819
diff changeset
41 #include "f77-fcn.h"
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
42 #include "lo-error.h"
1968
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1959
diff changeset
43 #include "lo-utils.h"
1367
9f9131a8d706 [project @ 1995-09-06 00:07:03 by jwe]
jwe
parents: 1365
diff changeset
44 #include "mx-base.h"
9f9131a8d706 [project @ 1995-09-06 00:07:03 by jwe]
jwe
parents: 1365
diff changeset
45 #include "mx-inlines.cc"
1650
23aa282707e8 [project @ 1995-12-20 06:53:12 by jwe]
jwe
parents: 1574
diff changeset
46 #include "oct-cmplx.h"
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
47
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
48 // Fortran functions we call.
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
49
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
50 extern "C"
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
51 {
1253
bb67a902760b [project @ 1995-04-11 16:35:23 by jwe]
jwe
parents: 1251
diff changeset
52 int F77_FCN (dgemm, DGEMM) (const char*, const char*, const int&,
bb67a902760b [project @ 1995-04-11 16:35:23 by jwe]
jwe
parents: 1251
diff changeset
53 const int&, const int&, const double&,
bb67a902760b [project @ 1995-04-11 16:35:23 by jwe]
jwe
parents: 1251
diff changeset
54 const double*, const int&,
bb67a902760b [project @ 1995-04-11 16:35:23 by jwe]
jwe
parents: 1251
diff changeset
55 const double*, const int&,
bb67a902760b [project @ 1995-04-11 16:35:23 by jwe]
jwe
parents: 1251
diff changeset
56 const double&, double*, const int&,
bb67a902760b [project @ 1995-04-11 16:35:23 by jwe]
jwe
parents: 1251
diff changeset
57 long, long);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
58
1253
bb67a902760b [project @ 1995-04-11 16:35:23 by jwe]
jwe
parents: 1251
diff changeset
59 int F77_FCN (dgeco, DGECO) (double*, const int&, const int&, int*,
bb67a902760b [project @ 1995-04-11 16:35:23 by jwe]
jwe
parents: 1251
diff changeset
60 double&, double*);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
61
1253
bb67a902760b [project @ 1995-04-11 16:35:23 by jwe]
jwe
parents: 1251
diff changeset
62 int F77_FCN (dgesl, DGESL) (const double*, const int&, const int&,
bb67a902760b [project @ 1995-04-11 16:35:23 by jwe]
jwe
parents: 1251
diff changeset
63 const int*, double*, const int&);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
64
1253
bb67a902760b [project @ 1995-04-11 16:35:23 by jwe]
jwe
parents: 1251
diff changeset
65 int F77_FCN (dgedi, DGEDI) (double*, const int&, const int&,
bb67a902760b [project @ 1995-04-11 16:35:23 by jwe]
jwe
parents: 1251
diff changeset
66 const int*, double*, double*,
bb67a902760b [project @ 1995-04-11 16:35:23 by jwe]
jwe
parents: 1251
diff changeset
67 const int&);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
68
1253
bb67a902760b [project @ 1995-04-11 16:35:23 by jwe]
jwe
parents: 1251
diff changeset
69 int F77_FCN (dgelss, DGELSS) (const int&, const int&, const int&,
bb67a902760b [project @ 1995-04-11 16:35:23 by jwe]
jwe
parents: 1251
diff changeset
70 double*, const int&, double*,
bb67a902760b [project @ 1995-04-11 16:35:23 by jwe]
jwe
parents: 1251
diff changeset
71 const int&, double*, double&, int&,
bb67a902760b [project @ 1995-04-11 16:35:23 by jwe]
jwe
parents: 1251
diff changeset
72 double*, const int&, int&);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
73
1360
7eb93d12654c [project @ 1995-09-05 21:51:54 by jwe]
jwe
parents: 1321
diff changeset
74 // Note that the original complex fft routines were not written for
7eb93d12654c [project @ 1995-09-05 21:51:54 by jwe]
jwe
parents: 1321
diff changeset
75 // double complex arguments. They have been modified by adding an
7eb93d12654c [project @ 1995-09-05 21:51:54 by jwe]
jwe
parents: 1321
diff changeset
76 // implicit double precision (a-h,o-z) statement at the beginning of
7eb93d12654c [project @ 1995-09-05 21:51:54 by jwe]
jwe
parents: 1321
diff changeset
77 // each subroutine.
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
78
1253
bb67a902760b [project @ 1995-04-11 16:35:23 by jwe]
jwe
parents: 1251
diff changeset
79 int F77_FCN (cffti, CFFTI) (const int&, Complex*);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
80
1253
bb67a902760b [project @ 1995-04-11 16:35:23 by jwe]
jwe
parents: 1251
diff changeset
81 int F77_FCN (cfftf, CFFTF) (const int&, Complex*, Complex*);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
82
1253
bb67a902760b [project @ 1995-04-11 16:35:23 by jwe]
jwe
parents: 1251
diff changeset
83 int F77_FCN (cfftb, CFFTB) (const int&, Complex*, Complex*);
1819
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
84
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
85 int F77_FCN (dlartg, DLARTG) (const double&, const double&, double&,
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
86 double&, double&);
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
87
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
88 int F77_FCN (dtrsyl, DTRSYL) (const char*, const char*, const int&,
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
89 const int&, const int&, const double*,
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
90 const int&, const double*, const int&,
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
91 const double*, const int&, double&,
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
92 int&, long, long);
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
93
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
94 double F77_FCN (dlange, DLANGE) (const char*, const int&,
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
95 const int&, const double*,
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
96 const int&, double*);
1959
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
97
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
98 int F77_FCN (qzhes, QZHES) (const int&, const int&, double*,
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
99 double*, const long&, double*);
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
100
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
101 int F77_FCN (qzit, QZIT) (const int&, const int&, double*, double*,
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
102 const double&, const long&, double*,
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
103 int&);
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
104
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
105 int F77_FCN (qzval, QZVAL) (const int&, const int&, double*,
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
106 double*, double*, double*, double*,
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
107 const long&, double*);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
108 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
109
1360
7eb93d12654c [project @ 1995-09-05 21:51:54 by jwe]
jwe
parents: 1321
diff changeset
110 // Matrix class.
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
111
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
112 Matrix::Matrix (const DiagMatrix& a)
1214
0bf4d2b7def4 [project @ 1995-04-06 02:33:59 by jwe]
jwe
parents: 1205
diff changeset
113 : MArray2<double> (a.rows (), a.cols (), 0.0)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
114 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
115 for (int i = 0; i < a.length (); i++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
116 elem (i, i) = a.elem (i, i);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
117 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
118
1574
dd7d27461567 [project @ 1995-10-19 04:34:20 by jwe]
jwe
parents: 1561
diff changeset
119 // XXX FIXME XXX -- could we use a templated mixed-type copy function
dd7d27461567 [project @ 1995-10-19 04:34:20 by jwe]
jwe
parents: 1561
diff changeset
120 // here?
dd7d27461567 [project @ 1995-10-19 04:34:20 by jwe]
jwe
parents: 1561
diff changeset
121
dd7d27461567 [project @ 1995-10-19 04:34:20 by jwe]
jwe
parents: 1561
diff changeset
122 Matrix::Matrix (const charMatrix& a)
dd7d27461567 [project @ 1995-10-19 04:34:20 by jwe]
jwe
parents: 1561
diff changeset
123 : MArray2<double> (a.rows (), a.cols ())
dd7d27461567 [project @ 1995-10-19 04:34:20 by jwe]
jwe
parents: 1561
diff changeset
124 {
dd7d27461567 [project @ 1995-10-19 04:34:20 by jwe]
jwe
parents: 1561
diff changeset
125 for (int i = 0; i < a.rows (); i++)
dd7d27461567 [project @ 1995-10-19 04:34:20 by jwe]
jwe
parents: 1561
diff changeset
126 for (int j = 0; j < a.cols (); j++)
dd7d27461567 [project @ 1995-10-19 04:34:20 by jwe]
jwe
parents: 1561
diff changeset
127 elem (i, j) = a.elem (i, j);
dd7d27461567 [project @ 1995-10-19 04:34:20 by jwe]
jwe
parents: 1561
diff changeset
128 }
dd7d27461567 [project @ 1995-10-19 04:34:20 by jwe]
jwe
parents: 1561
diff changeset
129
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
130 int
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
131 Matrix::operator == (const Matrix& a) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
132 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
133 if (rows () != a.rows () || cols () != a.cols ())
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
134 return 0;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
135
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
136 return equal (data (), a.data (), length ());
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
137 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
138
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
139 int
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
140 Matrix::operator != (const Matrix& a) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
141 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
142 return !(*this == a);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
143 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
144
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
145 Matrix&
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
146 Matrix::insert (const Matrix& a, int r, int c)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
147 {
1561
ffee86c37931 [project @ 1995-10-12 08:08:25 by jwe]
jwe
parents: 1484
diff changeset
148 Array2<double>::insert (a, r, c);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
149 return *this;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
150 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
151
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
152 Matrix&
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
153 Matrix::insert (const RowVector& a, int r, int c)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
154 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
155 int a_len = a.length ();
1698
0892abda7553 [project @ 1996-01-07 02:28:21 by jwe]
jwe
parents: 1697
diff changeset
156 if (r < 0 || r >= rows () || c < 0 || c + a_len > cols ())
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
157 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
158 (*current_liboctave_error_handler) ("range error for insert");
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
159 return *this;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
160 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
161
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
162 for (int i = 0; i < a_len; i++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
163 elem (r, c+i) = a.elem (i);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
164
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
165 return *this;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
166 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
167
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
168 Matrix&
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
169 Matrix::insert (const ColumnVector& a, int r, int c)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
170 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
171 int a_len = a.length ();
1698
0892abda7553 [project @ 1996-01-07 02:28:21 by jwe]
jwe
parents: 1697
diff changeset
172 if (r < 0 || r + a_len > rows () || c < 0 || c >= cols ())
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
173 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
174 (*current_liboctave_error_handler) ("range error for insert");
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
175 return *this;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
176 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
177
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
178 for (int i = 0; i < a_len; i++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
179 elem (r+i, c) = a.elem (i);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
180
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
181 return *this;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
182 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
183
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
184 Matrix&
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
185 Matrix::insert (const DiagMatrix& a, int r, int c)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
186 {
1697
597c3ca9f6e8 [project @ 1996-01-07 02:13:24 by jwe]
jwe
parents: 1657
diff changeset
187 int a_nr = a.rows ();
597c3ca9f6e8 [project @ 1996-01-07 02:13:24 by jwe]
jwe
parents: 1657
diff changeset
188 int a_nc = a.cols ();
597c3ca9f6e8 [project @ 1996-01-07 02:13:24 by jwe]
jwe
parents: 1657
diff changeset
189
1698
0892abda7553 [project @ 1996-01-07 02:28:21 by jwe]
jwe
parents: 1697
diff changeset
190 if (r < 0 || r + a_nr > rows () || c < 0 || c + a_nc > cols ())
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
191 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
192 (*current_liboctave_error_handler) ("range error for insert");
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
193 return *this;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
194 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
195
1697
597c3ca9f6e8 [project @ 1996-01-07 02:13:24 by jwe]
jwe
parents: 1657
diff changeset
196 fill (0.0, r, c, r + a_nr - 1, c + a_nc - 1);
597c3ca9f6e8 [project @ 1996-01-07 02:13:24 by jwe]
jwe
parents: 1657
diff changeset
197
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
198 for (int i = 0; i < a.length (); i++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
199 elem (r+i, c+i) = a.elem (i, i);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
200
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
201 return *this;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
202 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
203
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
204 Matrix&
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
205 Matrix::fill (double val)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
206 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
207 int nr = rows ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
208 int nc = cols ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
209 if (nr > 0 && nc > 0)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
210 for (int j = 0; j < nc; j++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
211 for (int i = 0; i < nr; i++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
212 elem (i, j) = val;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
213
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
214 return *this;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
215 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
216
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
217 Matrix&
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
218 Matrix::fill (double val, int r1, int c1, int r2, int c2)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
219 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
220 int nr = rows ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
221 int nc = cols ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
222 if (r1 < 0 || r2 < 0 || c1 < 0 || c2 < 0
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
223 || r1 >= nr || r2 >= nr || c1 >= nc || c2 >= nc)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
224 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
225 (*current_liboctave_error_handler) ("range error for fill");
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
226 return *this;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
227 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
228
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
229 if (r1 > r2) { int tmp = r1; r1 = r2; r2 = tmp; }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
230 if (c1 > c2) { int tmp = c1; c1 = c2; c2 = tmp; }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
231
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
232 for (int j = c1; j <= c2; j++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
233 for (int i = r1; i <= r2; i++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
234 elem (i, j) = val;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
235
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
236 return *this;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
237 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
238
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
239 Matrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
240 Matrix::append (const Matrix& a) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
241 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
242 int nr = rows ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
243 int nc = cols ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
244 if (nr != a.rows ())
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
245 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
246 (*current_liboctave_error_handler) ("row dimension mismatch for append");
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
247 return Matrix ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
248 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
249
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
250 int nc_insert = nc;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
251 Matrix retval (nr, nc + a.cols ());
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
252 retval.insert (*this, 0, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
253 retval.insert (a, 0, nc_insert);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
254 return retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
255 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
256
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
257 Matrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
258 Matrix::append (const RowVector& a) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
259 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
260 int nr = rows ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
261 int nc = cols ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
262 if (nr != 1)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
263 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
264 (*current_liboctave_error_handler) ("row dimension mismatch for append");
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
265 return Matrix ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
266 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
267
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
268 int nc_insert = nc;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
269 Matrix retval (nr, nc + a.length ());
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
270 retval.insert (*this, 0, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
271 retval.insert (a, 0, nc_insert);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
272 return retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
273 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
274
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
275 Matrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
276 Matrix::append (const ColumnVector& a) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
277 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
278 int nr = rows ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
279 int nc = cols ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
280 if (nr != a.length ())
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
281 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
282 (*current_liboctave_error_handler) ("row dimension mismatch for append");
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
283 return Matrix ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
284 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
285
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
286 int nc_insert = nc;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
287 Matrix retval (nr, nc + 1);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
288 retval.insert (*this, 0, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
289 retval.insert (a, 0, nc_insert);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
290 return retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
291 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
292
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
293 Matrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
294 Matrix::append (const DiagMatrix& a) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
295 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
296 int nr = rows ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
297 int nc = cols ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
298 if (nr != a.rows ())
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
299 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
300 (*current_liboctave_error_handler) ("row dimension mismatch for append");
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
301 return *this;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
302 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
303
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
304 int nc_insert = nc;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
305 Matrix retval (nr, nc + a.cols ());
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
306 retval.insert (*this, 0, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
307 retval.insert (a, 0, nc_insert);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
308 return retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
309 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
310
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
311 Matrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
312 Matrix::stack (const Matrix& a) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
313 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
314 int nr = rows ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
315 int nc = cols ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
316 if (nc != a.cols ())
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
317 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
318 (*current_liboctave_error_handler)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
319 ("column dimension mismatch for stack");
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
320 return Matrix ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
321 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
322
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
323 int nr_insert = nr;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
324 Matrix retval (nr + a.rows (), nc);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
325 retval.insert (*this, 0, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
326 retval.insert (a, nr_insert, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
327 return retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
328 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
329
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
330 Matrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
331 Matrix::stack (const RowVector& a) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
332 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
333 int nr = rows ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
334 int nc = cols ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
335 if (nc != a.length ())
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
336 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
337 (*current_liboctave_error_handler)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
338 ("column dimension mismatch for stack");
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
339 return Matrix ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
340 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
341
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
342 int nr_insert = nr;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
343 Matrix retval (nr + 1, nc);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
344 retval.insert (*this, 0, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
345 retval.insert (a, nr_insert, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
346 return retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
347 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
348
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
349 Matrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
350 Matrix::stack (const ColumnVector& a) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
351 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
352 int nr = rows ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
353 int nc = cols ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
354 if (nc != 1)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
355 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
356 (*current_liboctave_error_handler)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
357 ("column dimension mismatch for stack");
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
358 return Matrix ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
359 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
360
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
361 int nr_insert = nr;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
362 Matrix retval (nr + a.length (), nc);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
363 retval.insert (*this, 0, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
364 retval.insert (a, nr_insert, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
365 return retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
366 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
367
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
368 Matrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
369 Matrix::stack (const DiagMatrix& a) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
370 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
371 int nr = rows ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
372 int nc = cols ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
373 if (nc != a.cols ())
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
374 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
375 (*current_liboctave_error_handler)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
376 ("column dimension mismatch for stack");
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
377 return Matrix ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
378 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
379
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
380 int nr_insert = nr;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
381 Matrix retval (nr + a.rows (), nc);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
382 retval.insert (*this, 0, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
383 retval.insert (a, nr_insert, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
384 return retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
385 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
386
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
387 Matrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
388 Matrix::transpose (void) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
389 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
390 int nr = rows ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
391 int nc = cols ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
392 Matrix result (nc, nr);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
393 if (length () > 0)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
394 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
395 for (int j = 0; j < nc; j++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
396 for (int i = 0; i < nr; i++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
397 result.elem (j, i) = elem (i, j);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
398 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
399 return result;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
400 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
401
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
402 Matrix
1205
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
403 real (const ComplexMatrix& a)
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
404 {
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
405 int a_len = a.length ();
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
406 Matrix retval;
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
407 if (a_len > 0)
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
408 retval = Matrix (real_dup (a.data (), a_len), a.rows (), a.cols ());
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
409 return retval;
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
410 }
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
411
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
412 Matrix
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
413 imag (const ComplexMatrix& a)
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
414 {
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
415 int a_len = a.length ();
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
416 Matrix retval;
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
417 if (a_len > 0)
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
418 retval = Matrix (imag_dup (a.data (), a_len), a.rows (), a.cols ());
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
419 return retval;
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
420 }
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
421
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
422 Matrix
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
423 Matrix::extract (int r1, int c1, int r2, int c2) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
424 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
425 if (r1 > r2) { int tmp = r1; r1 = r2; r2 = tmp; }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
426 if (c1 > c2) { int tmp = c1; c1 = c2; c2 = tmp; }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
427
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
428 int new_r = r2 - r1 + 1;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
429 int new_c = c2 - c1 + 1;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
430
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
431 Matrix result (new_r, new_c);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
432
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
433 for (int j = 0; j < new_c; j++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
434 for (int i = 0; i < new_r; i++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
435 result.elem (i, j) = elem (r1+i, c1+j);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
436
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
437 return result;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
438 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
439
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
440 // extract row or column i.
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
441
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
442 RowVector
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
443 Matrix::row (int i) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
444 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
445 int nc = cols ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
446 if (i < 0 || i >= rows ())
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
447 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
448 (*current_liboctave_error_handler) ("invalid row selection");
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
449 return RowVector ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
450 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
451
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
452 RowVector retval (nc);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
453 for (int j = 0; j < nc; j++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
454 retval.elem (j) = elem (i, j);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
455
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
456 return retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
457 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
459 RowVector
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
460 Matrix::row (char *s) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
461 {
533
883197c5ad75 [project @ 1994-07-20 20:02:51 by jwe]
jwe
parents: 532
diff changeset
462 if (! s)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
463 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
464 (*current_liboctave_error_handler) ("invalid row selection");
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
465 return RowVector ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
466 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
467
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
468 char c = *s;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
469 if (c == 'f' || c == 'F')
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
470 return row (0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
471 else if (c == 'l' || c == 'L')
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
472 return row (rows () - 1);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
473 else
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
474 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
475 (*current_liboctave_error_handler) ("invalid row selection");
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
476 return RowVector ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
477 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
478 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
479
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
480 ColumnVector
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
481 Matrix::column (int i) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
482 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
483 int nr = rows ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
484 if (i < 0 || i >= cols ())
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
485 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
486 (*current_liboctave_error_handler) ("invalid column selection");
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
487 return ColumnVector ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
488 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
489
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
490 ColumnVector retval (nr);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
491 for (int j = 0; j < nr; j++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
492 retval.elem (j) = elem (j, i);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
493
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
494 return retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
495 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
496
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
497 ColumnVector
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
498 Matrix::column (char *s) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
499 {
533
883197c5ad75 [project @ 1994-07-20 20:02:51 by jwe]
jwe
parents: 532
diff changeset
500 if (! s)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
501 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
502 (*current_liboctave_error_handler) ("invalid column selection");
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
503 return ColumnVector ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
504 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
505
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
506 char c = *s;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
507 if (c == 'f' || c == 'F')
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
508 return column (0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
509 else if (c == 'l' || c == 'L')
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
510 return column (cols () - 1);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
511 else
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
512 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
513 (*current_liboctave_error_handler) ("invalid column selection");
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
514 return ColumnVector ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
515 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
516 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
517
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
518 Matrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
519 Matrix::inverse (void) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
520 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
521 int info;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
522 double rcond;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
523 return inverse (info, rcond);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
524 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
525
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
526 Matrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
527 Matrix::inverse (int& info) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
528 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
529 double rcond;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
530 return inverse (info, rcond);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
531 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
532
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
533 Matrix
1656
5a8ad3d12304 [project @ 1995-12-20 10:58:39 by jwe]
jwe
parents: 1650
diff changeset
534 Matrix::inverse (int& info, double& rcond, int force) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
535 {
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
536 Matrix retval;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
537
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
538 int nr = rows ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
539 int nc = cols ();
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
540
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
541 if (nr != nc || nr == 0 || nc == 0)
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
542 (*current_liboctave_error_handler) ("inverse requires square matrix");
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
543 else
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
544 {
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
545 info = 0;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
546
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
547 Array<int> ipvt (nr);
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
548 int *pipvt = ipvt.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
549
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
550 Array<double> z (nr);
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
551 double *pz = z.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
552
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
553 retval = *this;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
554 double *tmp_data = retval.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
555
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
556 F77_XFCN (dgeco, DGECO, (tmp_data, nr, nc, pipvt, rcond, pz));
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
557
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
558 if (f77_exception_encountered)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
559 (*current_liboctave_error_handler) ("unrecoverable error in dgeco");
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
560 else
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
561 {
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
562 volatile double rcond_plus_one = rcond + 1.0;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
563
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
564 if (rcond_plus_one == 1.0)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
565 info = -1;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
566
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
567 if (info == -1 && ! force)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
568 retval = *this; // Restore matrix contents.
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
569 else
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
570 {
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
571 double *dummy = 0;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
572
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
573 F77_XFCN (dgedi, DGEDI, (tmp_data, nr, nc, pipvt, dummy,
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
574 pz, 1));
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
575
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
576 if (f77_exception_encountered)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
577 (*current_liboctave_error_handler)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
578 ("unrecoverable error in dgedi");
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
579 }
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
580 }
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
581 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
582
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
583 return retval;
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
584 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
585
740
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
586 Matrix
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
587 Matrix::pseudo_inverse (double tol)
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
588 {
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
589 SVD result (*this);
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
590
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
591 DiagMatrix S = result.singular_values ();
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
592 Matrix U = result.left_singular_matrix ();
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
593 Matrix V = result.right_singular_matrix ();
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
594
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
595 ColumnVector sigma = S.diag ();
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
596
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
597 int r = sigma.length () - 1;
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
598 int nr = rows ();
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
599 int nc = cols ();
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
600
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
601 if (tol <= 0.0)
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
602 {
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
603 if (nr > nc)
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
604 tol = nr * sigma.elem (0) * DBL_EPSILON;
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
605 else
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
606 tol = nc * sigma.elem (0) * DBL_EPSILON;
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
607 }
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
608
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
609 while (r >= 0 && sigma.elem (r) < tol)
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
610 r--;
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
611
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
612 if (r < 0)
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
613 return Matrix (nc, nr, 0.0);
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
614 else
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
615 {
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
616 Matrix Ur = U.extract (0, 0, nr-1, r);
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
617 DiagMatrix D = DiagMatrix (sigma.extract (0, r)) . inverse ();
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
618 Matrix Vr = V.extract (0, 0, nc-1, r);
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
619 return Vr * D * Ur.transpose ();
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
620 }
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
621 }
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
622
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
623 ComplexMatrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
624 Matrix::fourier (void) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
625 {
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
626 ComplexMatrix retval;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
627
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
628 int nr = rows ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
629 int nc = cols ();
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
630
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
631 int npts, nsamples;
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
632
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
633 if (nr == 1 || nc == 1)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
634 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
635 npts = nr > nc ? nr : nc;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
636 nsamples = 1;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
637 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
638 else
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
639 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
640 npts = nr;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
641 nsamples = nc;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
642 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
643
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
644 int nn = 4*npts+15;
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
645
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
646 Array<Complex> wsave (nn);
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
647 Complex *pwsave = wsave.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
648
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
649 retval = *this;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
650 Complex *tmp_data = retval.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
651
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
652 F77_FCN (cffti, CFFTI) (npts, pwsave);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
653
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
654 for (int j = 0; j < nsamples; j++)
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
655 F77_FCN (cfftf, CFFTF) (npts, &tmp_data[npts*j], pwsave);
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
656
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
657 return retval;
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
658 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
659
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
660 ComplexMatrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
661 Matrix::ifourier (void) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
662 {
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
663 ComplexMatrix retval;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
664
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
665 int nr = rows ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
666 int nc = cols ();
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
667
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
668 int npts, nsamples;
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
669
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
670 if (nr == 1 || nc == 1)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
671 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
672 npts = nr > nc ? nr : nc;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
673 nsamples = 1;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
674 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
675 else
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
676 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
677 npts = nr;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
678 nsamples = nc;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
679 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
680
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
681 int nn = 4*npts+15;
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
682
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
683 Array<Complex> wsave (nn);
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
684 Complex *pwsave = wsave.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
685
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
686 retval = *this;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
687 Complex *tmp_data = retval.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
688
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
689 F77_FCN (cffti, CFFTI) (npts, pwsave);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
690
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
691 for (int j = 0; j < nsamples; j++)
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
692 F77_FCN (cfftb, CFFTB) (npts, &tmp_data[npts*j], pwsave);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
693
1321
64819a909ed7 [project @ 1995-08-22 05:39:43 by jwe]
jwe
parents: 1315
diff changeset
694 for (int j = 0; j < npts*nsamples; j++)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
695 tmp_data[j] = tmp_data[j] / (double) npts;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
696
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
697 return retval;
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
698 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
699
677
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
700 ComplexMatrix
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
701 Matrix::fourier2d (void) const
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
702 {
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
703 ComplexMatrix retval;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
704
677
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
705 int nr = rows ();
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
706 int nc = cols ();
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
707
677
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
708 int npts, nsamples;
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
709
677
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
710 if (nr == 1 || nc == 1)
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
711 {
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
712 npts = nr > nc ? nr : nc;
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
713 nsamples = 1;
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
714 }
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
715 else
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
716 {
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
717 npts = nr;
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
718 nsamples = nc;
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
719 }
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
720
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
721 int nn = 4*npts+15;
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
722
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
723 Array<Complex> wsave (nn);
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
724 Complex *pwsave = wsave.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
725
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
726 retval = *this;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
727 Complex *tmp_data = retval.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
728
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
729 F77_FCN (cffti, CFFTI) (npts, pwsave);
677
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
730
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
731 for (int j = 0; j < nsamples; j++)
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
732 F77_FCN (cfftf, CFFTF) (npts, &tmp_data[npts*j], pwsave);
677
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
733
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
734 npts = nc;
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
735 nsamples = nr;
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
736 nn = 4*npts+15;
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
737
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
738 wsave.resize (nn);
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
739 pwsave = wsave.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
740
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
741 Array<Complex> row (npts);
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
742 Complex *prow = row.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
743
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
744 F77_FCN (cffti, CFFTI) (npts, pwsave);
677
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
745
1321
64819a909ed7 [project @ 1995-08-22 05:39:43 by jwe]
jwe
parents: 1315
diff changeset
746 for (int j = 0; j < nsamples; j++)
677
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
747 {
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
748 for (int i = 0; i < npts; i++)
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
749 prow[i] = tmp_data[i*nr + j];
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
750
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
751 F77_FCN (cfftf, CFFTF) (npts, prow, pwsave);
677
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
752
1321
64819a909ed7 [project @ 1995-08-22 05:39:43 by jwe]
jwe
parents: 1315
diff changeset
753 for (int i = 0; i < npts; i++)
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
754 tmp_data[i*nr + j] = prow[i];
677
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
755 }
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
756
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
757 return retval;
677
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
758 }
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
759
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
760 ComplexMatrix
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
761 Matrix::ifourier2d (void) const
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
762 {
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
763 ComplexMatrix retval;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
764
677
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
765 int nr = rows ();
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
766 int nc = cols ();
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
767
677
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
768 int npts, nsamples;
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
769
677
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
770 if (nr == 1 || nc == 1)
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
771 {
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
772 npts = nr > nc ? nr : nc;
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
773 nsamples = 1;
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
774 }
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
775 else
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
776 {
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
777 npts = nr;
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
778 nsamples = nc;
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
779 }
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
780
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
781 int nn = 4*npts+15;
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
782
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
783 Array<Complex> wsave (nn);
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
784 Complex *pwsave = wsave.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
785
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
786 retval = *this;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
787 Complex *tmp_data = retval.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
788
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
789 F77_FCN (cffti, CFFTI) (npts, pwsave);
677
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
790
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
791 for (int j = 0; j < nsamples; j++)
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
792 F77_FCN (cfftb, CFFTB) (npts, &tmp_data[npts*j], pwsave);
677
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
793
1321
64819a909ed7 [project @ 1995-08-22 05:39:43 by jwe]
jwe
parents: 1315
diff changeset
794 for (int j = 0; j < npts*nsamples; j++)
677
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
795 tmp_data[j] = tmp_data[j] / (double) npts;
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
796
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
797 npts = nc;
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
798 nsamples = nr;
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
799 nn = 4*npts+15;
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
800
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
801 wsave.resize (nn);
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
802 pwsave = wsave.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
803
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
804 Array<Complex> row (npts);
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
805 Complex *prow = row.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
806
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
807 F77_FCN (cffti, CFFTI) (npts, pwsave);
677
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
808
1321
64819a909ed7 [project @ 1995-08-22 05:39:43 by jwe]
jwe
parents: 1315
diff changeset
809 for (int j = 0; j < nsamples; j++)
677
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
810 {
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
811 for (int i = 0; i < npts; i++)
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
812 prow[i] = tmp_data[i*nr + j];
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
813
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
814 F77_FCN (cfftb, CFFTB) (npts, prow, pwsave);
677
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
815
1321
64819a909ed7 [project @ 1995-08-22 05:39:43 by jwe]
jwe
parents: 1315
diff changeset
816 for (int i = 0; i < npts; i++)
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
817 tmp_data[i*nr + j] = prow[i] / (double) npts;
677
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
818 }
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
819
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
820 return retval;
677
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
821 }
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
822
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
823 DET
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
824 Matrix::determinant (void) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
825 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
826 int info;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
827 double rcond;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
828 return determinant (info, rcond);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
829 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
830
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
831 DET
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
832 Matrix::determinant (int& info) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
833 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
834 double rcond;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
835 return determinant (info, rcond);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
836 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
837
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
838 DET
532
2ca256b77602 [project @ 1994-07-20 19:56:55 by jwe]
jwe
parents: 479
diff changeset
839 Matrix::determinant (int& info, double& rcond) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
840 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
841 DET retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
842
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
843 int nr = rows ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
844 int nc = cols ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
845
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
846 if (nr == 0 || nc == 0)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
847 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
848 double d[2];
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
849 d[0] = 1.0;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
850 d[1] = 0.0;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
851 retval = DET (d);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
852 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
853 else
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
854 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
855 info = 0;
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
856
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
857 Array<int> ipvt (nr);
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
858 int *pipvt = ipvt.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
859
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
860 Array<double> z (nr);
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
861 double *pz = z.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
862
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
863 Matrix atmp = *this;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
864 double *tmp_data = atmp.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
865
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
866 F77_XFCN (dgeco, DGECO, (tmp_data, nr, nr, pipvt, rcond, pz));
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
867
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
868 if (f77_exception_encountered)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
869 (*current_liboctave_error_handler) ("unrecoverable error in dgeco");
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
870 else
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
871 {
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
872 volatile double rcond_plus_one = rcond + 1.0;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
873
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
874 if (rcond_plus_one == 1.0)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
875 {
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
876 info = -1;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
877 retval = DET ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
878 }
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
879 else
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
880 {
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
881 double d[2];
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
882
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
883 F77_XFCN (dgedi, DGEDI, (tmp_data, nr, nr, pipvt, d, pz, 10));
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
884
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
885 if (f77_exception_encountered)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
886 (*current_liboctave_error_handler)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
887 ("unrecoverable error in dgedi");
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
888 else
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
889 retval = DET (d);
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
890 }
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
891 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
892 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
893
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
894 return retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
895 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
896
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
897 Matrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
898 Matrix::solve (const Matrix& b) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
899 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
900 int info;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
901 double rcond;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
902 return solve (b, info, rcond);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
903 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
904
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
905 Matrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
906 Matrix::solve (const Matrix& b, int& info) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
907 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
908 double rcond;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
909 return solve (b, info, rcond);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
910 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
911
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
912 Matrix
532
2ca256b77602 [project @ 1994-07-20 19:56:55 by jwe]
jwe
parents: 479
diff changeset
913 Matrix::solve (const Matrix& b, int& info, double& rcond) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
914 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
915 Matrix retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
916
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
917 int nr = rows ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
918 int nc = cols ();
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
919
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
920 if (nr == 0 || nc == 0 || nr != nc || nr != b.rows ())
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
921 (*current_liboctave_error_handler)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
922 ("matrix dimension mismatch solution of linear equations");
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
923 else
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
924 {
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
925 info = 0;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
926
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
927 Array<int> ipvt (nr);
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
928 int *pipvt = ipvt.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
929
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
930 Array<double> z (nr);
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
931 double *pz = z.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
932
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
933 Matrix atmp = *this;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
934 double *tmp_data = atmp.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
935
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
936 F77_XFCN (dgeco, DGECO, (tmp_data, nr, nr, pipvt, rcond, pz));
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
937
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
938 if (f77_exception_encountered)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
939 (*current_liboctave_error_handler) ("unrecoverable error in dgeco");
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
940 else
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
941 {
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
942 volatile double rcond_plus_one = rcond + 1.0;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
943
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
944 if (rcond_plus_one == 1.0)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
945 {
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
946 info = -2;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
947 }
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
948 else
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
949 {
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
950 retval = b;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
951 double *result = retval.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
952
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
953 int b_nc = b.cols ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
954
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
955 for (volatile int j = 0; j < b_nc; j++)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
956 {
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
957 F77_XFCN (dgesl, DGESL, (tmp_data, nr, nr, pipvt,
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
958 &result[nr*j], 0));
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
959
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
960 if (f77_exception_encountered)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
961 {
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
962 (*current_liboctave_error_handler)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
963 ("unrecoverable error in dgesl");
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
964
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
965 break;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
966 }
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
967 }
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
968 }
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
969 }
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
970 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
971
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
972 return retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
973 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
974
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
975 ComplexMatrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
976 Matrix::solve (const ComplexMatrix& b) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
977 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
978 ComplexMatrix tmp (*this);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
979 return tmp.solve (b);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
980 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
981
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
982 ComplexMatrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
983 Matrix::solve (const ComplexMatrix& b, int& info) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
984 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
985 ComplexMatrix tmp (*this);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
986 return tmp.solve (b, info);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
987 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
988
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
989 ComplexMatrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
990 Matrix::solve (const ComplexMatrix& b, int& info, double& rcond) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
991 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
992 ComplexMatrix tmp (*this);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
993 return tmp.solve (b, info, rcond);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
994 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
995
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
996 ColumnVector
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
997 Matrix::solve (const ColumnVector& b) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
998 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
999 int info; double rcond;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1000 return solve (b, info, rcond);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1001 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1002
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1003 ColumnVector
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1004 Matrix::solve (const ColumnVector& b, int& info) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1005 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1006 double rcond;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1007 return solve (b, info, rcond);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1008 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1009
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1010 ColumnVector
532
2ca256b77602 [project @ 1994-07-20 19:56:55 by jwe]
jwe
parents: 479
diff changeset
1011 Matrix::solve (const ColumnVector& b, int& info, double& rcond) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1012 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1013 ColumnVector retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1014
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1015 int nr = rows ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1016 int nc = cols ();
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1017
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1018 if (nr == 0 || nc == 0 || nr != nc || nr != b.length ())
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1019 (*current_liboctave_error_handler)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1020 ("matrix dimension mismatch solution of linear equations");
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1021 else
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1022 {
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1023 info = 0;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1024
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1025 Array<int> ipvt (nr);
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1026 int *pipvt = ipvt.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1027
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1028 Array<double> z (nr);
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1029 double *pz = z.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1030
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1031 Matrix atmp = *this;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1032 double *tmp_data = atmp.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1033
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1034 F77_XFCN (dgeco, DGECO, (tmp_data, nr, nr, pipvt, rcond, pz));
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1035
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1036 if (f77_exception_encountered)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1037 (*current_liboctave_error_handler)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1038 ("unrecoverable error in dgeco");
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1039 else
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1040 {
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1041 volatile double rcond_plus_one = rcond + 1.0;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1042
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1043 if (rcond_plus_one == 1.0)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1044 {
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1045 info = -2;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1046 }
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1047 else
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1048 {
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1049 retval = b;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1050 double *result = retval.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1051
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1052 F77_XFCN (dgesl, DGESL, (tmp_data, nr, nr, pipvt, result, 0));
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1053
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1054 if (f77_exception_encountered)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1055 (*current_liboctave_error_handler)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1056 ("unrecoverable error in dgesl");
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1057 }
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1058 }
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1059 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1060
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1061 return retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1062 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1063
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1064 ComplexColumnVector
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1065 Matrix::solve (const ComplexColumnVector& b) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1066 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1067 ComplexMatrix tmp (*this);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1068 return tmp.solve (b);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1069 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1070
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1071 ComplexColumnVector
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1072 Matrix::solve (const ComplexColumnVector& b, int& info) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1073 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1074 ComplexMatrix tmp (*this);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1075 return tmp.solve (b, info);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1076 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1077
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1078 ComplexColumnVector
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1079 Matrix::solve (const ComplexColumnVector& b, int& info, double& rcond) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1080 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1081 ComplexMatrix tmp (*this);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1082 return tmp.solve (b, info, rcond);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1083 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1084
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1085 Matrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1086 Matrix::lssolve (const Matrix& b) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1087 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1088 int info;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1089 int rank;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1090 return lssolve (b, info, rank);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1091 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1092
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1093 Matrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1094 Matrix::lssolve (const Matrix& b, int& info) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1095 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1096 int rank;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1097 return lssolve (b, info, rank);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1098 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1099
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1100 Matrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1101 Matrix::lssolve (const Matrix& b, int& info, int& rank) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1102 {
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1103 Matrix retval;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1104
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1105 int nrhs = b.cols ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1106
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1107 int m = rows ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1108 int n = cols ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1109
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1110 if (m == 0 || n == 0 || m != b.rows ())
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1111 (*current_liboctave_error_handler)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1112 ("matrix dimension mismatch in solution of least squares problem");
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1113 else
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1114 {
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1115 Matrix atmp = *this;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1116 double *tmp_data = atmp.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1117
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1118 int nrr = m > n ? m : n;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1119 Matrix result (nrr, nrhs);
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1120
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1121 for (int j = 0; j < nrhs; j++)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1122 for (int i = 0; i < m; i++)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1123 result.elem (i, j) = b.elem (i, j);
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1124
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1125 double *presult = result.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1126
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1127 int len_s = m < n ? m : n;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1128 Array<double> s (len_s);
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1129 double *ps = s.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1130
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1131 double rcond = -1.0;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1132
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1133 int lwork;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1134 if (m < n)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1135 lwork = 3*m + (2*m > nrhs
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1136 ? (2*m > n ? 2*m : n)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1137 : (nrhs > n ? nrhs : n));
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1138 else
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1139 lwork = 3*n + (2*n > nrhs
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1140 ? (2*n > m ? 2*n : m)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1141 : (nrhs > m ? nrhs : m));
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1142
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1143 Array<double> work (lwork);
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1144 double *pwork = work.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1145
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1146 F77_XFCN (dgelss, DGELSS, (m, n, nrhs, tmp_data, m, presult, nrr, ps,
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1147 rcond, rank, pwork, lwork, info));
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1148
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1149 if (f77_exception_encountered)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1150 (*current_liboctave_error_handler) ("unrecoverable error in dgelss");
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1151 else
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1152 {
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1153 retval.resize (n, nrhs);
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1154 for (int j = 0; j < nrhs; j++)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1155 for (int i = 0; i < n; i++)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1156 retval.elem (i, j) = result.elem (i, j);
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1157 }
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1158 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1159
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1160 return retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1161 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1162
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1163 ComplexMatrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1164 Matrix::lssolve (const ComplexMatrix& b) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1165 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1166 ComplexMatrix tmp (*this);
1484
84796decb9af [project @ 1995-09-26 09:30:32 by jwe]
jwe
parents: 1472
diff changeset
1167 int info;
84796decb9af [project @ 1995-09-26 09:30:32 by jwe]
jwe
parents: 1472
diff changeset
1168 int rank;
84796decb9af [project @ 1995-09-26 09:30:32 by jwe]
jwe
parents: 1472
diff changeset
1169 return tmp.lssolve (b, info, rank);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1170 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1171
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1172 ComplexMatrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1173 Matrix::lssolve (const ComplexMatrix& b, int& info) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1174 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1175 ComplexMatrix tmp (*this);
1484
84796decb9af [project @ 1995-09-26 09:30:32 by jwe]
jwe
parents: 1472
diff changeset
1176 int rank;
84796decb9af [project @ 1995-09-26 09:30:32 by jwe]
jwe
parents: 1472
diff changeset
1177 return tmp.lssolve (b, info, rank);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1178 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1179
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1180 ComplexMatrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1181 Matrix::lssolve (const ComplexMatrix& b, int& info, int& rank) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1182 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1183 ComplexMatrix tmp (*this);
1484
84796decb9af [project @ 1995-09-26 09:30:32 by jwe]
jwe
parents: 1472
diff changeset
1184 return tmp.lssolve (b, info, rank);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1185 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1186
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1187 ColumnVector
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1188 Matrix::lssolve (const ColumnVector& b) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1189 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1190 int info;
1484
84796decb9af [project @ 1995-09-26 09:30:32 by jwe]
jwe
parents: 1472
diff changeset
1191 int rank;
84796decb9af [project @ 1995-09-26 09:30:32 by jwe]
jwe
parents: 1472
diff changeset
1192 return lssolve (b, info, rank);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1193 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1194
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1195 ColumnVector
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1196 Matrix::lssolve (const ColumnVector& b, int& info) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1197 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1198 int rank;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1199 return lssolve (b, info, rank);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1200 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1201
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1202 ColumnVector
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1203 Matrix::lssolve (const ColumnVector& b, int& info, int& rank) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1204 {
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1205 ColumnVector retval;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1206
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1207 int nrhs = 1;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1208
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1209 int m = rows ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1210 int n = cols ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1211
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1212 if (m == 0 || n == 0 || m != b.length ())
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1213 (*current_liboctave_error_handler)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1214 ("matrix dimension mismatch in solution of least squares problem");
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1215 else
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1216 {
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1217 Matrix atmp = *this;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1218 double *tmp_data = atmp.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1219
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1220 int nrr = m > n ? m : n;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1221 ColumnVector result (nrr);
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1222
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1223 for (int i = 0; i < m; i++)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1224 result.elem (i) = b.elem (i);
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1225
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1226 double *presult = result.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1227
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1228 int len_s = m < n ? m : n;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1229 Array<double> s (len_s);
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1230 double *ps = s.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1231
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1232 double rcond = -1.0;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1233
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1234 int lwork;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1235 if (m < n)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1236 lwork = 3*m + (2*m > nrhs
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1237 ? (2*m > n ? 2*m : n)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1238 : (nrhs > n ? nrhs : n));
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1239 else
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1240 lwork = 3*n + (2*n > nrhs
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1241 ? (2*n > m ? 2*n : m)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1242 : (nrhs > m ? nrhs : m));
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1243
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1244 Array<double> work (lwork);
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1245 double *pwork = work.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1246
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1247 F77_XFCN (dgelss, DGELSS, (m, n, nrhs, tmp_data, m, presult, nrr,
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1248 ps, rcond, rank, pwork, lwork, info));
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1249
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1250 if (f77_exception_encountered)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1251 (*current_liboctave_error_handler) ("unrecoverable error in dgelss");
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1252 else
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1253 {
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1254 retval.resize (n);
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1255 for (int i = 0; i < n; i++)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1256 retval.elem (i) = result.elem (i);
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1257 }
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1258 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1259
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1260 return retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1261 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1262
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1263 ComplexColumnVector
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1264 Matrix::lssolve (const ComplexColumnVector& b) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1265 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1266 ComplexMatrix tmp (*this);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1267 return tmp.lssolve (b);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1268 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1269
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1270 ComplexColumnVector
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1271 Matrix::lssolve (const ComplexColumnVector& b, int& info) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1272 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1273 ComplexMatrix tmp (*this);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1274 return tmp.lssolve (b, info);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1275 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1276
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1277 ComplexColumnVector
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1278 Matrix::lssolve (const ComplexColumnVector& b, int& info, int& rank) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1279 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1280 ComplexMatrix tmp (*this);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1281 return tmp.lssolve (b, info, rank);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1282 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1283
1819
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1284 // Constants for matrix exponential calculation.
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1285
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1286 static double padec [] =
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1287 {
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1288 5.0000000000000000e-1,
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1289 1.1666666666666667e-1,
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1290 1.6666666666666667e-2,
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1291 1.6025641025641026e-3,
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1292 1.0683760683760684e-4,
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1293 4.8562548562548563e-6,
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1294 1.3875013875013875e-7,
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1295 1.9270852604185938e-9,
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1296 };
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1297
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1298 Matrix
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1299 Matrix::expm (void) const
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1300 {
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1301 Matrix retval;
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1302
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1303 Matrix m = *this;
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1304
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1305 int nc = columns ();
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1306
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1307 // trace shift value
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1308 double trshift = 0;
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1309
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1310 // Preconditioning step 1: trace normalization.
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1311
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1312 for (int i = 0; i < nc; i++)
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1313 trshift += m.elem (i, i);
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1314
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1315 trshift /= nc;
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1316
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1317 for (int i = 0; i < nc; i++)
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1318 m.elem (i, i) -= trshift;
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1319
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1320 // Preconditioning step 2: balancing.
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1321
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1322 AEPBALANCE mbal (m, "B");
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1323 m = mbal.balanced_matrix ();
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1324 Matrix d = mbal.balancing_matrix ();
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1325
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1326 // Preconditioning step 3: scaling.
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1327
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1328 ColumnVector work(nc);
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1329 double inf_norm
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1330 = F77_FCN (dlange, DLANGE) ("I", nc, nc, m.fortran_vec (),nc,
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1331 work.fortran_vec ());
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1332
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1333 int sqpow = (int) (inf_norm > 0.0
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1334 ? (1.0 + log (inf_norm) / log (2.0))
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1335 : 0.0);
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1336
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1337 // Check whether we need to square at all.
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1338
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1339 if (sqpow < 0)
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1340 sqpow = 0;
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1341
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1342 if (sqpow > 0)
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1343 {
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1344 double scale_factor = 1.0;
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1345 for (int i = 0; i < sqpow; i++)
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1346 scale_factor *= 2.0;
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1347
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1348 m = m / scale_factor;
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1349 }
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1350
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1351 // npp, dpp: pade' approx polynomial matrices.
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1352
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1353 Matrix npp (nc, nc, 0.0);
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1354 Matrix dpp = npp;
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1355
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1356 // Now powers a^8 ... a^1.
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1357
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1358 int minus_one_j = -1;
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1359 for (int j = 7; j >= 0; j--)
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1360 {
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1361 npp = m * npp + m * padec[j];
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1362 dpp = m * dpp + m * (minus_one_j * padec[j]);
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1363 minus_one_j *= -1;
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1364 }
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1365
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1366 // Zero power.
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1367
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1368 dpp = -dpp;
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1369 for(int j = 0; j < nc; j++)
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1370 {
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1371 npp.elem (j, j) += 1.0;
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1372 dpp.elem (j, j) += 1.0;
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1373 }
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1374
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1375 // Compute pade approximation = inverse (dpp) * npp.
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1376
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1377 retval = dpp.solve (npp);
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1378
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1379 // Reverse preconditioning step 3: repeated squaring.
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1380
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1381 while (sqpow)
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1382 {
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1383 retval = retval * retval;
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1384 sqpow--;
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1385 }
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1386
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1387 // Reverse preconditioning step 2: inverse balancing.
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1388
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1389 retval = retval.transpose();
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1390 d = d.transpose ();
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1391 retval = retval * d;
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1392 retval = d.solve (retval);
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1393 retval = retval.transpose ();
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1394
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1395 // Reverse preconditioning step 1: fix trace normalization.
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1396
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1397 return retval * exp (trshift);
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1398 }
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
1399
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1400 Matrix&
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1401 Matrix::operator += (const Matrix& a)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1402 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1403 int nr = rows ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1404 int nc = cols ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1405 if (nr != a.rows () || nc != a.cols ())
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1406 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1407 (*current_liboctave_error_handler)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1408 ("nonconformant matrix += operation attempted");
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1409 return *this;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1410 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1411
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1412 if (nr == 0 || nc == 0)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1413 return *this;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1414
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1415 double *d = fortran_vec (); // Ensures only one reference to my privates!
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1416
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1417 add2 (d, a.data (), length ());
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1418
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1419 return *this;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1420 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1421
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1422 Matrix&
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1423 Matrix::operator -= (const Matrix& a)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1424 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1425 int nr = rows ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1426 int nc = cols ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1427 if (nr != a.rows () || nc != a.cols ())
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1428 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1429 (*current_liboctave_error_handler)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1430 ("nonconformant matrix -= operation attempted");
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1431 return *this;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1432 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1433
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1434 if (nr == 0 || nc == 0)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1435 return *this;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1436
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1437 double *d = fortran_vec (); // Ensures only one reference to my privates!
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1438
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1439 subtract2 (d, a.data (), length ());
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1440
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1441 return *this;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1442 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1443
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1444 Matrix&
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1445 Matrix::operator += (const DiagMatrix& a)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1446 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1447 if (rows () != a.rows () || cols () != a.cols ())
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1448 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1449 (*current_liboctave_error_handler)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1450 ("nonconformant matrix += operation attempted");
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1451 return *this;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1452 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1453
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1454 for (int i = 0; i < a.length (); i++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1455 elem (i, i) += a.elem (i, i);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1456
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1457 return *this;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1458 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1459
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1460 Matrix&
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1461 Matrix::operator -= (const DiagMatrix& a)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1462 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1463 if (rows () != a.rows () || cols () != a.cols ())
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1464 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1465 (*current_liboctave_error_handler)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1466 ("nonconformant matrix += operation attempted");
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1467 return *this;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1468 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1469
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1470 for (int i = 0; i < a.length (); i++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1471 elem (i, i) -= a.elem (i, i);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1472
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1473 return *this;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1474 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1475
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1476 // unary operations
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1477
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1478 Matrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1479 Matrix::operator ! (void) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1480 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1481 int nr = rows ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1482 int nc = cols ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1483
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1484 Matrix b (nr, nc);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1485
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1486 for (int j = 0; j < nc; j++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1487 for (int i = 0; i < nr; i++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1488 b.elem (i, j) = ! elem (i, j);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1489
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1490 return b;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1491 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1492
1205
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1493 // column vector by row vector -> matrix operations
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1494
1205
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1495 Matrix
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1496 operator * (const ColumnVector& v, const RowVector& a)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1497 {
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1498 Matrix retval;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1499
1205
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1500 int len = v.length ();
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1501 int a_len = a.length ();
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1502
1205
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1503 if (len != a_len)
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1504 (*current_liboctave_error_handler)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1505 ("nonconformant vector multiplication attempted");
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1506 else
1205
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1507 {
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1508 if (len != 0)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1509 {
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1510 retval.resize (len, a_len);
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1511 double *c = retval.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1512
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1513 F77_XFCN (dgemm, DGEMM, ("N", "N", len, a_len, 1, 1.0,
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1514 v.data (), len, a.data (), 1, 0.0,
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1515 c, len, 1L, 1L));
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1516
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1517 if (f77_exception_encountered)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1518 (*current_liboctave_error_handler)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1519 ("unrecoverable error in dgemm");
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1520 }
1205
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1521 }
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1522
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1523 return retval;
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1524 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1525
1205
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1526 // diagonal matrix by scalar -> matrix operations
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1527
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1528 Matrix
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1529 operator + (const DiagMatrix& a, double s)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1530 {
1205
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1531 Matrix tmp (a.rows (), a.cols (), s);
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1532 return a + tmp;
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1533 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1534
1205
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1535 Matrix
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1536 operator - (const DiagMatrix& a, double s)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1537 {
1205
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1538 Matrix tmp (a.rows (), a.cols (), -s);
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1539 return a + tmp;
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1540 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1541
1205
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1542 // scalar by diagonal matrix -> matrix operations
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1543
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1544 Matrix
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1545 operator + (double s, const DiagMatrix& a)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1546 {
1205
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1547 Matrix tmp (a.rows (), a.cols (), s);
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1548 return tmp + a;
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1549 }
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1550
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1551 Matrix
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1552 operator - (double s, const DiagMatrix& a)
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1553 {
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1554 Matrix tmp (a.rows (), a.cols (), s);
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1555 return tmp - a;
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1556 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1557
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1558 // matrix by diagonal matrix -> matrix operations
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1559
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1560 Matrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1561 operator + (const Matrix& m, const DiagMatrix& a)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1562 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1563 int nr = m.rows ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1564 int nc = m.cols ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1565 if (nr != a.rows () || nc != a.cols ())
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1566 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1567 (*current_liboctave_error_handler)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1568 ("nonconformant matrix addition attempted");
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1569 return Matrix ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1570 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1571
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1572 if (nr == 0 || nc == 0)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1573 return Matrix (nr, nc);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1574
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1575 Matrix result (m);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1576 int a_len = a.length ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1577 for (int i = 0; i < a_len; i++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1578 result.elem (i, i) += a.elem (i, i);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1579
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1580 return result;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1581 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1582
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1583 Matrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1584 operator - (const Matrix& m, const DiagMatrix& a)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1585 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1586 int nr = m.rows ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1587 int nc = m.cols ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1588 if (nr != a.rows () || nc != a.cols ())
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1589 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1590 (*current_liboctave_error_handler)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1591 ("nonconformant matrix subtraction attempted");
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1592 return Matrix ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1593 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1594
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1595 if (nr == 0 || nc == 0)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1596 return Matrix (nr, nc);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1597
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1598 Matrix result (m);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1599 int a_len = a.length ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1600 for (int i = 0; i < a_len; i++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1601 result.elem (i, i) -= a.elem (i, i);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1602
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1603 return result;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1604 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1605
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1606 Matrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1607 operator * (const Matrix& m, const DiagMatrix& a)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1608 {
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1609 Matrix retval;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1610
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1611 int nr = m.rows ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1612 int nc = m.cols ();
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1613
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1614 int a_nr = a.rows ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1615 int a_nc = a.cols ();
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1616
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1617 if (nc != a_nr)
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1618 (*current_liboctave_error_handler)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1619 ("nonconformant matrix multiplication attempted");
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1620 else
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1621 {
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1622 if (nr == 0 || nc == 0 || a_nc == 0)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1623 retval.resize (nr, a_nc, 0.0);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1624 else
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1625 {
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1626 retval.resize (nr, a_nc);
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1627 double *c = retval.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1628
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1629 double *ctmp = 0;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1630
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1631 int a_len = a.length ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1632
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1633 for (int j = 0; j < a_len; j++)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1634 {
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1635 int idx = j * nr;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1636 ctmp = c + idx;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1637
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1638 if (a.elem (j, j) == 1.0)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1639 {
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1640 for (int i = 0; i < nr; i++)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1641 ctmp[i] = m.elem (i, j);
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1642 }
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1643 else if (a.elem (j, j) == 0.0)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1644 {
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1645 for (int i = 0; i < nr; i++)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1646 ctmp[i] = 0.0;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1647 }
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1648 else
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1649 {
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1650 for (int i = 0; i < nr; i++)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1651 ctmp[i] = a.elem (j, j) * m.elem (i, j);
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1652 }
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1653 }
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1654
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1655 if (a_nr < a_nc)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1656 {
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1657 for (int i = nr * nc; i < nr * a_nc; i++)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1658 ctmp[i] = 0.0;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1659 }
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1660 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1661 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1662
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1663 return retval;
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1664 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1665
1205
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1666 // diagonal matrix by matrix -> matrix operations
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1667
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1668 Matrix
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1669 operator + (const DiagMatrix& m, const Matrix& a)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1670 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1671 int nr = m.rows ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1672 int nc = m.cols ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1673 if (nr != a.rows () || nc != a.cols ())
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1674 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1675 (*current_liboctave_error_handler)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1676 ("nonconformant matrix addition attempted");
1205
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1677 return Matrix ();
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1678 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1679
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1680 if (nr == 0 || nc == 0)
1205
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1681 return Matrix (nr, nc);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1682
1205
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1683 Matrix result (a);
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1684 for (int i = 0; i < m.length (); i++)
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1685 result.elem (i, i) += m.elem (i, i);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1686
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1687 return result;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1688 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1689
1205
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1690 Matrix
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1691 operator - (const DiagMatrix& m, const Matrix& a)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1692 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1693 int nr = m.rows ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1694 int nc = m.cols ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1695 if (nr != a.rows () || nc != a.cols ())
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1696 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1697 (*current_liboctave_error_handler)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1698 ("nonconformant matrix subtraction attempted");
1205
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1699 return Matrix ();
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1700 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1701
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1702 if (nr == 0 || nc == 0)
1205
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1703 return Matrix (nr, nc);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1704
1205
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1705 Matrix result (-a);
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1706 for (int i = 0; i < m.length (); i++)
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1707 result.elem (i, i) += m.elem (i, i);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1708
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1709 return result;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1710 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1711
1205
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1712 Matrix
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1713 operator * (const DiagMatrix& m, const Matrix& a)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1714 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1715 int nr = m.rows ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1716 int nc = m.cols ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1717 int a_nr = a.rows ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1718 int a_nc = a.cols ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1719 if (nc != a_nr)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1720 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1721 (*current_liboctave_error_handler)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1722 ("nonconformant matrix multiplication attempted");
1205
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1723 return Matrix ();
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1724 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1725
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1726 if (nr == 0 || nc == 0 || a_nc == 0)
1205
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1727 return Matrix (nr, a_nc, 0.0);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1728
1205
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1729 Matrix c (nr, a_nc);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1730
1205
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1731 for (int i = 0; i < m.length (); i++)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1732 {
1205
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1733 if (m.elem (i, i) == 1.0)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1734 {
1205
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1735 for (int j = 0; j < a_nc; j++)
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1736 c.elem (i, j) = a.elem (i, j);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1737 }
1205
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1738 else if (m.elem (i, i) == 0.0)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1739 {
1205
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1740 for (int j = 0; j < a_nc; j++)
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1741 c.elem (i, j) = 0.0;
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1742 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1743 else
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1744 {
1205
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1745 for (int j = 0; j < a_nc; j++)
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1746 c.elem (i, j) = m.elem (i, i) * a.elem (i, j);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1747 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1748 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1749
1205
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1750 if (nr > nc)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1751 {
1205
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1752 for (int j = 0; j < a_nc; j++)
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1753 for (int i = a_nr; i < nr; i++)
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1754 c.elem (i, j) = 0.0;
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1755 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1756
1205
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1757 return c;
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1758 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1759
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1760 // matrix by matrix -> matrix operations
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1761
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1762 Matrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1763 operator * (const Matrix& m, const Matrix& a)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1764 {
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1765 Matrix retval;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1766
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1767 int nr = m.rows ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1768 int nc = m.cols ();
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1769
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1770 int a_nr = a.rows ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1771 int a_nc = a.cols ();
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1772
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1773 if (nc != a_nr)
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1774 (*current_liboctave_error_handler)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1775 ("nonconformant matrix multiplication attempted");
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1776 else
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1777 {
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1778 if (nr == 0 || nc == 0 || a_nc == 0)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1779 retval.resize (nr, a_nc, 0.0);
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1780 else
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1781 {
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1782 int ld = nr;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1783 int lda = a_nr;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1784
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1785 retval.resize (nr, a_nc);
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1786 double *c = retval.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1787
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1788 F77_XFCN (dgemm, DGEMM, ("N", "N", nr, a_nc, nc, 1.0,
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1789 m.data (), ld, a.data (), lda, 0.0,
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1790 c, nr, 1L, 1L));
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1791
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1792 if (f77_exception_encountered)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1793 (*current_liboctave_error_handler)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1794 ("unrecoverable error in dgemm");
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1795 }
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1796 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1797
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1798 return retval;
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1799 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1800
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1801 // other operations.
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1802
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1803 Matrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1804 map (d_d_Mapper f, const Matrix& a)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1805 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1806 Matrix b (a);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1807 b.map (f);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1808 return b;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1809 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1810
1205
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1811 Matrix
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1812 map (d_c_Mapper f, const ComplexMatrix& a)
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1813 {
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1814 int a_nc = a.cols ();
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1815 int a_nr = a.rows ();
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1816 Matrix b (a_nr, a_nc);
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1817 for (int j = 0; j < a_nc; j++)
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1818 for (int i = 0; i < a_nr; i++)
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1819 b.elem (i, j) = f (a.elem (i, j));
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1820 return b;
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1821 }
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
1822
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1823 void
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1824 Matrix::map (d_d_Mapper f)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1825 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1826 double *d = fortran_vec (); // Ensures only one reference to my privates!
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1827
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1828 for (int i = 0; i < length (); i++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1829 d[i] = f (d[i]);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1830 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1831
1968
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1959
diff changeset
1832 // Return nonzero if any element of M is not an integer. Also extract
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1959
diff changeset
1833 // the largest and smallest values and return them in MAX_VAL and MIN_VAL.
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1959
diff changeset
1834
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1959
diff changeset
1835 int
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1959
diff changeset
1836 Matrix::all_integers (double& max_val, double& min_val) const
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1959
diff changeset
1837 {
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1959
diff changeset
1838 int nr = rows ();
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1959
diff changeset
1839 int nc = cols ();
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1959
diff changeset
1840
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1959
diff changeset
1841 if (nr > 0 && nc > 0)
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1959
diff changeset
1842 {
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1959
diff changeset
1843 max_val = elem (0, 0);
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1959
diff changeset
1844 min_val = elem (0, 0);
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1959
diff changeset
1845 }
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1959
diff changeset
1846 else
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1959
diff changeset
1847 return 0;
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1959
diff changeset
1848
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1959
diff changeset
1849 for (int j = 0; j < nc; j++)
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1959
diff changeset
1850 for (int i = 0; i < nr; i++)
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1959
diff changeset
1851 {
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1959
diff changeset
1852 double val = elem (i, j);
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1959
diff changeset
1853
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1959
diff changeset
1854 if (val > max_val)
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1959
diff changeset
1855 max_val = val;
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1959
diff changeset
1856
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1959
diff changeset
1857 if (val < min_val)
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1959
diff changeset
1858 min_val = val;
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1959
diff changeset
1859
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1959
diff changeset
1860 if (D_NINT (val) != val)
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1959
diff changeset
1861 return 0;
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1959
diff changeset
1862 }
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1959
diff changeset
1863 return 1;
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1959
diff changeset
1864 }
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1959
diff changeset
1865
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1959
diff changeset
1866 int
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1959
diff changeset
1867 Matrix::too_large_for_float (void) const
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1959
diff changeset
1868 {
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1959
diff changeset
1869 int nr = rows ();
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1959
diff changeset
1870 int nc = columns ();
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1959
diff changeset
1871
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1959
diff changeset
1872 for (int j = 0; j < nc; j++)
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1959
diff changeset
1873 for (int i = 0; i < nr; i++)
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1959
diff changeset
1874 {
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1959
diff changeset
1875 double val = elem (i, j);
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1959
diff changeset
1876
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1959
diff changeset
1877 if (val > FLT_MAX || val < FLT_MIN)
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1959
diff changeset
1878 return 1;
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1959
diff changeset
1879 }
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1959
diff changeset
1880
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1959
diff changeset
1881 return 0;
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1959
diff changeset
1882 }
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1959
diff changeset
1883
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1884 // XXX FIXME XXX Do these really belong here? They should maybe be
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1885 // cleaned up a bit, no? What about corresponding functions for the
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1886 // Vectors?
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1887
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1888 Matrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1889 Matrix::all (void) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1890 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1891 int nr = rows ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1892 int nc = cols ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1893 Matrix retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1894 if (nr > 0 && nc > 0)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1895 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1896 if (nr == 1)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1897 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1898 retval.resize (1, 1);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1899 retval.elem (0, 0) = 1.0;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1900 for (int j = 0; j < nc; j++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1901 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1902 if (elem (0, j) == 0.0)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1903 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1904 retval.elem (0, 0) = 0.0;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1905 break;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1906 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1907 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1908 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1909 else if (nc == 1)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1910 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1911 retval.resize (1, 1);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1912 retval.elem (0, 0) = 1.0;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1913 for (int i = 0; i < nr; i++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1914 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1915 if (elem (i, 0) == 0.0)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1916 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1917 retval.elem (0, 0) = 0.0;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1918 break;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1919 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1920 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1921 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1922 else
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1923 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1924 retval.resize (1, nc);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1925 for (int j = 0; j < nc; j++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1926 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1927 retval.elem (0, j) = 1.0;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1928 for (int i = 0; i < nr; i++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1929 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1930 if (elem (i, j) == 0.0)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1931 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1932 retval.elem (0, j) = 0.0;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1933 break;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1934 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1935 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1936 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1937 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1938 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1939 return retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1940 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1941
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1942 Matrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1943 Matrix::any (void) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1944 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1945 int nr = rows ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1946 int nc = cols ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1947 Matrix retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1948 if (nr > 0 && nc > 0)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1949 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1950 if (nr == 1)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1951 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1952 retval.resize (1, 1);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1953 retval.elem (0, 0) = 0.0;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1954 for (int j = 0; j < nc; j++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1955 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1956 if (elem (0, j) != 0.0)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1957 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1958 retval.elem (0, 0) = 1.0;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1959 break;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1960 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1961 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1962 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1963 else if (nc == 1)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1964 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1965 retval.resize (1, 1);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1966 retval.elem (0, 0) = 0.0;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1967 for (int i = 0; i < nr; i++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1968 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1969 if (elem (i, 0) != 0.0)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1970 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1971 retval.elem (0, 0) = 1.0;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1972 break;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1973 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1974 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1975 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1976 else
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1977 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1978 retval.resize (1, nc);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1979 for (int j = 0; j < nc; j++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1980 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1981 retval.elem (0, j) = 0.0;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1982 for (int i = 0; i < nr; i++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1983 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1984 if (elem (i, j) != 0.0)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1985 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1986 retval.elem (0, j) = 1.0;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1987 break;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1988 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1989 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1990 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1991 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1992 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1993 return retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1994 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1995
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1996 Matrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1997 Matrix::cumprod (void) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1998 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1999 Matrix retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2000
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2001 int nr = rows ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2002 int nc = cols ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2003
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2004 if (nr == 1)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2005 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2006 retval.resize (1, nc);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2007 if (nc > 0)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2008 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2009 double prod = elem (0, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2010 for (int j = 0; j < nc; j++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2011 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2012 retval.elem (0, j) = prod;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2013 if (j < nc - 1)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2014 prod *= elem (0, j+1);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2015 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2016 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2017 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2018 else if (nc == 1)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2019 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2020 retval.resize (nr, 1);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2021 if (nr > 0)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2022 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2023 double prod = elem (0, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2024 for (int i = 0; i < nr; i++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2025 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2026 retval.elem (i, 0) = prod;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2027 if (i < nr - 1)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2028 prod *= elem (i+1, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2029 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2030 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2031 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2032 else
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2033 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2034 retval.resize (nr, nc);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2035 if (nr > 0 && nc > 0)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2036 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2037 for (int j = 0; j < nc; j++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2038 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2039 double prod = elem (0, j);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2040 for (int i = 0; i < nr; i++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2041 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2042 retval.elem (i, j) = prod;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2043 if (i < nr - 1)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2044 prod *= elem (i+1, j);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2045 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2046 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2047 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2048 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2049 return retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2050 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2051
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2052 Matrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2053 Matrix::cumsum (void) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2054 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2055 Matrix retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2056
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2057 int nr = rows ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2058 int nc = cols ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2059
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2060 if (nr == 1)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2061 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2062 retval.resize (1, nc);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2063 if (nc > 0)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2064 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2065 double sum = elem (0, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2066 for (int j = 0; j < nc; j++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2067 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2068 retval.elem (0, j) = sum;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2069 if (j < nc - 1)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2070 sum += elem (0, j+1);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2071 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2072 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2073 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2074 else if (nc == 1)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2075 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2076 retval.resize (nr, 1);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2077 if (nr > 0)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2078 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2079 double sum = elem (0, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2080 for (int i = 0; i < nr; i++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2081 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2082 retval.elem (i, 0) = sum;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2083 if (i < nr - 1)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2084 sum += elem (i+1, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2085 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2086 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2087 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2088 else
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2089 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2090 retval.resize (nr, nc);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2091 if (nr > 0 && nc > 0)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2092 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2093 for (int j = 0; j < nc; j++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2094 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2095 double sum = elem (0, j);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2096 for (int i = 0; i < nr; i++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2097 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2098 retval.elem (i, j) = sum;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2099 if (i < nr - 1)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2100 sum += elem (i+1, j);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2101 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2102 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2103 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2104 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2105 return retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2106 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2107
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2108 Matrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2109 Matrix::prod (void) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2110 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2111 Matrix retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2112
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2113 int nr = rows ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2114 int nc = cols ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2115
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2116 if (nr == 1)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2117 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2118 retval.resize (1, 1);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2119 retval.elem (0, 0) = 1.0;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2120 for (int j = 0; j < nc; j++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2121 retval.elem (0, 0) *= elem (0, j);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2122 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2123 else if (nc == 1)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2124 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2125 retval.resize (1, 1);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2126 retval.elem (0, 0) = 1.0;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2127 for (int i = 0; i < nr; i++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2128 retval.elem (0, 0) *= elem (i, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2129 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2130 else
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2131 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2132 if (nc == 0)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2133 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2134 retval.resize (1, 1);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2135 retval.elem (0, 0) = 1.0;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2136 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2137 else
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2138 retval.resize (1, nc);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2139
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2140 for (int j = 0; j < nc; j++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2141 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2142 retval.elem (0, j) = 1.0;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2143 for (int i = 0; i < nr; i++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2144 retval.elem (0, j) *= elem (i, j);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2145 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2146 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2147 return retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2148 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2149
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2150 Matrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2151 Matrix::sum (void) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2152 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2153 Matrix retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2154
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2155 int nr = rows ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2156 int nc = cols ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2157
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2158 if (nr == 1)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2159 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2160 retval.resize (1, 1);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2161 retval.elem (0, 0) = 0.0;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2162 for (int j = 0; j < nc; j++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2163 retval.elem (0, 0) += elem (0, j);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2164 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2165 else if (nc == 1)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2166 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2167 retval.resize (1, 1);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2168 retval.elem (0, 0) = 0.0;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2169 for (int i = 0; i < nr; i++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2170 retval.elem (0, 0) += elem (i, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2171 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2172 else
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2173 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2174 if (nc == 0)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2175 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2176 retval.resize (1, 1);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2177 retval.elem (0, 0) = 0.0;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2178 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2179 else
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2180 retval.resize (1, nc);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2181
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2182 for (int j = 0; j < nc; j++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2183 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2184 retval.elem (0, j) = 0.0;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2185 for (int i = 0; i < nr; i++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2186 retval.elem (0, j) += elem (i, j);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2187 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2188 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2189 return retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2190 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2191
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2192 Matrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2193 Matrix::sumsq (void) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2194 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2195 Matrix retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2196
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2197 int nr = rows ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2198 int nc = cols ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2199
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2200 if (nr == 1)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2201 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2202 retval.resize (1, 1);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2203 retval.elem (0, 0) = 0.0;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2204 for (int j = 0; j < nc; j++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2205 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2206 double d = elem (0, j);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2207 retval.elem (0, 0) += d * d;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2208 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2209 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2210 else if (nc == 1)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2211 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2212 retval.resize (1, 1);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2213 retval.elem (0, 0) = 0.0;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2214 for (int i = 0; i < nr; i++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2215 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2216 double d = elem (i, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2217 retval.elem (0, 0) += d * d;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2218 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2219 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2220 else
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2221 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2222 retval.resize (1, nc);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2223 for (int j = 0; j < nc; j++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2224 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2225 retval.elem (0, j) = 0.0;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2226 for (int i = 0; i < nr; i++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2227 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2228 double d = elem (i, j);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2229 retval.elem (0, j) += d * d;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2230 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2231 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2232 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2233 return retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2234 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2235
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2236 ColumnVector
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2237 Matrix::diag (void) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2238 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2239 return diag (0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2240 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2241
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2242 ColumnVector
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2243 Matrix::diag (int k) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2244 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2245 int nnr = rows ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2246 int nnc = cols ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2247 if (k > 0)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2248 nnc -= k;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2249 else if (k < 0)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2250 nnr += k;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2251
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2252 ColumnVector d;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2253
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2254 if (nnr > 0 && nnc > 0)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2255 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2256 int ndiag = (nnr < nnc) ? nnr : nnc;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2257
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2258 d.resize (ndiag);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2259
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2260 if (k > 0)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2261 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2262 for (int i = 0; i < ndiag; i++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2263 d.elem (i) = elem (i, i+k);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2264 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2265 else if ( k < 0)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2266 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2267 for (int i = 0; i < ndiag; i++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2268 d.elem (i) = elem (i-k, i);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2269 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2270 else
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2271 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2272 for (int i = 0; i < ndiag; i++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2273 d.elem (i) = elem (i, i);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2274 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2275 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2276 else
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2277 cerr << "diag: requested diagonal out of range\n";
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2278
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2279 return d;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2280 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2281
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2282 ColumnVector
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2283 Matrix::row_min (void) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2284 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2285 ColumnVector result;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2286
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2287 int nr = rows ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2288 int nc = cols ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2289
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2290 if (nr > 0 && nc > 0)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2291 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2292 result.resize (nr);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2293
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2294 for (int i = 0; i < nr; i++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2295 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2296 double res = elem (i, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2297 for (int j = 1; j < nc; j++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2298 if (elem (i, j) < res)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2299 res = elem (i, j);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2300 result.elem (i) = res;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2301 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2302 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2303
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2304 return result;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2305 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2306
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2307 ColumnVector
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2308 Matrix::row_min_loc (void) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2309 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2310 ColumnVector result;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2311
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2312 int nr = rows ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2313 int nc = cols ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2314
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2315 if (nr > 0 && nc > 0)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2316 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2317 result.resize (nr);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2318
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2319 for (int i = 0; i < nr; i++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2320 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2321 int res = 0;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2322 for (int j = 0; j < nc; j++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2323 if (elem (i, j) < elem (i, res))
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2324 res = j;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2325 result.elem (i) = (double) (res + 1);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2326 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2327 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2328
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2329 return result;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2330 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2331
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2332 ColumnVector
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2333 Matrix::row_max (void) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2334 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2335 ColumnVector result;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2336
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2337 int nr = rows ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2338 int nc = cols ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2339
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2340 if (nr > 0 && nc > 0)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2341 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2342 result.resize (nr);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2343
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2344 for (int i = 0; i < nr; i++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2345 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2346 double res = elem (i, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2347 for (int j = 1; j < nc; j++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2348 if (elem (i, j) > res)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2349 res = elem (i, j);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2350 result.elem (i) = res;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2351 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2352 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2353
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2354 return result;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2355 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2356
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2357 ColumnVector
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2358 Matrix::row_max_loc (void) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2359 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2360 ColumnVector result;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2361
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2362 int nr = rows ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2363 int nc = cols ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2364
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2365 if (nr > 0 && nc > 0)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2366 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2367 result.resize (nr);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2368
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2369 for (int i = 0; i < nr; i++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2370 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2371 int res = 0;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2372 for (int j = 0; j < nc; j++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2373 if (elem (i, j) > elem (i, res))
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2374 res = j;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2375 result.elem (i) = (double) (res + 1);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2376 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2377 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2378
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2379 return result;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2380 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2381
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2382 RowVector
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2383 Matrix::column_min (void) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2384 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2385 RowVector result;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2386
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2387 int nr = rows ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2388 int nc = cols ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2389
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2390 if (nr > 0 && nc > 0)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2391 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2392 result.resize (nc);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2393
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2394 for (int j = 0; j < nc; j++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2395 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2396 double res = elem (0, j);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2397 for (int i = 1; i < nr; i++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2398 if (elem (i, j) < res)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2399 res = elem (i, j);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2400 result.elem (j) = res;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2401 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2402 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2403
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2404 return result;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2405 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2406 RowVector
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2407 Matrix::column_min_loc (void) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2408 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2409 RowVector result;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2410
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2411 int nr = rows ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2412 int nc = cols ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2413
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2414 if (nr > 0 && nc > 0)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2415 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2416 result.resize (nc);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2417
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2418 for (int j = 0; j < nc; j++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2419 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2420 int res = 0;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2421 for (int i = 0; i < nr; i++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2422 if (elem (i, j) < elem (res, j))
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2423 res = i;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2424 result.elem (j) = (double) (res + 1);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2425 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2426 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2427
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2428 return result;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2429 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2430
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2431
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2432 RowVector
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2433 Matrix::column_max (void) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2434 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2435 RowVector result;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2436
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2437 int nr = rows ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2438 int nc = cols ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2439
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2440 if (nr > 0 && nc > 0)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2441 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2442 result.resize (nc);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2443
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2444 for (int j = 0; j < nc; j++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2445 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2446 double res = elem (0, j);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2447 for (int i = 1; i < nr; i++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2448 if (elem (i, j) > res)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2449 res = elem (i, j);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2450 result.elem (j) = res;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2451 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2452 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2453
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2454 return result;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2455 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2456
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2457 RowVector
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2458 Matrix::column_max_loc (void) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2459 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2460 RowVector result;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2461
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2462 int nr = rows ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2463 int nc = cols ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2464
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2465 if (nr > 0 && nc > 0)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2466 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2467 result.resize (nc);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2468
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2469 for (int j = 0; j < nc; j++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2470 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2471 int res = 0;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2472 for (int i = 0; i < nr; i++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2473 if (elem (i, j) > elem (res, j))
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2474 res = i;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2475 result.elem (j) = (double) (res + 1);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2476 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2477 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2478
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2479 return result;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2480 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2481
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2482 ostream&
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2483 operator << (ostream& os, const Matrix& a)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2484 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2485 // int field_width = os.precision () + 7;
1360
7eb93d12654c [project @ 1995-09-05 21:51:54 by jwe]
jwe
parents: 1321
diff changeset
2486
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2487 for (int i = 0; i < a.rows (); i++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2488 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2489 for (int j = 0; j < a.cols (); j++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2490 os << " " /* setw (field_width) */ << a.elem (i, j);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2491 os << "\n";
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2492 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2493 return os;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2494 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2495
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2496 istream&
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2497 operator >> (istream& is, Matrix& a)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2498 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2499 int nr = a.rows ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2500 int nc = a.cols ();
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2501
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2502 if (nr < 1 || nc < 1)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2503 is.clear (ios::badbit);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2504 else
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2505 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2506 double tmp;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2507 for (int i = 0; i < nr; i++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2508 for (int j = 0; j < nc; j++)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2509 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2510 is >> tmp;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2511 if (is)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2512 a.elem (i, j) = tmp;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2513 else
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2514 break;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2515 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2516 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2517
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2518 return is;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2519 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2520
2317
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2521 template <class T>
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2522 static void
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2523 read_int (istream& is, bool swap_bytes, T& val)
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2524 {
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2525 is.read ((char *) &val, sizeof (T));
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2526
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2527 if (swap_bytes)
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2528 {
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2529 switch (sizeof (T))
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2530 {
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2531 case 1:
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2532 break;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2533
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2534 case 2:
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2535 swap_2_bytes ((char *) &val);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2536 break;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2537
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2538 case 4:
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2539 swap_4_bytes ((char *) &val);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2540 break;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2541
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2542 case 8:
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2543 swap_8_bytes ((char *) &val);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2544 break;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2545
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2546 default:
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2547 (*current_liboctave_error_handler)
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2548 ("read_int: unrecognized data format!");
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2549 }
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2550 }
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2551 }
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2552
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2553 template void read_int (istream&, bool, char&);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2554 template void read_int (istream&, bool, signed char&);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2555 template void read_int (istream&, bool, unsigned char&);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2556 template void read_int (istream&, bool, short&);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2557 template void read_int (istream&, bool, unsigned short&);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2558 template void read_int (istream&, bool, int&);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2559 template void read_int (istream&, bool, unsigned int&);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2560 template void read_int (istream&, bool, long&);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2561 template void read_int (istream&, bool, unsigned long&);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2562
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2563 static inline bool
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2564 do_read (istream& is, oct_data_conv::data_type dt,
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2565 oct_mach_info::float_format flt_fmt, bool swap_bytes,
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2566 bool do_float_conversion, double& val)
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2567 {
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2568 bool retval = true;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2569
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2570 switch (dt)
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2571 {
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2572 case oct_data_conv::dt_char:
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2573 {
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2574 char tmp;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2575 read_int (is, swap_bytes, tmp);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2576 val = tmp;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2577 }
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2578 break;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2579
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2580 case oct_data_conv::dt_schar:
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2581 {
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2582 signed char tmp;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2583 read_int (is, swap_bytes, tmp);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2584 val = tmp;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2585 }
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2586 break;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2587
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2588 case oct_data_conv::dt_uchar:
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2589 {
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2590 unsigned char tmp;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2591 read_int (is, swap_bytes, tmp);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2592 val = tmp;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2593 }
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2594 break;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2595
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2596 case oct_data_conv::dt_short:
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2597 {
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2598 short tmp;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2599 read_int (is, swap_bytes, tmp);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2600 val = tmp;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2601 }
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2602 break;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2603
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2604 case oct_data_conv::dt_ushort:
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2605 {
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2606 unsigned short tmp;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2607 read_int (is, swap_bytes, tmp);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2608 val = tmp;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2609 }
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2610 break;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2611
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2612 case oct_data_conv::dt_int:
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2613 {
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2614 int tmp;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2615 read_int (is, swap_bytes, tmp);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2616 val = tmp;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2617 }
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2618 break;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2619
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2620 case oct_data_conv::dt_uint:
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2621 {
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2622 unsigned int tmp;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2623 read_int (is, swap_bytes, tmp);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2624 val = tmp;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2625 }
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2626 break;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2627
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2628 case oct_data_conv::dt_long:
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2629 {
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2630 long tmp;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2631 read_int (is, swap_bytes, tmp);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2632 val = tmp;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2633 }
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2634 break;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2635
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2636 case oct_data_conv::dt_ulong:
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2637 {
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2638 unsigned long tmp;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2639 read_int (is, swap_bytes, tmp);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2640 val = tmp;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2641 }
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2642 break;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2643
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2644 case oct_data_conv::dt_float:
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2645 {
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2646 float f;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2647
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2648 is.read ((char *) &f, sizeof (float));
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2649
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2650 if (do_float_conversion)
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2651 do_float_format_conversion (&f, 1, flt_fmt);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2652
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2653 val = f;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2654 }
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2655 break;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2656
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2657 case oct_data_conv::dt_double:
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2658 {
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2659 is.read ((char *) &val, sizeof (double));
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2660
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2661 if (do_float_conversion)
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2662 do_double_format_conversion (&val, 1, flt_fmt);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2663 }
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2664 break;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2665
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2666 default:
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2667 retval = false;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2668 (*current_liboctave_error_handler)
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2669 ("read: invalid type specification");
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2670 break;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2671 }
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2672
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2673 return retval;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2674 }
1360
7eb93d12654c [project @ 1995-09-05 21:51:54 by jwe]
jwe
parents: 1321
diff changeset
2675
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2676 int
2317
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2677 Matrix::read (istream& is, int nr, int nc,
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2678 oct_data_conv::data_type dt, int skip,
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2679 oct_mach_info::float_format flt_fmt)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2680 {
2317
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2681 int retval = -1;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2682
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2683 bool ok = true;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2684
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2685 int count = 0;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2686
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2687 double *data = 0;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2688 int max_size = 0;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2689
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2690 int final_nr = 0;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2691 int final_nc = 0;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2692
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2693 if (nr > 0)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2694 {
2317
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2695 if (nc > 0)
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2696 {
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2697 resize (nr, nc, 0.0);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2698 data = fortran_vec ();
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2699 max_size = nr * nc;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2700 }
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2701 else
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2702 {
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2703 resize (nr, 32, 0.0);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2704 data = fortran_vec ();
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2705 max_size = nr * 32;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2706 }
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2707 }
471
32fb3a762074 [project @ 1994-06-06 08:55:13 by jwe]
jwe
parents: 458
diff changeset
2708 else
32fb3a762074 [project @ 1994-06-06 08:55:13 by jwe]
jwe
parents: 458
diff changeset
2709 {
2317
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2710 resize (32, 1, 0.0);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2711 data = fortran_vec ();
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2712 max_size = 32;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2713 }
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2714
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2715 oct_mach_info::float_format native_flt_fmt
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2716 = oct_mach_info::float_format ();
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2717
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2718 bool do_float_conversion = (flt_fmt != native_flt_fmt);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2719
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2720 // XXX FIXME XXX -- byte order for Cray?
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2721
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2722 bool swap_bytes = false;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2723
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2724 if (oct_mach_info::words_big_endian ())
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2725 swap_bytes = (flt_fmt == oct_mach_info::ieee_little_endian
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2726 || flt_fmt == oct_mach_info::vax_g
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2727 || flt_fmt == oct_mach_info::vax_g);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2728 else
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2729 swap_bytes = (flt_fmt == oct_mach_info::ieee_big_endian);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2730
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2731 for (;;)
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2732 {
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2733 // XXX FIXME XXX -- maybe there should be a special case for
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2734 // skip == 0.
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2735
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2736 if (is)
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2737 {
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2738 if (nr > 0 && nc > 0 && count == max_size)
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2739 {
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2740 final_nr = nr;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2741 final_nc = nc;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2742
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2743 break;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2744 }
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2745
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2746 if (skip != 0)
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2747 is.seekg (skip, ios::cur);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2748
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2749 if (is)
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2750 {
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2751 double tmp = 0.0;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2752
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2753 ok = do_read (is, dt, flt_fmt, swap_bytes,
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2754 do_float_conversion, tmp);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2755
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2756 if (ok)
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2757 {
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2758 if (is)
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2759 {
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2760 if (count == max_size)
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2761 {
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2762 max_size *= 2;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2763
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2764 if (nr > 0)
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2765 resize (nr, max_size / 2, 0.0);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2766 else
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2767 resize (max_size, 1, 0.0);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2768
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2769 data = fortran_vec ();
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2770 }
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2771
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2772 data[count++] = tmp;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2773 }
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2774 else
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2775 {
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2776 if (is.eof ())
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2777 {
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2778 if (nr > 0)
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2779 {
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2780 if (count > nr)
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2781 {
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2782 final_nr = nr;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2783 final_nc = (count - 1) / nr + 1;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2784 }
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2785 else
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2786 {
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2787 final_nr = count;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2788 final_nc = 1;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2789 }
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2790 }
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2791 else
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2792 {
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2793 final_nr = count;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2794 final_nc = 1;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2795 }
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2796 }
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2797
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2798 break;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2799 }
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2800 }
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2801 else
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2802 break;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2803 }
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2804 else
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2805 {
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2806 ok = false;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2807 break;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2808 }
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2809 }
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2810 else
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2811 {
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2812 ok = false;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2813 break;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2814 }
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2815 }
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2816
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2817 if (ok)
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2818 {
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2819 resize (final_nr, final_nc, 0.0);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2820
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2821 retval = count;
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2822 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2823
2317
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2824 return retval;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2825 }
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2826
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2827 template <class T>
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2828 static void
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2829 write_int (ostream& os, bool swap_bytes, T val)
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2830 {
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2831 if (swap_bytes)
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2832 {
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2833 switch (sizeof (T))
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2834 {
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2835 case 1:
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2836 break;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2837
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2838 case 2:
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2839 swap_2_bytes ((char *) &val);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2840 break;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2841
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2842 case 4:
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2843 swap_4_bytes ((char *) &val);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2844 break;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2845
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2846 case 8:
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2847 swap_8_bytes ((char *) &val);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2848 break;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2849
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2850 default:
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2851 (*current_liboctave_error_handler)
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2852 ("write_int: unrecognized data format!");
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2853 }
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2854 }
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2855
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2856 os.write ((char *) &val, sizeof (T));
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2857 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2858
2317
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2859 template void write_int (ostream&, bool, char);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2860 template void write_int (ostream&, bool, signed char);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2861 template void write_int (ostream&, bool, unsigned char);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2862 template void write_int (ostream&, bool, short);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2863 template void write_int (ostream&, bool, unsigned short);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2864 template void write_int (ostream&, bool, int);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2865 template void write_int (ostream&, bool, unsigned int);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2866 template void write_int (ostream&, bool, long);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2867 template void write_int (ostream&, bool, unsigned long);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2868
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2869 static inline bool
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2870 do_write (ostream& os, double d, oct_data_conv::data_type dt,
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2871 oct_mach_info::float_format flt_fmt, bool swap_bytes,
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2872 bool do_float_conversion)
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2873 {
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2874 bool retval = true;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2875
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2876 switch (dt)
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2877 {
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2878 case oct_data_conv::dt_char:
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2879 write_int (os, swap_bytes, (char) d);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2880 break;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2881
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2882 case oct_data_conv::dt_schar:
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2883 write_int (os, swap_bytes, (signed char) d);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2884 break;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2885
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2886 case oct_data_conv::dt_uchar:
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2887 write_int (os, swap_bytes, (unsigned char) d);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2888 break;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2889
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2890 case oct_data_conv::dt_short:
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2891 write_int (os, swap_bytes, (short) d);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2892 break;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2893
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2894 case oct_data_conv::dt_ushort:
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2895 write_int (os, swap_bytes, (unsigned short) d);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2896 break;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2897
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2898 case oct_data_conv::dt_int:
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2899 write_int (os, swap_bytes, (int) d);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2900 break;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2901
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2902 case oct_data_conv::dt_uint:
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2903 write_int (os, swap_bytes, (unsigned int) d);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2904 break;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2905
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2906 case oct_data_conv::dt_long:
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2907 write_int (os, swap_bytes, (long) d);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2908 break;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2909
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2910 case oct_data_conv::dt_ulong:
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2911 write_int (os, swap_bytes, (unsigned long) d);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2912 break;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2913
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2914 case oct_data_conv::dt_float:
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2915 {
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2916 float f = (float) d;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2917
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2918 if (do_float_conversion)
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2919 do_float_format_conversion (&f, 1, flt_fmt);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2920
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2921 os.write ((char *) &f, sizeof (float));
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2922 }
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2923 break;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2924
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2925 case oct_data_conv::dt_double:
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2926 {
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2927 if (do_float_conversion)
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2928 do_double_format_conversion (&d, 1, flt_fmt);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2929
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2930 os.write ((char *) &d, sizeof (double));
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2931 }
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2932 break;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2933
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2934 default:
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2935 retval = false;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2936 (*current_liboctave_error_handler)
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2937 ("write: invalid type specification");
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2938 break;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2939 }
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2940
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2941 return retval;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2942 }
1360
7eb93d12654c [project @ 1995-09-05 21:51:54 by jwe]
jwe
parents: 1321
diff changeset
2943
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2944 int
2317
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2945 Matrix::write (ostream& os, oct_data_conv::data_type dt, int skip,
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2946 oct_mach_info::float_format flt_fmt)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2947 {
2317
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2948 int retval = -1;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2949
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2950 bool ok = true;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2951
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2952 int count = 0;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2953
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2954 const double *d = data ();
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2955
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2956 int n = length ();
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2957
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2958 oct_mach_info::float_format native_flt_fmt
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2959 = oct_mach_info::float_format ();
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2960
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2961 bool do_float_conversion = (flt_fmt != native_flt_fmt);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2962
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2963 // XXX FIXME XXX -- byte order for Cray?
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2964
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2965 bool swap_bytes = false;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2966
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2967 if (oct_mach_info::words_big_endian ())
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2968 swap_bytes = (flt_fmt == oct_mach_info::ieee_little_endian
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2969 || flt_fmt == oct_mach_info::vax_g
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2970 || flt_fmt == oct_mach_info::vax_g);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2971 else
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2972 swap_bytes = (flt_fmt == oct_mach_info::ieee_big_endian);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2973
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2974 for (int i = 0; i < n; i++)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2975 {
2317
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2976 if (os)
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2977 {
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2978 if (skip != 0)
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2979 os.seekp (skip, ios::cur);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2980
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2981 if (os)
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2982 {
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2983 ok = do_write (os, d[i], dt, flt_fmt, swap_bytes,
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2984 do_float_conversion);
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2985
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2986 if (os && ok)
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2987 count++;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2988 else
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2989 break;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2990 }
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2991 else
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2992 {
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2993 ok = false;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2994 break;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2995 }
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2996 }
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2997 else
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2998 {
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
2999 ok = false;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
3000 break;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
3001 }
471
32fb3a762074 [project @ 1994-06-06 08:55:13 by jwe]
jwe
parents: 458
diff changeset
3002 }
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3003
2317
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
3004 if (ok)
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
3005 retval = count;
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
3006
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
3007 return retval;
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3008 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3009
2317
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
3010
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
3011
1819
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
3012 Matrix
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
3013 Givens (double x, double y)
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
3014 {
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
3015 double cc, s, temp_r;
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
3016
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
3017 F77_FCN (dlartg, DLARTG) (x, y, cc, s, temp_r);
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
3018
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
3019 Matrix g (2, 2);
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
3020
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
3021 g.elem (0, 0) = cc;
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
3022 g.elem (1, 1) = cc;
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
3023 g.elem (0, 1) = s;
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
3024 g.elem (1, 0) = -s;
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
3025
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
3026 return g;
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
3027 }
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
3028
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
3029 Matrix
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
3030 Sylvester (const Matrix& a, const Matrix& b, const Matrix& c)
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
3031 {
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
3032 Matrix retval;
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
3033
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
3034 // XXX FIXME XXX -- need to check that a, b, and c are all the same
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
3035 // size.
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
3036
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
3037 // Compute Schur decompositions.
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
3038
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
3039 SCHUR as (a, "U");
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
3040 SCHUR bs (b, "U");
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
3041
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
3042 // Transform c to new coordinates.
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
3043
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
3044 Matrix ua = as.unitary_matrix ();
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
3045 Matrix sch_a = as.schur_matrix ();
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
3046
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
3047 Matrix ub = bs.unitary_matrix ();
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
3048 Matrix sch_b = bs.schur_matrix ();
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
3049
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
3050 Matrix cx = ua.transpose () * c * ub;
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
3051
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
3052 // Solve the sylvester equation, back-transform, and return the
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
3053 // solution.
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
3054
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
3055 int a_nr = a.rows ();
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
3056 int b_nr = b.rows ();
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
3057
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
3058 double scale;
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
3059 int info;
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
3060
1950
ab6abe89aaa1 [project @ 1996-02-14 04:36:21 by jwe]
jwe
parents: 1948
diff changeset
3061 double *pa = sch_a.fortran_vec ();
ab6abe89aaa1 [project @ 1996-02-14 04:36:21 by jwe]
jwe
parents: 1948
diff changeset
3062 double *pb = sch_b.fortran_vec ();
ab6abe89aaa1 [project @ 1996-02-14 04:36:21 by jwe]
jwe
parents: 1948
diff changeset
3063 double *px = cx.fortran_vec ();
ab6abe89aaa1 [project @ 1996-02-14 04:36:21 by jwe]
jwe
parents: 1948
diff changeset
3064
ab6abe89aaa1 [project @ 1996-02-14 04:36:21 by jwe]
jwe
parents: 1948
diff changeset
3065 F77_XFCN (dtrsyl, DTRSYL, ("N", "N", 1, a_nr, b_nr, pa, a_nr, pb,
ab6abe89aaa1 [project @ 1996-02-14 04:36:21 by jwe]
jwe
parents: 1948
diff changeset
3066 b_nr, px, a_nr, scale, info, 1L, 1L));
ab6abe89aaa1 [project @ 1996-02-14 04:36:21 by jwe]
jwe
parents: 1948
diff changeset
3067
ab6abe89aaa1 [project @ 1996-02-14 04:36:21 by jwe]
jwe
parents: 1948
diff changeset
3068
ab6abe89aaa1 [project @ 1996-02-14 04:36:21 by jwe]
jwe
parents: 1948
diff changeset
3069 if (f77_exception_encountered)
ab6abe89aaa1 [project @ 1996-02-14 04:36:21 by jwe]
jwe
parents: 1948
diff changeset
3070 (*current_liboctave_error_handler) ("unrecoverable error in dtrsyl");
ab6abe89aaa1 [project @ 1996-02-14 04:36:21 by jwe]
jwe
parents: 1948
diff changeset
3071 else
ab6abe89aaa1 [project @ 1996-02-14 04:36:21 by jwe]
jwe
parents: 1948
diff changeset
3072 {
ab6abe89aaa1 [project @ 1996-02-14 04:36:21 by jwe]
jwe
parents: 1948
diff changeset
3073 // XXX FIXME XXX -- check info?
1819
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
3074
1950
ab6abe89aaa1 [project @ 1996-02-14 04:36:21 by jwe]
jwe
parents: 1948
diff changeset
3075 retval = -ua*cx*ub.transpose ();
ab6abe89aaa1 [project @ 1996-02-14 04:36:21 by jwe]
jwe
parents: 1948
diff changeset
3076 }
1819
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
3077
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
3078 return retval;
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
3079 }
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
3080
1959
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3081 ComplexColumnVector
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3082 Qzval (const Matrix& a, const Matrix& b)
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3083 {
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3084 ComplexColumnVector retval;
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3085
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3086 int a_nr = a.rows();
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3087 int a_nc = a.cols();
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3088
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3089 int b_nr = b.rows();
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3090 int b_nc = b.cols();
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3091
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3092 if (a_nr == a_nc)
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3093 {
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3094 if (a_nr == b_nr && a_nc == b_nc)
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3095 {
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3096 if (a_nr != 0)
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3097 {
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3098 Matrix jnk (a_nr, a_nr, 0.0);
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3099 double *pjnk = jnk.fortran_vec ();
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3100
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3101 ColumnVector alfr (a_nr);
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3102 double *palfr = alfr.fortran_vec ();
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3103
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3104 ColumnVector alfi (a_nr);
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3105 double *palfi = alfr.fortran_vec ();
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3106
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3107 ColumnVector beta (a_nr);
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3108 double *pbeta = alfr.fortran_vec ();
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3109
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3110 Matrix atmp = a;
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3111 double *pa = atmp.fortran_vec ();
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3112
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3113 Matrix btmp = b;
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3114 double *pb = btmp.fortran_vec ();
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3115
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3116 long matz = 0;
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3117 int info;
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3118
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3119 // XXX FIXME ??? XXX
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3120 double eps = DBL_EPSILON;
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3121
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3122 F77_FCN (qzhes, QZHES) (a_nr, a_nr, pa, pb, matz, pjnk);
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3123
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3124 F77_FCN (qzit, QZIT) (a_nr, a_nr, pa, pb, eps, matz, pjnk, info);
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3125
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3126 if (! info)
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3127 {
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3128 F77_FCN (qzval, QZVAL) (a_nr, a_nr, pa, pb, palfr,
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3129 palfi, pbeta, matz, pjnk);
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3130
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3131 // Count and extract finite generalized eigenvalues.
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3132
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3133 int cnt = 0;
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3134
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3135 for (int i = 0; i < a_nr; i++)
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3136 if (beta.elem (i) != 0)
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3137 cnt++;
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3138
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3139 ComplexColumnVector cx (cnt, 0.0);
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3140
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3141 Complex Im (0, 1);
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3142
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3143 for (int i = 0; i < a_nr; i++)
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3144 {
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3145 if (beta.elem (i) != 0)
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3146 {
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3147 // Finite generalized eigenvalue.
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3148
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3149 cnt--;
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3150 cx.elem (cnt) = (alfr.elem (i) + Im * alfi.elem (i))
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3151 / beta.elem (i);
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3152 }
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3153 }
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3154
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3155 retval = cx;
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3156 }
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3157 else
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3158 (*current_liboctave_error_handler)
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3159 ("qzval: trouble in qzit, info = %d", info);
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3160 }
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3161 }
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3162 else
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3163 (*current_liboctave_error_handler) ("nonconformant matrices");
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3164 }
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3165 else
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3166 (*current_liboctave_error_handler) ("qzval: square matrices required");
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3167
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3168 return retval;
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3169 }
9fae6fc592f2 [project @ 1996-02-15 04:54:32 by jwe]
jwe
parents: 1950
diff changeset
3170
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3171 /*
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3172 ;;; Local Variables: ***
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3173 ;;; mode: C++ ***
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3174 ;;; End: ***
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3175 */