Return only the real nullspace of a complex matrix
5 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Martin Seltmann
am 24 Okt. 2018
Kommentiert: Torsten
am 24 Okt. 2018
I need to restrict the computation of the nullspace of a complex matrix A to one over the REAL numbers. How do I do that? null(A,’Real’) did not work.
2 Kommentare
Torsten
am 24 Okt. 2018
It's not clear what you mean. You want to know if kern(A) contains purely real vectors ?
Akzeptierte Antwort
Bruno Luong
am 24 Okt. 2018
Bearbeitet: Bruno Luong
am 24 Okt. 2018
A = randn(2,5)+1i*randn(2,5);
% N is a real orthonormal basis of null(A)
n = size(A,2);
NR=null([[real(A), imag(A)]; [-imag(A), real(A)]; [zeros(n), eye(n)]]);
N=NR(1:n,:);
% Check
norm(A*N)
4 Kommentare
Torsten
am 24 Okt. 2018
If x is real valued and A*x = 0, you have (real(A)+i*imag(A))*x = 0. This implies that real(A)*x = 0 and imag(A)*x=0.
Conversely, if real(A)*x=0 and imag(A)*x=0 for a real vector x, then real(A)*x+i*imag(A)*x = A*x = 0.
Best wishes
Torsten.
Weitere Antworten (1)
Bruno Luong
am 24 Okt. 2018
Bearbeitet: Bruno Luong
am 24 Okt. 2018
Torsten proposition:
NR = null([real(A);imag(A)]);
Torsten is right, it's actually the same null space, and his formula is much simpler.
Because
real(A)*NR = 0
imag(A)*NR = 0
so
A*NR = (real(A)+1i*imag(A))*NR = real(A)*NR + 1i*(imag(A)*NR) = 0
The opposite is also true.
Since
A*NR = 0 in the complex field
because NR is real, therefore the above is equivalent to
real(A)*NR = 0
and because
A*(1i*NR) = 0
as well, this implies
imag(A)*NR = 0
3 Kommentare
Bruno Luong
am 24 Okt. 2018
Bearbeitet: Bruno Luong
am 24 Okt. 2018
You should't accept my comment, but Torsten's reply (if he put his code in a separate answer)
Torsten
am 24 Okt. 2018
You were the first who answered ( and your answer is not wrong :-) )
Best wishes
Torsten.
Siehe auch
Kategorien
Mehr zu Parallel Computing Fundamentals 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!