#!/usr/bin/env python
# coding: utf-8

# In[1]:


A = [[-1, 2], [1, 1]]
from scipy.linalg import eig, eigvals
eig(A)


# In[2]:


l, v = eig(A)


# In[3]:


l


# In[4]:


eigvals(A)


# In[5]:


#power method for estimating
#the eigenvector with largest absolute value
from numpy import sum, sqrt
def power(A, v, n):
    v = v.copy()
    for i in range(n):
        v = A@v
        v = v / sqrt(sum(v**2)) #scale to length 1
    l = v.T@A@v #estimate of eigenvalue
    return l, v
    


# In[7]:


from numpy import array
A = array([[1, 2], [1, 1]])
v0 = array([1, 1])
power(A, v0, 10)


# In[8]:


l1, v1 = eig(A)


# In[9]:


l1, v1


# In[27]:


#shear building model example
m = [1, 1, 1, 0.8]
k = array([10, 10, 10, 9])
from numpy import diag
M = diag(m)
k2 = k.copy()
k2[0:-1] = k[1:]
k2[-1] = 0
K = diag(k + k2) + diag(-k[1:], 1) + diag(-k[1:], -1)


# In[29]:


from numpy.linalg import solve
A = solve(M, K) #inv(M)@K


# In[30]:


A


# In[31]:


eig(A)


# In[ ]:




