Consider a matrix A of size n.
I would like to determine the square root of this matrix which can be done like this:
n = 10; % variable size
A = rand(n); % random square matrix A of size n by n
A_sqrt = sqrtm(A); % square root of matrix A
Inside the sqrtm command, matlab requires the Schur decomposition for determining the square root of a matrix.
[S, T] = schur(A); % with A = S*T*S and S*S' = I and T = (quassi) upper triangular matrix
To determine the speed of sqrtm, I would like an expression of the amount of required distinguisable operations (summation, subtraction, multiplication, division and square root) expressed in the matrix size n. To get this expression, I would like to know how Matlab determines the Schur decomposition of a matrix.
I read that the first step is to determine the upper Hessenberg form H by means of
[G,H] = hess(A); % with A = G*H*G' and G*G' = I
After this, a QR decomposition of H is executed
[Q,R] = qr(H); % with H = Q*R and Q*Q' = I and R = upper triangular matrix
How does one continue from here to a Schur decomposition?
If this is not the way how Matlab determines a Schur decomposition, what is it?
Best Answer