Sub Ex_Zgesdd()
Const M = 3, N = 3
Dim A(M - 1, N - 1) As Complex, U(M - 1, N - 1) As Complex, Vt(N - 1, N - 1) As Complex
Dim S(N - 1) As Double, Info As Long
A(0, 0) = Cmplx(0.2, -0.11): A(0, 1) = Cmplx(-0.93, -0.32): A(0, 2) = Cmplx(0.81, 0.37)
A(1, 0) = Cmplx(-0.8, -0.92): A(1, 1) = Cmplx(-0.29, 0.86): A(1, 2) = Cmplx(0.64, 0.51)
A(2, 0) = Cmplx(0.71, 0.59): A(2, 1) = Cmplx(-0.15, 0.19): A(2, 2) = Cmplx(0.2, 0.94)
Call Zgesdd("S", M, N, A(), S(), U(), Vt(), Info)
Debug.Print "Singular values =", S(0), S(1), S(2)
Debug.Print "U ="
Debug.Print Creal(U(0, 0)), Cimag(U(0, 0)), Creal(U(0, 1)), Cimag(U(0, 1))
Debug.Print Creal(U(1, 0)), Cimag(U(1, 0)), Creal(U(1, 1)), Cimag(U(1, 1))
Debug.Print Creal(U(2, 0)), Cimag(U(2, 0)), Creal(U(2, 1)), Cimag(U(2, 1))
Debug.Print Creal(U(0, 2)), Cimag(U(0, 2))
Debug.Print Creal(U(1, 2)), Cimag(U(1, 2))
Debug.Print Creal(U(2, 2)), Cimag(U(2, 2))
Debug.Print "V^H ="
Debug.Print Creal(Vt(0, 0)), Cimag(Vt(0, 0)), Creal(Vt(0, 1)), Cimag(Vt(0, 1))
Debug.Print Creal(Vt(1, 0)), Cimag(Vt(1, 0)), Creal(Vt(1, 1)), Cimag(Vt(1, 1))
Debug.Print Creal(Vt(2, 0)), Cimag(Vt(2, 0)), Creal(Vt(2, 1)), Cimag(Vt(2, 1))
Debug.Print Creal(Vt(0, 2)), Cimag(Vt(0, 2))
Debug.Print Creal(Vt(1, 2)), Cimag(Vt(1, 2))
Debug.Print Creal(Vt(2, 2)), Cimag(Vt(2, 2))
Debug.Print "Info =", Info
End Sub