__author__ = 'chunk' import numpy as np import math def norm(l): s = 0 for item in l: if np.absolute(item) > s: s = np.absolute(item) return s def norm_vec(l): s = 0 loc = 0 i = -1 for item in l: i += 1 if np.absolute(item) > s: s = np.absolute(item) loc = i return l[loc], np.array(l, dtype=np.float32) / l[loc] def power_method(A, epsilon=0.00001, v=None): n = len(A) if v == None: v = np.random.rand(n) u = np.copy(v) lmbda = None lmbda_old = None iter = 0 while lmbda_old is None or np.absolute(lmbda - lmbda_old) >= epsilon: iter += 1 lmbda_old = lmbda v = np.dot(A, u) lmbda, u = norm_vec(v) print iter, lmbda return lmbda, u def test(): # ll = [0, 2, 0.5, 1, -3, 0.2] # ll2 = [i * 2 for i in ll] # print norm_vec(ll) # print norm_vec(ll2) # A = [[3, 1], [1, 3]] # print power_method(A) A = [[5, -4, 1], [-4, 6, -4], [1, -4, 7]] B = [[25, -41, 10, -6], [-41, 68, -17, 10], [10, -17, 5, -3], [-6, 10, -3, 2]] print power_method(A) print "" print power_method(B) if __name__ == '__main__': test()