Skip to content

Commit 6b10c6a

Browse files
committed
Allow for eye(m,n) and speye(m,n) with n != m and use it to speed up QR and eigs
1 parent 8fe8fb9 commit 6b10c6a

File tree

3 files changed

+24
-16
lines changed

3 files changed

+24
-16
lines changed

lalolab/help/00base.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lalolab/src/linalg.js

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -231,15 +231,18 @@ function zeros(rows, cols) {
231231
}
232232
}
233233

234-
function eye(n) {
235-
if ( n == 1)
234+
function eye(m,n) {
235+
if ( typeof(n) == "undefined")
236+
var n = m;
237+
if ( m == 1 && n == 1)
236238
return 1;
237-
238-
var I = zeros(n,n);
239-
const mn = n*n;
240-
for ( var i = 0; i< mn;i += n+1) {
241-
I.val[i] = 1;
239+
240+
var I = zeros(m,n);
241+
const e = (m<n)?m:n;
242+
for ( var i = 0; i< e; i ++) {
243+
I.val[i*(n+1)] = 1;
242244
}
245+
243246
return I;
244247
}
245248

@@ -4835,7 +4838,7 @@ function qroriginal( A, compute_Q ) {
48354838
if ( typeof( compute_Q ) == "number") {
48364839
// compute only first r columns of Q
48374840
r = compute_Q;
4838-
Q = get( eye(m), [], range(r) );
4841+
Q = eye(m,r);
48394842
}
48404843
else {
48414844
Q = eye(m);

lalolab/src/sparse.js

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -405,13 +405,18 @@ function sparse( A , rowmajor ) {
405405
* @param{number}
406406
* @return{spMatrix}
407407
*/
408-
function speye(n) {
409-
if ( n == 1)
408+
function speye(m,n) {
409+
if ( typeof(n) == "undefined" )
410+
var n = m;
411+
if ( m == 1 && n == 1)
410412
return 1;
411-
var val = ones(n);
412-
var rows = range(n+1);
413-
var cols = rows.slice(0,n);
414-
return new spMatrix(n,n,val,cols,rows);
413+
414+
var e = (m<n)?m:n;
415+
416+
var val = ones(e);
417+
var rows = range(e+1);
418+
var cols = rows.slice(0,e);
419+
return new spMatrix(m,n,val,cols,rows);
415420
}
416421
/**
417422
* @param{Float64Array}

0 commit comments

Comments
 (0)