Hi there,
%If we consider a diagnal matrix defined as:
delta=diag(exp(1i*2*pi*(0:10)/11));
%and we define another matrix C as:
C=diag(1i*2*pi*(0:10)/11);
%so, if we compute this:
D=logm(delta);
%D should be equal to C, right? but the result is not, part of elements in D is equal to C but not all of them. I can't fix this issue.
Many thanks to you!
Charlie

2 comentarios

Dyuman Joshi
Dyuman Joshi el 13 de Sept. de 2022
Editada: Dyuman Joshi el 13 de Sept. de 2022
Edit - Check Walter Roberson's answer for more details on the question.
In your matrix delta, all terms except for the diagonal terms are 0. And thus using logm() would not be ideal.
delta=diag(exp(1i*2*pi*(0:10)))
delta =
1.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 1.0000 - 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 1.0000 - 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 1.0000 - 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 1.0000 - 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 1.0000 - 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 1.0000 - 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 1.0000 - 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 1.0000 - 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 1.0000 - 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 1.0000 - 0.0000i
Though you can use expm() on C and compare it with delta
C=diag(1i*2*pi*(0:10));
D=expm(C);
isequal(delta,D)
ans = logical
1
DDDD
DDDD el 13 de Sept. de 2022
thank you for your answer, I make sense now!

Iniciar sesión para comentar.

 Respuesta aceptada

Walter Roberson
Walter Roberson el 13 de Sept. de 2022
The problem you are running into is that you are assuming that log(exp(X)) == X for all X. However, that is only true for real numbers. For complex numbers, with the sin() going on, values are mapped to the primary branch. exp(2i*pi*N) for integer N is going to involve 1i*sin(2*pi*N) which is going to have a complex part of 0 for all integer N.
format long g
Pi = sym(pi);
%If we consider a diagnal matrix defined as:
delta = diag(exp(1i*2*Pi*(0:10)))
delta = 
%and we define another matrix C as:
C = diag(1i*2*Pi*(0:10))
C = 
%so, if we compute this:
D=logm(delta)
D = 
C - D
ans = 

7 comentarios

DDDD
DDDD el 13 de Sept. de 2022
thank you for you answer! Actually I was tring to apply exp(log(X))=X for X is a square matrix. As you mentioned, this is only true for X is real matrix which I didn't know before. May I ask another question?
%if we have a circular forward cyclic matrix
P=circshift(eye(8),1);
%and can we apply exp(log(X))?
L=expm(logm(P));
%if I run this on matlab, L will be very close to P with error in 10^(-15) level; but, from wiki, only when ||P-I|| < 1 then can say exp(log(P))=P but indeed here ||P-I|| > 1. So I not sure if this 10^(-15) error is from matlab calculation or we can't say L=P.
Bruno Luong
Bruno Luong el 13 de Sept. de 2022
Editada: Bruno Luong el 13 de Sept. de 2022
@mingcheng nie you make few mistake sin your text:
expm(logm(X)) is always equal to X (by definition). however logm(expm(X)) might differ to X.
"or we can't say L=P."
L=expm(logm(P)) is equal to P, error is only due to finite precision numerical calculation.
The wiki says that the power series of logm(X) exists for ||X-I|| < 1. It does not says anything about logm.
The logm exists even for any X, see the calculation with diagonalize/jordaalize in bottom of the wiki.
DDDD
DDDD el 13 de Sept. de 2022
Thank you so much for the useful answers I really appreciate it!!! Now I make sense and thank you again to point out my mistakes!!!
Moreover, may I know why logm(expm(X)) might not be X?
Torsten
Torsten el 13 de Sept. de 2022
Editada: Torsten el 13 de Sept. de 2022
Because you always land on the principal branch of the logarithm:
syms x
x = sym('5')*pi*1i;
y = logm(expm(x))
y = 
Read here what principal value and principal branch mean:
"may I know why logm(expm(X)) might not be X"
Because two distincs X can have the same value exp(X): example X1 = 2*pi*1i, X2 = 0. The log function selects one of these by convention
X1 = 2*pi*1i
X1 = 0.0000 + 6.2832i
expm(X1) % = exp(X) is 1
ans = 1.0000 - 0.0000i
logm(1) % logm(expm(X1)) % = log(1) = X2 = 0
ans = 0
DDDD
DDDD el 13 de Sept. de 2022
what if we set
delta=diag(exp(1i*2*pi*(0:10)/11));
then
C=diag(1i*2*pi*(0:10)/11);
as delta vary from 0 to 10/11, we might not get the N is integer, so I think the expm(C) == delta right?
Torsten
Torsten el 13 de Sept. de 2022
Editada: Torsten el 13 de Sept. de 2022
expm(diag(v)) = diag(exp(v))
for every vector v.
Here, you have no restrictions.
v = [log(675) log(i) log(-8)];
expm(diag(v))
ans =
1.0e+02 * 6.7500 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0100i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i -0.0800 + 0.0000i
diag(exp(v))
ans =
1.0e+02 * 6.7500 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0100i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i -0.0800 + 0.0000i

Iniciar sesión para comentar.

Más respuestas (0)

Productos

Versión

R2022a

Etiquetas

Preguntada:

el 13 de Sept. de 2022

Editada:

el 13 de Sept. de 2022

Community Treasure Hunt

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

Start Hunting!

Translated by