Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
47
Task/Conjugate-transpose/Ada/conjugate-transpose.ada
Normal file
47
Task/Conjugate-transpose/Ada/conjugate-transpose.ada
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
with Ada.Text_IO; use Ada.Text_IO;
|
||||
with Ada.Complex_Text_IO; use Ada.Complex_Text_IO;
|
||||
with Ada.Numerics.Complex_Types; use Ada.Numerics.Complex_Types;
|
||||
with Ada.Numerics.Complex_Arrays; use Ada.Numerics.Complex_Arrays;
|
||||
procedure ConTrans is
|
||||
subtype CM is Complex_Matrix;
|
||||
S2O2 : constant Float := 0.7071067811865;
|
||||
|
||||
procedure Print (mat : CM) is begin
|
||||
for row in mat'Range(1) loop for col in mat'Range(2) loop
|
||||
Put(mat(row,col), Exp=>0, Aft=>4);
|
||||
end loop; New_Line; end loop;
|
||||
end Print;
|
||||
|
||||
function almostzero(mat : CM; tol : Float) return Boolean is begin
|
||||
for row in mat'Range(1) loop for col in mat'Range(2) loop
|
||||
if abs(mat(row,col)) > tol then return False; end if;
|
||||
end loop; end loop;
|
||||
return True;
|
||||
end almostzero;
|
||||
|
||||
procedure Examine (mat : CM) is
|
||||
CT : CM := Conjugate (Transpose(mat));
|
||||
isherm, isnorm, isunit : Boolean;
|
||||
begin
|
||||
isherm := almostzero(mat-CT, 1.0e-6);
|
||||
isnorm := almostzero(mat*CT-CT*mat, 1.0e-6);
|
||||
isunit := almostzero(CT-Inverse(mat), 1.0e-6);
|
||||
Print(mat);
|
||||
Put_Line("Conjugate transpose:"); Print(CT);
|
||||
Put_Line("Hermitian?: " & isherm'Img);
|
||||
Put_Line("Normal?: " & isnorm'Img);
|
||||
Put_Line("Unitary?: " & isunit'Img);
|
||||
end Examine;
|
||||
|
||||
hmat : CM := ((3.0+0.0*i, 2.0+1.0*i), (2.0-1.0*i, 1.0+0.0*i));
|
||||
nmat : CM := ((1.0+0.0*i, 1.0+0.0*i, 0.0+0.0*i),
|
||||
(0.0+0.0*i, 1.0+0.0*i, 1.0+0.0*i),
|
||||
(1.0+0.0*i, 0.0+0.0*i, 1.0+0.0*i));
|
||||
umat : CM := ((S2O2+0.0*i, S2O2+0.0*i, 0.0+0.0*i),
|
||||
(0.0+S2O2*i, 0.0-S2O2*i, 0.0+0.0*i),
|
||||
(0.0+0.0*i, 0.0+0.0*i, 0.0+1.0*i));
|
||||
begin
|
||||
Put_Line("hmat:"); Examine(hmat); New_Line;
|
||||
Put_Line("nmat:"); Examine(nmat); New_Line;
|
||||
Put_Line("umat:"); Examine(umat);
|
||||
end ConTrans;
|
||||
Loading…
Add table
Add a link
Reference in a new issue