Jump to content

Conjugate transpose: Difference between revisions

PL/I version created */
(PL/I version created */)
Line 532:
-> {False, False, False}</lang>
 
=={{header|PL/I}}==
<lang PL/I>
test: procedure options (main); /* 1 October 2012 */
declare n fixed binary;
 
put ('Conjugate a complex square matrix.');
put skip list ('What is the order of the matrix?:');
get (n);
begin;
declare (M, MH, MM, MM_MMH, MM_MHM, IDENTITY)(n,n) fixed complex;
declare i fixed binary;
 
IDENTITY = 0; do i = 1 to n; IDENTITY(I,I) = 1; end;
put skip list ('Please type the matrix:');
get list (M);
do i = 1 to n;
put skip list (M(i,*));
end;
do i = 1 to n;
MH(i,*) = conjg(M(*,i));
end;
put skip list ('The conjugate transpose is:');
do i = 1 to n;
put skip list (MH(i,*));
end;
if all(M=MH) then
put skip list ('Matrix is Hermitian');
call MMULT(M, MH, MM_MMH);
call MMULT(MH, M, MM_MHM);
 
if all(MM_MMH = MM_MHM) then
put skip list ('Matrix is Normal');
 
if all(ABS(MM_MMH - IDENTITY) < 0.0001) then
put skip list ('Matrix is unitary');
if all(ABS(MM_MHM - IDENTITY) < 0.0001) then
put skip list ('Matrix is unitary');
end;
 
MMULT: procedure (M, MH, MM);
declare (M, MH, MM)(*,*) fixed complex;
declare (i, j, n) fixed binary;
 
n = hbound(M,1);
do i = 1 to n;
do j = 1 to n;
MM(i,j) = sum(M(i,*) * MH(*,j) );
end;
end;
end MMULT;
end test;
</lang>
Outputs from separate runs:
<pre>
Please type the matrix:
 
1+0I 1+0I 1+0I
1+0I 1+0I 1+0I
1+0I 1+0I 1+0I
The conjugate transpose is:
1-0I 1-0I 1-0I
1-0I 1-0I 1-0I
1-0I 1-0I 1-0I
Matrix is Hermitian
Matrix is Normal
 
1+0I 1+0I 0+0I
0+0I 1+0I 1+0I
1+0I 0+0I 1+0I
The conjugate transpose is:
1-0I 0-0I 1-0I
1-0I 1-0I 0-0I
0-0I 1-0I 1-0I
Matrix is Normal
</pre>
Next test performed with declaration of matrixes changed to
decimal precision (10,5).
<pre>
Please type the matrix:
 
0.70710+0.00000I 0.70710+0.00000I 0.00000+0.00000I
0.00000+0.70710I 0.00000-0.70710I 0.00000+0.00000I
0.00000+0.00000I 0.00000+0.00000I 0.00000+1.00000I
The conjugate transpose is:
0.70710-0.00000I 0.00000-0.70710I 0.00000-0.00000I
0.70710-0.00000I 0.00000+0.70710I 0.00000-0.00000I
0.00000-0.00000I 0.00000-0.00000I 0.00000-1.00000I
 
Matrix is Normal
Matrix is unitary
Matrix is unitary
</pre>
 
=={{header|Ruby}}==
Cookies help us deliver our services. By using our services, you agree to our use of cookies.