comparison liboctave/CmplxQR.cc @ 3883:69b6bd271277

[project @ 2002-04-02 21:05:10 by jwe]
author jwe
date Tue, 02 Apr 2002 21:05:10 +0000
parents db6d57d718f7
children 7da18459c08b
comparison
equal deleted inserted replaced
3882:c8c1ead8474f 3883:69b6bd271277
72 Complex *pwork = work.fortran_vec (); 72 Complex *pwork = work.fortran_vec ();
73 73
74 int info = 0; 74 int info = 0;
75 75
76 ComplexMatrix A_fact; 76 ComplexMatrix A_fact;
77 if (m > n) 77 if (m > n && qr_type != QR::economy)
78 { 78 {
79 A_fact.resize (m, m); 79 A_fact.resize (m, m);
80 A_fact.insert (a, 0, 0); 80 A_fact.insert (a, 0, 0);
81 } 81 }
82 else 82 else
104 if (m > n) 104 if (m > n)
105 r.resize (m, n); 105 r.resize (m, n);
106 } 106 }
107 else 107 else
108 { 108 {
109 volatile int n2; 109 int n2 = (qr_type == QR::economy) ? min_mn : m;
110 110
111 if (qr_type == QR::economy && m > n) 111 if (qr_type == QR::economy && m > n)
112 { 112 r.resize (n, n, 0.0);
113 n2 = n;
114 r.resize (n, n, 0.0);
115 }
116 else 113 else
117 { 114 r.resize (m, n, 0.0);
118 n2 = m;
119 r.resize (m, n, 0.0);
120 }
121 115
122 for (int j = 0; j < n; j++) 116 for (int j = 0; j < n; j++)
123 { 117 {
124 int limit = j < min_mn-1 ? j : min_mn-1; 118 int limit = j < min_mn-1 ? j : min_mn-1;
125 for (int i = 0; i <= limit; i++) 119 for (int i = 0; i <= limit; i++)
126 r.elem (i, j) = A_fact.elem (i, j); 120 r.elem (i, j) = A_fact.elem (i, j);
127 } 121 }
128 122
129 lwork = 32*m; 123 lwork = 32 * n2;
130 work.resize (lwork); 124 work.resize (lwork);
131 Complex *pwork = work.fortran_vec (); 125 Complex *pwork = work.fortran_vec ();
132 126
133 F77_XFCN (zungqr, ZUNGQR, (m, m, min_mn, tmp_data, m, ptau, 127 F77_XFCN (zungqr, ZUNGQR, (m, n2, min_mn, tmp_data, m, ptau,
134 pwork, lwork, info)); 128 pwork, lwork, info));
135 129
136 if (f77_exception_encountered) 130 if (f77_exception_encountered)
137 (*current_liboctave_error_handler) 131 (*current_liboctave_error_handler)
138 ("unrecoverable error in zungqr"); 132 ("unrecoverable error in zungqr");