Find Largest Eigen Value

AIM: Write a Python program to find the largest eigen value of a matrix by Power method.

Source Code:
# Power Method to Find Largest Eigen Value and Eigen Vector
import numpy as np
import sys

# Reading order of matrix
n = int(input("Enter order of matrix: "))

# Making numpy array of n x n size and initializing
# to zero for storing matrix
a = np.zeros((n,n))

# Reading matrix
print("Enter Matrix Coefficients:")
for i in range(n):
  for j in range(n):
    a[i][j] = float(input( "a["+str(i)+"]["+ str(j)+"]="))

# Making numpy array n x 1 size and initializing to zero
# for storing initial guess vector
x = np.zeros((n))

# Reading initial guess vector
print("Enter initial guess vector: ")
for i in range(n):
  x[i] = float(input( "x["+str(i)+"]="))

# Reading tolerable error
tolerable_error = float(input("Enter tolerable error: "))

# Reading maximum number of steps
max_iteration = int(input("Enter maximum number of steps: "))

# Power Method Implementation
lambda_old = 1.0
condition = True
step = 1
while condition:
  # Multiplying a and x
  x = np.matmul(a,x)
 
  # Finding new Eigen value and Eigen vector
  lambda_new = max(abs(x))
 
  x = x/lambda_new
 
  # Displaying Eigen value and Eigen Vector
  print("\nSTEP %d" %(step))
  print("----------")
  print("Eigen Value = %0.4f" %(lambda_new))
  print("Eigen Vector: ")
  for i in range(n):
    print("%0.3f\t" % (x[i]))
 
  # Checking maximum iteration
  step = step + 1
  if step > max_iteration:
    print("Not convergent in given maximum iteration!")
    break
 
  # Calculating error
  error = abs(lambda_new - lambda_old)
  print("errror="+ str(error))
  lambda_old = lambda_new
  condition = error > tolerable_error
Output:
Enter order of matrix: 2
Enter Matrix Coefficients:
a[0][0]=5
a[0][1]=4
a[1][0]=1
a[1][1]=2
Enter initial guess vector:
x[0]=1
x[1]=1
Enter tolerable error: 0.001
Enter maximum number of steps: 10

STEP 1
----------
Eigen Value = 9.0000
Eigen Vector:
1.000
0.333
errror=8.0

STEP 2
----------
Eigen Value = 6.3333
Eigen Vector:
1.000
0.263
errror=2.666666666666667

STEP 3
----------
Eigen Value = 6.0526
Eigen Vector:
1.000
0.252
errror=0.2807017543859649

STEP 4
----------
Eigen Value = 6.0087
Eigen Vector:
1.000
0.250
errror=0.04393592677345559

STEP 5
----------
Eigen Value = 6.0014
Eigen Vector:
1.000
0.250
errror=0.007248474171017705

STEP 6
----------
Eigen Value = 6.0002
Eigen Vector:
1.000
0.250
errror=0.0012060398307225384

STEP 7
----------
Eigen Value = 6.0000
Eigen Vector:
1.000
0.250
errror=0.00020095009195664204

No comments:

Post a Comment

Total Pageviews