Filter löschen
Filter löschen

How to calculate all the square roots of a matrix?

11 Ansichten (letzte 30 Tage)
Viswanath Hariharan
Viswanath Hariharan am 18 Dez. 2017
Beantwortet: Irshad Khan am 10 Aug. 2018
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?

Antworten (2)

Walter Roberson
Walter Roberson am 19 Dez. 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 Kommentare
Viswanath Hariharan
Viswanath Hariharan am 21 Dez. 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 am 22 Dez. 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.

Melden Sie sich an, um zu kommentieren.


Irshad Khan
Irshad Khan am 10 Aug. 2018
How do I get only real roots?

Kategorien

Mehr zu Creating and Concatenating Matrices finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by