# Given matrix A
matrixA <- matrix(c(18, -15, 33, -15, -4, 8, -6, 6, -9, 9, -16, 9, 5, -6, 9, -4), 4, 4)

# Step 1: Find eigenvalues and eigenvectors
eigen_result <- eigen(matrixA)

# eigenvalues and eigenvectors
eigenvalues <- eigen_result$values
eigenvectors <- eigen_result$vectors

# Check algebraic and geometric multiplicities
for (i in 1:length(eigenvalues)) {
  lambda <- eigenvalues[i]
  algebraic_multiplicity <- sum(eigenvalues == lambda)
  
  # Calculate geometric multiplicity 
  eigenspace_matrix <- eigenvectors[, i]
  geometric_multiplicity <- length(eigenspace_matrix)
  
  print(paste("Eigenvalue:", lambda))
  print(paste("Algebraic Multiplicity:", algebraic_multiplicity))
  print(paste("Geometric Multiplicity:", geometric_multiplicity))
  
  # Print eigenspace matrix if geometric multiplicity > 1
  if (geometric_multiplicity > 1) {
    print(eigenspace_matrix)
  }
}
## [1] "Eigenvalue: 3.00000000000002"
## [1] "Algebraic Multiplicity: 1"
## [1] "Geometric Multiplicity: 4"
## [1]  0.3592106 -0.5388159  0.5388159 -0.5388159
## [1] "Eigenvalue: 2"
## [1] "Algebraic Multiplicity: 1"
## [1] "Geometric Multiplicity: 4"
## [1]  0.03286845 -0.44884904 -0.22253965 -0.86482964
## [1] "Eigenvalue: 1.99999999999994"
## [1] "Algebraic Multiplicity: 1"
## [1] "Geometric Multiplicity: 4"
## [1] -0.4080325  0.4308769 -0.6648245  0.4537213
## [1] "Eigenvalue: -0.99999999999997"
## [1] "Algebraic Multiplicity: 1"
## [1] "Geometric Multiplicity: 4"
## [1]  0.3779645 -0.3779645  0.7559289 -0.3779645