File tree 1 file changed +11
-4
lines changed
1 file changed +11
-4
lines changed Original file line number Diff line number Diff line change @@ -559,23 +559,30 @@ function eigvecs{T}(M::Bidiagonal{T})
559
559
n = length (M. dv)
560
560
Q = Array {T} (n, n)
561
561
blks = [0 ; find (x -> x == 0 , M. ev); n]
562
+ v = zeros (T, n)
562
563
if M. isupper
563
564
for idx_block = 1 : length (blks) - 1 , i = blks[idx_block] + 1 : blks[idx_block + 1 ] # index of eigenvector
564
- v = zeros (T, n )
565
+ fill! (v, zero (T) )
565
566
v[blks[idx_block] + 1 ] = one (T)
566
567
for j = blks[idx_block] + 1 : i - 1 # Starting from j=i, eigenvector elements will be 0
567
568
v[j+ 1 ] = (M. dv[i] - M. dv[j])/ M. ev[j] * v[j]
568
569
end
569
- Q[:, i] = v/ norm (v)
570
+ c = norm (v)
571
+ for j = 1 : n
572
+ Q[j, i] = v[j] / c
573
+ end
570
574
end
571
575
else
572
576
for idx_block = 1 : length (blks) - 1 , i = blks[idx_block + 1 ]: - 1 : blks[idx_block] + 1 # index of eigenvector
573
- v = zeros (T, n )
577
+ fill! (v, zero (T) )
574
578
v[blks[idx_block+ 1 ]] = one (T)
575
579
for j = (blks[idx_block+ 1 ] - 1 ): - 1 : max (1 , (i - 1 )) # Starting from j=i, eigenvector elements will be 0
576
580
v[j] = (M. dv[i] - M. dv[j+ 1 ])/ M. ev[j] * v[j+ 1 ]
577
581
end
578
- Q[:,i] = v/ norm (v)
582
+ c = norm (v)
583
+ for j = 1 : n
584
+ Q[j, i] = v[j] / c
585
+ end
579
586
end
580
587
end
581
588
Q # Actually Triangular
You can’t perform that action at this time.
0 commit comments