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: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
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
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