Anonymous user
Conjugate transpose: Difference between revisions
m
→{{header|Tcl}}: Tweak layout for readability
(Added Ada) |
m (→{{header|Tcl}}: Tweak layout for readability) |
||
Line 348:
<lang tcl>package require struct::matrix
package require math::complexnumbers
proc conjugateTranspose {matrix} {▼
set mat [struct::matrix]▼
$mat = $matrix▼
$mat transpose▼
for {set c 0} {$c < [$mat columns]} {incr c} {▼
for {set r 0} {$r < [$mat rows]} {incr r} {▼
set val [$mat get cell $c $r]▼
$mat set cell $c $r [math::complexnumbers::conj $val]▼
}▼
}▼
return $mat▼
}▼
proc complexMatrix.equal {m1 m2 {epsilon 1e-14}} {
Line 378 ⟶ 365:
}
return 1
proc isHermitian {matrix {epsilon 1e-14}} {▼
if {[$matrix rows] != [$matrix columns]} {▼
# Must be square!▼
return 0▼
}▼
set cc [conjugateTranspose $matrix]▼
set result [complexMatrix.equal $matrix $cc $epsilon]▼
$cc destroy▼
return $result▼
}
Line 413 ⟶ 389:
}
return $c
▲}
▲proc complexMatrix.conjugateTranspose {matrix} {
▲ set mat [struct::matrix]
▲ $mat = $matrix
▲ $mat transpose
▲ for {set c 0} {$c < [$mat columns]} {incr c} {
▲ for {set r 0} {$r < [$mat rows]} {incr r} {
▲ set val [$mat get cell $c $r]
▲ $mat set cell $c $r [math::complexnumbers::conj $val]
▲ }
▲ }
▲ return $mat
}</lang>
Using these tools to test for the properties described in the task:
▲<lang tcl>proc isHermitian {matrix {epsilon 1e-14}} {
▲ if {[$matrix rows] != [$matrix columns]} {
▲ # Must be square!
▲ return 0
▲ }
▲ set cc [complexMatrix.conjugateTranspose $matrix]
▲ set result [complexMatrix.equal $matrix $cc $epsilon]
▲ $cc destroy
▲ return $result
}
Line 420:
return 0
}
set mh [complexMatrix.conjugateTranspose $matrix]
set mhm [complexMatrix.multiply $mh $matrix]
set mmh [complexMatrix.multiply $matrix $mh]
Line 435:
return 0
}
set mh [complexMatrix.conjugateTranspose $matrix]
set mhm [complexMatrix.multiply $mh $matrix]
set mmh [complexMatrix.multiply $matrix $mh]
|