X-Git-Url: http://gitweb.michael.orlitzky.com/?p=octave.git;a=blobdiff_plain;f=envelope.m;fp=envelope.m;h=e54f8185f49a1452846411ee654888f01f3cd1c4;hp=0000000000000000000000000000000000000000;hb=8ca30867e869231f85848dc14e15f11e6d9c732b;hpb=4c1c0fdc1eab7fbe1e322ff651e9c98357a8ce15 diff --git a/envelope.m b/envelope.m new file mode 100644 index 0000000..e54f818 --- /dev/null +++ b/envelope.m @@ -0,0 +1,38 @@ +function envelope = envelope(A) + ## Compute the envelope of the matrix ``A``. The envelope of a matrix + ## is defined as the set of indices, + ## + ## E = { (i,j) : i < j, A(k,j) != 0 for some k <= i } + ## + if (!issymmetric(A) && !is_upper_triangular(A)) + ## The envelope of a matrix is only defined for U-T or symmetric + ## matrices. + envelope = {NA}; + return; + end + + ## Start with an empty result, and append to it as we find + ## satisfactory indices. + envelope = {}; + + for j = [ 1 : columns(A) ] + ## Everything below the first non-zero element in a column will be + ## part of the envelope. Since we're moving from top to bottom, we + ## can simply set a flag indicating that we've found the first + ## non-zero element. Thereafter, everything we encounter should be + ## added to the envelope. + found_nonzero = false; + + for i = [ 1 : j-1 ] + if (A(i,j) != 0) + found_nonzero = true; + end + + if (found_nonzero) + envelope{end+1} = [i,j]; + end + end + + end + +end