In [135]:
import numpy as np
A=[[1,2],[4,1]]
print A
[[1, 2], [4, 1]]

In [136]:
Ainv=np.linalg.matrix_power(A,-1)
print Ainv
[[-0.14285714  0.28571429]
 [ 0.57142857 -0.14285714]]

In [137]:
d= np.linalg.norm(A,2) * np.linalg.norm(Ainv,2)
In [138]:
print d
2.78361162489

In [139]:
print np.linalg.norm(Ainv,2)
0.630601937482

In [140]:
print np.linalg.norm(A,2)
4.41421356237

In [141]:
print np.linalg.cond(A,2)
2.78361162489

In [142]:
B=[[1,2],[2,2],[2,0]]
q,r =np.linalg.qr(B)
print q
print r
[[-0.33333333  0.66666667]
 [-0.66666667  0.33333333]
 [-0.66666667 -0.66666667]]
[[-3. -2.]
 [ 0.  2.]]

In [143]:
l=np.transpose(q);
print l
[[-0.33333333 -0.66666667 -0.66666667]
 [ 0.66666667  0.33333333 -0.66666667]]

In [144]:
b=np.array([[5],[6],[0]])
print b
[[5]
 [6]
 [0]]

In [144]:
 
In [145]:
k=np.dot(l,b)
print k
[[-5.66666667]
 [ 5.33333333]]

In [146]:
x=np.dot(np.linalg.matrix_power(r,-1),k)
print x
[[ 0.11111111]
 [ 2.66666667]]

In [147]:
r=b-np.dot(B,x)
print r
[[-0.44444444]
 [ 0.44444444]
 [-0.22222222]]

In [148]:
np.linalg.norm(r,np.inf)
Out[148]:
0.44444444444444464
In [149]:
np.linalg.cond(np.dot(np.transpose(A),A),2)
Out[149]:
7.7484936782295621
In [150]:
print B
[[1, 2], [2, 2], [2, 0]]

In [151]:
dot(r,b)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-151-fa4da5b77c42> in <module>()
----> 1 dot(r,b)

ValueError: matrices are not aligned
In []:
np.dot(transpose(r),b)
In []:
np.dot(transpose(r),B)
In [152]:
A=([3,4,1],[0,0,2],[1,2,1])
print A
([3, 4, 1], [0, 0, 2], [1, 2, 1])

In [153]:
import numpy.linalg as li
In [154]:
At=np.transpose(A)
In [155]:
Aav=(A+At)*0.5
In [156]:
U,S,V=li.svd(A)
In [157]:
print S
[ 5.64575131  2.          0.35424869]

In [158]:
A10=li.matrix_power(A,10)
In [159]:
print A10
[[1035360 1583392 1293312]
 [ 211168  322944  263776]
 [ 448640  686112  560416]]

In [170]:
x0=[1,1,1]
x0=np.transpose(x0)
In [171]:
print A
print x0
([3, 4, 1], [0, 0, 2], [1, 2, 1])
[1 1 1]

In [172]:
for i in range(1,10):
    x0=dot(A,x0)
    if (i%1==0):
        print x0
    x0=x0/(li.norm(x0,2))
    

    
[8 2 4]
[ 3.92792202  0.87287156  1.74574312]
[ 3.88064504  0.79602975  1.69156322]
[ 3.83462849  0.78540584  1.66321236]
[ 3.8346919   0.78214679  1.66206193]
[ 3.83229596  0.78178838  1.66066158]
[ 3.83243939  0.78163966  1.66068365]
[ 3.83230608  0.7816297   1.66060937]
[ 3.83232137  0.78162253  1.66061487]

In [173]:
print x0
[ 0.90190338  0.18394804  0.39081122]

In [174]:
print V
[[-0.55362255 -0.78833262 -0.26839103]
 [ 0.19245009  0.19245009 -0.96225045]
 [-0.8102253   0.58437543 -0.04516997]]

In [174]:
def max_eigenpair(A, print_values=False):
    "Compute the eigenpair for the largest eigenvalue. Matrix A is assumed symmetric"
    
    # Compute eigenpairs
    evals, evecs = np.linalg.eig(A)

    # Get index of largest absolute eigenvalue
    index = np.argmax(np.abs(evals))

    # Get largest eigenvalue and corresponding eigenvector
    eval_max = evals[index]
    evec_max = evecs[:, index]/np.linalg.norm(evecs[:, index])

    if print_values:
        print("  Largest eigenvalue:        {}".format(eval_max))

        # Get second largest eigenvalue to compare to largest
        eval1 = evals[np.argsort(abs(evals))[-2]]
        print("  Second largest eigenvalue: {}".format(eval1))
    
    return eval_max, evec_max