From 6f4ebe31cfe564b7185cf1598946571f1cd025b6 Mon Sep 17 00:00:00 2001 From: jacob Date: Fri, 9 Aug 2024 17:01:34 -0600 Subject: [PATCH] Added specialized Hessenburg decomposition for Hermitian matrices. --- .../linalg/decompositions/hess/HermHess.java | 217 ++++++++++++++++++ .../unitary/ComplexUnitaryDecomposition.java | 2 +- .../linalg/transformations/Householder.java | 63 +++++ target/flag4j-v0.1.0-beta.jar | Bin 633089 -> 633923 bytes 4 files changed, 281 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/flag4j/linalg/decompositions/hess/HermHess.java diff --git a/src/main/java/org/flag4j/linalg/decompositions/hess/HermHess.java b/src/main/java/org/flag4j/linalg/decompositions/hess/HermHess.java new file mode 100644 index 000000000..b9893691a --- /dev/null +++ b/src/main/java/org/flag4j/linalg/decompositions/hess/HermHess.java @@ -0,0 +1,217 @@ +/* + * MIT License + * + * Copyright (c) 2024. Jacob Watters + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package org.flag4j.linalg.decompositions.hess; + + +import org.flag4j.arrays.dense.CMatrix; +import org.flag4j.complex_numbers.CNumber; +import org.flag4j.linalg.transformations.Householder; +import org.flag4j.util.ParameterChecks; +import org.flag4j.util.exceptions.LinearAlgebraException; + +/** + *

Computes the Hessenburg decomposition of a complex dense Hermitian matrix. That is, for a square, Hermitian matrix + * {@code A}, computes the decomposition {@code A=QHQ}H where {@code Q} is an unitary matrix and + * {@code H} is a Hermitian matrix in tri-diagonal form (special case of Hessenburg form) which is similar to {@code A} + * (i.e. has the same eigenvalues).

+ * + *

A matrix {@code H} is in tri-diagonal form if it is nearly diagonal except for possibly the first sub/super-diagonal. + * Specifically, if {@code H} has all zeros below the first sub-diagonal and above the first super-diagonal.

+ * + *

For example, the following matrix is in Hermitian tri-diagonal form where each {@code x} may hold a different value (provided + * the matrix is Hermitian): + *

+ *     [[ x x 0 0 0 ]
+ *      [ x x x 0 0 ]
+ *      [ 0 x x x 0 ]
+ *      [ 0 0 x x x ]
+ *      [ 0 0 0 x x ]]
+ *

+ */ +public class HermHess extends ComplexHess { + + /** + * Flag indicating if an explicit check should be made that the matrix to be decomposed is Hermitian. + */ + protected boolean enforceHermitian; + + /** + * Constructs a Hessenberg decomposer for Hermitian matrices. By default, the Householder vectors used in the decomposition will be + * stored so that the full unitary {@code Q} matrix can be formed by calling {@link #getQ()}. + */ + public HermHess() { + super(); + } + + + /** + * Constructs a Hessenberg decomposer for Hermitian matrices. + * @param computeQ Flag indicating if the unitary {@code Q} matrix from the Hessenberg decomposition should be explicitly computed. + * If true, then the {@code Q} matrix will be computed explicitly. + */ + public HermHess(boolean computeQ) { + super(computeQ); + } + + + /** + * Constructs a Hessenberg decomposer for Hermitian matrices. + * @param computeQ Flag indicating if the unitary {@code Q} matrix from the Hessenberg decomposition should be explicitly computed. + * If true, then the {@code Q} matrix will be computed explicitly. + * @param enforceHermitian Flag indicating if an explicit check should be made to ensure any matrix passed to + * {@link #decompose(CMatrix)} is truly Hermitian. If true, an exception will be thrown if the matrix is not Hermitian. If false, + * the decomposition will proceed under the assumption that the matrix is Hermitian whether it actually is or not. If the + * matrix is not Hermitian, then the values in the upper triangular portion of the matrix are taken to be the values. + */ + public HermHess(boolean computeQ, boolean enforceHermitian) { + super(computeQ); + this.enforceHermitian = enforceHermitian; + } + + + /** + * Applies decomposition to the source matrix. + * + * @param src The source matrix to decompose. (Assumed to be a Hermitian matrix). + * @return A reference to this decomposer. + */ + @Override + public HermHess decompose(CMatrix src) { + super.decompose(src); + return this; + } + + + /** + * Gets the Hessenberg matrix from the decomposition. The matrix will be Hermitian tri-diagonal. + * @return The Hermitian tri-diagonal (Hessenberg) matrix from this decomposition. + */ + @Override + public CMatrix getH() { + CMatrix H = new CMatrix(numRows); + H.entries[0] = transformMatrix.entries[0]; + + int idx1; + int idx0; + int rowOffset = numRows; + + for(int i=1; i 1) { + int rowColBase = numRows*numRows - 1; + H.entries[rowColBase] = transformMatrix.entries[rowColBase]; + H.entries[rowColBase - 1] = transformMatrix.entries[rowColBase - numRows]; + } + + return H; + } + + + /** + * Finds the maximum value in {@link #transformMatrix} at column {@code j} at or below the {@code j}th row. This method also initializes + * the first {@code numRows-j} entries of the storage array {@link #householderVector} to the entries of this column. + * @param j Index of column (and starting row) to compute max of. + * @return The maximum value in {@link #transformMatrix} at column {@code j} at or below the {@code j}th row. + */ + @Override + protected double findMaxAndInit(int j) { + double maxAbs = 0; + + // Compute max-abs value in row. (Equivalent to max value in column since matrix is Hermitian.) + int rowU = (j-1)*numRows; + for(int i=j; iApplies a Householder matrix {@code H=I-}&alpha{@code vv}H, represented by the vector {@code v} to a + * Hermitian matrix {@code A} on both the left and right side. That is, computes {@code H*A*H}.

+ * + *

Note: no check is made to + * explicitly check that the {@code src} matrix is actually Hermitian.

+ * + * @param src Matrix to apply the Householder reflector to. Assumed to be square and Hermitian. Upper triangular portion + * overwritten with the result. + * @param householderVector Householder vector {@code v} from the definition of a Householder reflector matrix. + * @param alpha The scalar &alpha value in Householder reflector matrix definition. + * @param startCol Starting column of sub-matrix in {@code src} to apply reflector to. + * @param workArray Array for storing temporary values during the computation. Contents will be overwritten. + */ + public static void hermLeftRightMultReflector(CMatrix src, + CNumber[] householderVector, + CNumber alpha, + int startCol, + CNumber[] workArray) { + int numRows = src.numRows; + + // Computes w = -alpha*A*v (taking conjugate for lower triangular part) + for (int i = startCol; i < numRows; i++) { + CNumber total = new CNumber(0, 0); + int rowOffset = i * numRows; + + for (int j = startCol; j < i; j++) { + total = total.add(src.entries[j * numRows + i].conj().mult(householderVector[j])); + } + for (int j = i; j < src.numRows; j++) { + total = total.add(src.entries[rowOffset + j].mult(householderVector[j])); + } + + workArray[i] = alpha.mult(total).addInv(); + } + + // Computes -0.5*alpha*v^T*w (with conjugation in the scalar product) + CNumber innerProd = new CNumber(0, 0); + for (int i = startCol; i < numRows; i++) { + innerProd = innerProd.add(householderVector[i].conj().mult(workArray[i])); + } + innerProd = innerProd.mult(alpha).mult(new CNumber(-0.5, 0)); + + // Computes w + innerProd*v + for (int i = startCol; i < numRows; i++) { + workArray[i] = workArray[i].add(innerProd.mult(householderVector[i])); + } + + // Computes A + w*v^T + v*w^T (ensuring Hermitian property is maintained) + for (int i = startCol; i < numRows; i++) { + CNumber prod = workArray[i]; + CNumber h = householderVector[i]; + int rowOffset = i * numRows; + + for (int j = i; j < src.numRows; j++) { + src.entries[rowOffset + j] = src.entries[rowOffset + j] + .add(prod.mult(householderVector[j])) + .add(workArray[j].mult(h.conj())); + } + } + } } diff --git a/target/flag4j-v0.1.0-beta.jar b/target/flag4j-v0.1.0-beta.jar index af96840b894bd2001835709fc33e92d96ba65db8..37658b10c1c992ca6d7bddff8f366bc4c6d77bb8 100644 GIT binary patch delta 27609 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 BX9NHM delta 26490 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%0AUM^Dk(D^KfEZ zudnrlv^?{@y-?uvNMg;n6W@)Po(I@o`1BTWy?P2<%P3;QLO9ELY`>{8iR25M+hi%? zc66eZQ4q3)Q9|oV+TSy(1IkEfH*vHt^hGM0xt~WtP5*S^MOXEbwrB0gOl^J|ZDbE+ zS3qa#Au_ekLohXpbjI+MjRGZBUR-$6RoX$_WbYCA&YL4nqlp#M{8PShj?b4QhK*j(P?8g!BF}xo{q43fGE?hf?_k&6lo(bT>7(a0A zYcJJ`2BdTlwTmV_unJL-m--Ku(u)J6R&?52qQjbIt#;&|l~Df^5b`df7&Hb+Y0_Y+ zE%hGDd*{EX@%s>JJeKr9jlp9fKXEvnI+k1540&nS5mH(a1{UrKrJ9fx6iuzh!Cuom zhTy)8y2gOeB^HHtG(Coxp|B8z7vs3FK1K-T+3uqj^#JFx;3w0rA_vVAks5$S6UPx% zn-UrpOFC1XSkjiRolI~aNiPDRacTwZ-?3rY%7S|NF#SvS2cezwg zH#D$~MtkYkW6G#y91!YqkYGnA#SwGn<324t%S!O?wC=ZE$UYaTtaCrWqMh@(ZnHwE z4t0#@Rz2bY*;&G!S`^PG`63i*Z{xzxJEVH_nLvM!$mAUy@tDAS{rCwW++D?mMb*%` z3f2n~oxv#mUuxj@^p*zSj{aLebAHWbsX+_>QqKvVvCxVa+e##T)$zvJ;`w#XufGLD zGj$^Oe$_;r;Ph?0(l10>b3^JIYCnp?rClZEc12k$p+gXS}UdCx**Xxt~{x2HEJ^D+Azlt{hW zX>NEdHKd&qhzVA~Edhj=EV%HXm8Jn*l)zoeMx?PDN2(KGhXeEnDAe=eLcK&{%f@Zs zn73Q!LqO+hOC;7JAFdDN)Wk%hV$^$qUc0wIZ`XqM5|5y)p_+93cugxhBTQ3=PMXU7 zdkzJqX~8W}N2)iKJ2+|zK#DK{+BAiak1CYrj})ZMQ-}@vZ7~(3d1IN>g+5B;8ZuCt z7R#jF=+9Gm$819Bt9VU%X0oPdev;71{u-aBaR`R}^bQh!*=$7KF~$zx|mD%T+F%ZrWeO`YoNAb)Xs3dBDr2gELo`3esoO z`4&_+38dz01nHHShcT2roRPV;7P3$Zf++P77c^{%`fn!2=fCP(%o626Bc z^)p$J^OHdqd_XOeQ`cnPOT!S^b(kYQvxq(|ItKlrBw1J^T7Go+?eZOdzEz=@$-F!0 z&H{B;ZmJP>A(e!}fO}k6I*Zt17pXzv&_`VO`L|Xh!E`o^zTyUYeGcp%Pt7Ju8Z(<% zv-Z{*sa^FeOpKW@^>~U}GP+64?~dx9p^}1EYM~x=okLVi$;Xp#@25cF74YdPQlj~e z^Eb>P9T|0_baJr~>})%NP4U!qfl&uAmZn+JPZY*uAZ&+RL<*h$MTMPd)LhURu8eA{+sZiun(NIsafd@G+Q7f1!@cj{BhhgT6#EK&(F; z`C*LZn{JZuJFtF(g~?mQG9JUVHpR;H=*$hgDs2`*RYu2g#32EY*o7QPLZomOM@}vj zI%~^Iw-Sk)Nd2r7nw$=s5_kjGgnBIEN`@=~C3hAe;y}w6%M2))Csb#4flf*mv{N-q zVB$TCDueSsE+VF^PN&?jT+adOS)ht1{P)W^^`~r^F0BXE*pJfE!05d!j$BA1CQOOw zU0;#stJWaZ1>gGRZOr%v8cD`w&@>%kvKEIsy&U;G+;4Z>FR6t_d;$};yGU!s0q%hA zV()!VJ_@(taZyiE;#ow0+clWPZz&?obw+p=2Q6>RI=&}7Y@k~wpOdMM{P`n zZIvx7-r`27uHn>!Kt(4mXF&Nix4F<1-acjB5fP6}KvWMAv8FFG;YzSmCmCVG3gH6? zyEmxe-YiB9Ke_#E2~&v-R$_lq?I%1{Q_b>U$h6te>V%izuj8(+sfVTQT!cgtE-Lc} z^<6?d>8mAtGBsHWCS3__vlg7Gx0H88M2kMqk+*cx0_2P{ZpBfLG4xt*8Nl%tYPgTO zx~maMvPQ&~URy@`viiJq{+n)vU!zBNkx0gfd^5CHQ!Qx1a_(W?a!}I4trcRjnsh@N*JHNT1q6bq8J67Y{fsdMwsI& z=ijZ*gdY7T45=s)Kd=`0lhDV+wP4Th7tH(63y@)^x)=CIJHZam1lEAzqN0-fNVTU9 zxuhSXdiHGgnFABrHQ0C$7EwzZICWnxaYR%1a=}#U3ocya3s-~sZy>l|SEDI;0PDUN z!-mW!Ed3JULIu6P85ZF#>xe4~$E^dQnGP3jT*vooXHb~Xkqhgs6fV>eE{~Azu^x~Q z)@sCxR;(lKST#P7({wAi{|r9j324@07 zv_h_IAbe$QugWT{gK1_VtZPF=p{n*!^NncGcU;r7??BThZ#812Uf1s<($1eF`uW71 z9vrODp-~yanv~>}zvT_I{3Y0mg@_EL#;Oac=z)#g(AABg?rwq_VfT51^Fg?Dj#_9= zGmMn2mi?B;G!jXW$j182R)yf{4PW~){=O7+{RZjB%No&l@4D$l`|*ScLn)ND^;T z({~`X7uDYbvHZG)nz0Ft&fAMfAF6#oVL%--d1tCe#IXVqSL(Wv&jX=_AZ$9rg(ede zhK$a7*g}t`1vkOJY4Agxp&}onYdPOyGvA4NZw4g=x46*hE(B1$*=m^aMmrz6PbqAR z0z^to>yaP9Of5P->fK@phc1}&5U~vZKvpkGDZj+XD*{u0KI6jrB4Oq@o$$IO1gtc| z%po5BXa7NJSNwkk?djNJp<|OH&teOqV`suV5Gb;j`B}|3qmi3*H z33yZ3lXH5MLbtN%t>m{zu+P3i*t5SHwnJf5DF`q5s)dA>l=6U9A@ac=5gYt34ee;& z5GCCHfeQv!w_{5CeuWTPbDeJ+@NiJ8LPJB9yz8K~O=Y0-P;!9;(v&1J#^0uHmUmr&4o7}#G|DmNnOagWyd~e{lT-t;eM=A?;O^l$9ND`~*tgy-DSn#-6`u;@&PUWoq8B37nLba4u;b`rf!g}v z*G}%R1g(T6Xpo3+w*>j@QQfX`Fm)k^n;MbZx{@nDpI2^#N?L$T@%2`GA$8u){s#z6 z-wx%&w_y3M8}zjau1LDHZo3fOKfX(uYX|=BP<=bc^{8km6S{-1JBxOJveQ+x%}&yt z239Ne9mF>j$*3jA|KoE2#>hEXE5%p0O~haHJu#mPd1>}}CB1%I zX++QMCZS)@LL%^$y;fawb;M{M@2H|5nJISzUcYefY3@Kco0~+ zo3No$yBoX-HDppZTD_b5=(Go`1Ise6Qg8+~uH^cd(Yfu06?SM^_c<}_nkxrg*- zo~D0{ezqDmi}$U+WhIyr`m+l5W!?93J8pZSmi_GM$h{<3TI)dQDSuck1DuF1y|$Nh XlX^G_B9nc@O3QJ+L~;`MJ(B+eW^3A5