Azzera filtri
Azzera filtri

How to calculate all the square roots of a matrix?

11 visualizzazioni (ultimi 30 giorni)
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?

Risposte (2)

Walter Roberson
Walter Roberson il 19 Dic 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 Commenti
Viswanath Hariharan
Viswanath Hariharan il 21 Dic 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 il 22 Dic 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.

Accedi per commentare.


Irshad Khan
Irshad Khan il 10 Ago 2018
How do I get only real roots?

Categorie

Scopri di più su Creating and Concatenating Matrices in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by