Skip to content

Commit 0551a66

Browse files
committed
add examples
1 parent ead68dd commit 0551a66

File tree

4 files changed

+103
-0
lines changed

4 files changed

+103
-0
lines changed

example/linalg/CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ ADD_EXAMPLE(eigvalsh)
2424
ADD_EXAMPLE(trace)
2525
ADD_EXAMPLE(state1)
2626
ADD_EXAMPLE(state2)
27+
ADD_EXAMPLE(schur_real)
28+
ADD_EXAMPLE(schur_complex)
29+
ADD_EXAMPLE(schur_eigvals)
2730
ADD_EXAMPLE(blas_gemv)
2831
ADD_EXAMPLE(lapack_getrf)
2932
ADD_EXAMPLE(lstsq1)
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
! This example demonstrates the Schur decomposition for a complex-valued matrix.
2+
program example_schur_complex
3+
use stdlib_linalg, only: schur
4+
use stdlib_linalg_constants, only: dp
5+
implicit none
6+
complex(dp), allocatable :: A(:,:), T(:,:), Z(:,:)
7+
integer :: n
8+
9+
! Initialize a complex-valued square matrix
10+
n = 3
11+
allocate(A(n,n), T(n,n), Z(n,n))
12+
A = reshape([ &
13+
(1.0_dp, 2.0_dp), (3.0_dp, -1.0_dp), (4.0_dp, 1.0_dp), &
14+
(0.0_dp, -1.0_dp), (2.0_dp, 0.0_dp), (1.0_dp, -2.0_dp), &
15+
(2.0_dp, 3.0_dp), (1.0_dp, 1.0_dp), (0.0_dp, -1.0_dp) ], shape=[n,n])
16+
17+
! Compute the Schur decomposition: A = Z T Z^H
18+
call schur(A, T, Z)
19+
20+
! Output results
21+
print *, "Original Matrix A:"
22+
print *, A
23+
print *, "Schur Form Matrix T:"
24+
print *, T
25+
print *, "Unitary Matrix Z:"
26+
print *, Z
27+
28+
! Test factorization: Z*T*Z^H = A
29+
print *, "Max error in reconstruction:", maxval(abs(matmul(Z, matmul(T, conjg(transpose(Z)))) - A))
30+
31+
deallocate(A, T, Z)
32+
end program example_schur_complex
33+
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
! This example includes eigenvalue computation in addition to
2+
! the Schur decomposition for a randomly generated matrix.
3+
program example_schur_eigenvalues
4+
use stdlib_linalg, only: schur
5+
use stdlib_linalg_constants, only: dp
6+
implicit none
7+
real(dp), allocatable :: A(:,:), T(:,:), Z(:,:)
8+
complex(dp), allocatable :: eigenvalues(:)
9+
integer :: n
10+
11+
! Create a random real-valued square matrix
12+
n = 5
13+
allocate(A(n,n), T(n,n), Z(n,n), eigenvalues(n))
14+
call random_number(A)
15+
16+
! Compute the Schur decomposition and eigenvalues
17+
call schur(A, T, Z, eigenvalues)
18+
19+
! Output results
20+
print *, "Random Matrix A:"
21+
print *, A
22+
print *, "Schur Form Matrix T:"
23+
print *, T
24+
print *, "Orthogonal Matrix Z:"
25+
print *, Z
26+
print *, "Eigenvalues:"
27+
print *, eigenvalues
28+
29+
! Test factorization: Z*T*Z^T = A
30+
print *, "Max error in reconstruction:", maxval(abs(matmul(Z, matmul(T, transpose(Z))) - A))
31+
32+
deallocate(A, T, Z, eigenvalues)
33+
end program example_schur_eigenvalues
34+

example/linalg/example_schur_real.f90

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
! This example computes the Schur decomposition of a real-valued square matrix.
2+
program example_schur_real
3+
use stdlib_linalg, only: schur
4+
use stdlib_linalg_constants, only: dp
5+
implicit none
6+
real(dp), allocatable :: A(:,:), T(:,:), Z(:,:)
7+
integer :: n
8+
9+
! Initialize a real-valued square matrix
10+
n = 3
11+
allocate(A(n,n), T(n,n), Z(n,n))
12+
A = reshape([ &
13+
0.0_dp, 2.0_dp, 2.0_dp, &
14+
0.0_dp, 1.0_dp, 2.0_dp, &
15+
1.0_dp, 0.0_dp, 1.0_dp], shape=[n,n])
16+
17+
! Compute the Schur decomposition: A = Z T Z^T
18+
call schur(A, T, Z)
19+
20+
! Output results
21+
print *, "Original Matrix A:"
22+
print *, A
23+
print *, "Schur Form Matrix T:"
24+
print *, T
25+
print *, "Orthogonal Matrix Z:"
26+
print *, Z
27+
28+
! Test factorization: Z*T*Z^T = A
29+
print *, "Max error in reconstruction:", maxval(abs(matmul(Z, matmul(T, transpose(Z))) - A))
30+
31+
deallocate(A, T, Z)
32+
end program example_schur_real
33+

0 commit comments

Comments
 (0)