Effacer les filtres
Effacer les filtres

How to calculate all the square roots of a matrix?

11 vues (au cours des 30 derniers jours)
Viswanath Hariharan
Viswanath Hariharan le 18 Déc 2017
I have a matrix [5/8 3/8; 3/8 5/8] and it has more than one square root. If I perform sqrtm on it, it returns only one square root. How do I obtain all of its square roots?

Réponses (2)

Walter Roberson
Walter Roberson le 19 Déc 2017
x = sym('x', [2 2]);
xsq = x^2;
sol = solve(xsq == [5/8 3/8; 3/8 5/8]);
all_roots = arrayfun(@(x11, x12, x21, x22) [x11,x12;x21,x22], sol.x1_1, sol.x1_2, sol.x2_1, sol.x2_2, 'uniform', 0);
  2 commentaires
Viswanath Hariharan
Viswanath Hariharan le 21 Déc 2017
This did work. Thank you. But [-0.7071 -0.7071;-0.3536 0.3536] is also a root but this algorithm didn't find it out. Why so?
Walter Roberson
Walter Roberson le 22 Déc 2017
T = sqrt(sym(2)); U = [-1/T -1/T;-1/T/2 1/T/2] double(U) %verify that U is the matrix you are talking about U^2
The result is
[ 3/4, 1/4]
[ 1/8, 3/8]
which is not your original matrix, so the matrix you indicate is not a square root of the original matrix.

Connectez-vous pour commenter.


Irshad Khan
Irshad Khan le 10 Août 2018
How do I get only real roots?

Catégories

En savoir plus sur Creating and Concatenating Matrices dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by